From 689f573201cbf362afda2b289c7868fd75df8689 Mon Sep 17 00:00:00 2001 From: Zeeshaun Date: Tue, 5 May 2026 18:23:25 +0000 Subject: [PATCH] Add guided order start modes --- client/src/App.jsx | 188 +++++++++++++++++++++++++++++------------- client/src/styles.css | 58 +++++++++++++ 2 files changed, 189 insertions(+), 57 deletions(-) diff --git a/client/src/App.jsx b/client/src/App.jsx index b260d35..10231e3 100644 --- a/client/src/App.jsx +++ b/client/src/App.jsx @@ -21,6 +21,7 @@ const initialBuilder = (settings) => ({ export default function App() { const [view, setView] = useState("order"); + const [orderMode, setOrderMode] = useState(null); const [menu, setMenu] = useState([]); const [orders, setOrders] = useState([]); const [settings, setSettings] = useState(null); @@ -102,6 +103,27 @@ export default function App() { return selectedCategory === "All" || item.category === selectedCategory; }); const selectedDrink = menu.find((item) => item._id === selectedDrinkId) || null; + const modeDetails = { + premade: { + stepLabel: "Quick pick", + title: "Pick a house favorite", + description: "Choose a ready-to-go drink and add it to the ticket in one tap.", + buttonLabel: "Add this drink" + }, + simple: { + stepLabel: "Quick customize", + title: selectedDrink?.name || "Choose a drink", + description: "Make a few easy choices and keep the line moving.", + buttonLabel: "Add customized drink" + }, + detailed: { + stepLabel: "Full customize", + title: selectedDrink?.name || "Choose a drink", + description: "Adjust every detail, including toppings and special instructions.", + buttonLabel: "Add fully customized drink" + } + }; + const activeMode = orderMode ? modeDetails[orderMode] : null; return (
@@ -125,6 +147,36 @@ export default function App() { {view === "order" && (
+ {!orderMode && ( +
+
+

Start a new order

+

How would you like to order today?

+

+ Pick the path that feels easiest for your guest. You can switch anytime during the order. +

+
+
+ + + +
+
+ )} + + {orderMode && (
@@ -161,72 +213,93 @@ export default function App() { ))}
+ )} + {orderMode && (
-

Step 2

-

{selectedDrink?.name || "Select a drink"}

+

Step 2 • {activeMode.stepLabel}

+

{activeMode.title}

+

{activeMode.description}

+
+
+ +
{formatCurrency(ticketTotal(ticket, settings))}
-
{formatCurrency(ticketTotal(ticket, settings))}
{selectedDrink && builder ? ( <> - option.name)} - value={builder.size} - onChange={(size) => setBuilder((current) => ({ ...current, size }))} - /> - setBuilder((current) => ({ ...current, sweetness }))} - /> - setBuilder((current) => ({ ...current, ice }))} - /> -
- Toppings -
- {settings.toppings.map((topping) => { - const checked = builder.toppings.includes(topping.name); - return ( - - ); - })} -
-
-