182 lines
4.3 KiB
JavaScript
182 lines
4.3 KiB
JavaScript
// Item classification constants - app-level controlled values
|
|
|
|
export const ITEM_TYPES = {
|
|
PRODUCE: "produce",
|
|
MEAT: "meat",
|
|
DAIRY: "dairy",
|
|
BAKERY: "bakery",
|
|
FROZEN: "frozen",
|
|
PANTRY: "pantry",
|
|
BEVERAGE: "beverage",
|
|
SNACK: "snack",
|
|
HOUSEHOLD: "household",
|
|
PERSONAL_CARE: "personal_care",
|
|
OTHER: "other",
|
|
};
|
|
|
|
// Item groups filtered by item type
|
|
export const ITEM_GROUPS = {
|
|
[ITEM_TYPES.PRODUCE]: [
|
|
"Fruits",
|
|
"Vegetables",
|
|
"Salad Mix",
|
|
"Herbs",
|
|
"Organic Produce",
|
|
],
|
|
[ITEM_TYPES.MEAT]: [
|
|
"Beef",
|
|
"Pork",
|
|
"Chicken",
|
|
"Seafood",
|
|
"Deli Meat",
|
|
"Prepared Meat",
|
|
],
|
|
[ITEM_TYPES.DAIRY]: [
|
|
"Milk",
|
|
"Cheese",
|
|
"Yogurt",
|
|
"Butter",
|
|
"Eggs",
|
|
"Cream",
|
|
],
|
|
[ITEM_TYPES.BAKERY]: [
|
|
"Bread",
|
|
"Rolls",
|
|
"Pastries",
|
|
"Cakes",
|
|
"Bagels",
|
|
"Tortillas",
|
|
],
|
|
[ITEM_TYPES.FROZEN]: [
|
|
"Frozen Meals",
|
|
"Ice Cream",
|
|
"Frozen Vegetables",
|
|
"Frozen Meat",
|
|
"Pizza",
|
|
"Desserts",
|
|
],
|
|
[ITEM_TYPES.PANTRY]: [
|
|
"Canned Goods",
|
|
"Pasta",
|
|
"Rice",
|
|
"Cereal",
|
|
"Condiments",
|
|
"Spices",
|
|
"Baking",
|
|
"Oils",
|
|
],
|
|
[ITEM_TYPES.BEVERAGE]: [
|
|
"Water",
|
|
"Soda",
|
|
"Juice",
|
|
"Coffee",
|
|
"Tea",
|
|
"Alcohol",
|
|
"Sports Drinks",
|
|
],
|
|
[ITEM_TYPES.SNACK]: [
|
|
"Chips",
|
|
"Crackers",
|
|
"Nuts",
|
|
"Candy",
|
|
"Cookies",
|
|
"Protein Bars",
|
|
],
|
|
[ITEM_TYPES.HOUSEHOLD]: [
|
|
"Cleaning Supplies",
|
|
"Paper Products",
|
|
"Laundry",
|
|
"Kitchen Items",
|
|
"Storage",
|
|
],
|
|
[ITEM_TYPES.PERSONAL_CARE]: [
|
|
"Bath & Body",
|
|
"Hair Care",
|
|
"Oral Care",
|
|
"Skincare",
|
|
"Health",
|
|
],
|
|
[ITEM_TYPES.OTHER]: [
|
|
"Miscellaneous",
|
|
],
|
|
};
|
|
|
|
// Store zones - path-oriented physical shopping areas
|
|
// Applicable to Costco, 99 Ranch, Stater Bros, and similar large grocery stores
|
|
export const ZONES = {
|
|
ENTRANCE: "Entrance & Seasonal",
|
|
PRODUCE_SECTION: "Produce & Fresh Vegetables",
|
|
MEAT_SEAFOOD: "Meat & Seafood Counter",
|
|
DELI_PREPARED: "Deli & Prepared Foods",
|
|
BAKERY_SECTION: "Bakery",
|
|
DAIRY_SECTION: "Dairy & Refrigerated",
|
|
FROZEN_FOODS: "Frozen Foods",
|
|
DRY_GOODS_CENTER: "Center Aisles (Dry Goods)",
|
|
BEVERAGES: "Beverages & Water",
|
|
SNACKS_CANDY: "Snacks & Candy",
|
|
HOUSEHOLD_CLEANING: "Household & Cleaning",
|
|
HEALTH_BEAUTY: "Health & Beauty",
|
|
CHECKOUT_AREA: "Checkout Area",
|
|
};
|
|
|
|
// Default zone mapping for each item type
|
|
// This determines where items are typically found in the store
|
|
export const ITEM_TYPE_TO_ZONE = {
|
|
[ITEM_TYPES.PRODUCE]: ZONES.PRODUCE_SECTION,
|
|
[ITEM_TYPES.MEAT]: ZONES.MEAT_SEAFOOD,
|
|
[ITEM_TYPES.DAIRY]: ZONES.DAIRY_SECTION,
|
|
[ITEM_TYPES.BAKERY]: ZONES.BAKERY_SECTION,
|
|
[ITEM_TYPES.FROZEN]: ZONES.FROZEN_FOODS,
|
|
[ITEM_TYPES.PANTRY]: ZONES.DRY_GOODS_CENTER,
|
|
[ITEM_TYPES.BEVERAGE]: ZONES.BEVERAGES,
|
|
[ITEM_TYPES.SNACK]: ZONES.SNACKS_CANDY,
|
|
[ITEM_TYPES.HOUSEHOLD]: ZONES.HOUSEHOLD_CLEANING,
|
|
[ITEM_TYPES.PERSONAL_CARE]: ZONES.HEALTH_BEAUTY,
|
|
[ITEM_TYPES.OTHER]: ZONES.DRY_GOODS_CENTER,
|
|
};
|
|
|
|
// Optimal walking flow through the store
|
|
// Represents a typical shopping path that minimizes backtracking
|
|
// Start with perimeter (fresh items), then move to center aisles, end at checkout
|
|
export const ZONE_FLOW = [
|
|
ZONES.ENTRANCE,
|
|
ZONES.PRODUCE_SECTION,
|
|
ZONES.MEAT_SEAFOOD,
|
|
ZONES.DELI_PREPARED,
|
|
ZONES.BAKERY_SECTION,
|
|
ZONES.DAIRY_SECTION,
|
|
ZONES.FROZEN_FOODS,
|
|
ZONES.DRY_GOODS_CENTER,
|
|
ZONES.BEVERAGES,
|
|
ZONES.SNACKS_CANDY,
|
|
ZONES.HOUSEHOLD_CLEANING,
|
|
ZONES.HEALTH_BEAUTY,
|
|
ZONES.CHECKOUT_AREA,
|
|
];
|
|
|
|
// Helper to get display label for item type
|
|
export const getItemTypeLabel = (type) => {
|
|
const labels = {
|
|
[ITEM_TYPES.PRODUCE]: "Produce",
|
|
[ITEM_TYPES.MEAT]: "Meat & Seafood",
|
|
[ITEM_TYPES.DAIRY]: "Dairy & Eggs",
|
|
[ITEM_TYPES.BAKERY]: "Bakery",
|
|
[ITEM_TYPES.FROZEN]: "Frozen",
|
|
[ITEM_TYPES.PANTRY]: "Pantry & Dry Goods",
|
|
[ITEM_TYPES.BEVERAGE]: "Beverages",
|
|
[ITEM_TYPES.SNACK]: "Snacks",
|
|
[ITEM_TYPES.HOUSEHOLD]: "Household",
|
|
[ITEM_TYPES.PERSONAL_CARE]: "Personal Care",
|
|
[ITEM_TYPES.OTHER]: "Other",
|
|
};
|
|
return labels[type] || type;
|
|
};
|
|
|
|
// Helper to get all zone values as array (for dropdowns)
|
|
export const getZoneValues = () => Object.values(ZONES);
|
|
|
|
// Helper to get suggested zone for an item type
|
|
export const getSuggestedZone = (itemType) => {
|
|
return ITEM_TYPE_TO_ZONE[itemType] || null;
|
|
};
|