{"version":3,"sources":["lib/useViewport.js","components/Div.js","HoursContext.js","About.js","lib/useApple.js","CartContext.js","MenuContext.js","lib/hsb.js","StylesContext.js","components/Pressable.js","DishSidesModal.js","assets/Chili.js","assets/Done.js","assets/Edit.js","lib/useDebounce.js","lib/useOverflowed.js","SectionDishRow.js","Cart.js","OrdersContext.js","SnacksContext.js","assets/Cash.js","assets/CreditCard.js","assets/Delivery.js","assets/ScheduledSend.js","assets/Send.js","assets/Takeout.js","components/TelephoneInput.js","lib/dst.js","Checkout.js","Fallback.js","MenuSectionRow.js","assets/Clear.js","assets/Search.js","Section.js","Menu.js","NavBar.js","Order.js","Orders.js","assets/Error.js","assets/Warning.js","assets/Info.js","assets/Success.js","SnacksQueue.js","App.js","reportWebVitals.js","index.js"],"names":["useViewport","useState","breakpoint","setBreakpoint","window","innerHeight","height","setHeight","Math","min","innerWidth","width","setWidth","mobile","setMobile","portrait","setPortrait","useEffect","addEventListener","_handleWindowResize","removeEventListener","newHeight","newFullWidth","newWidth","forwardRef","ref","children","style","props","undefined","styles","alignContent","boxSizing","display","flexDirection","flexBasis","flexGrow","flexShrink","justifyContent","marginBottom","marginLeft","marginRight","marginTop","maxHeight","maxWidth","minHeight","minWidth","overflowX","overflowY","overscrollBehavior","paddingBottom","paddingLeft","paddingRight","paddingTop","HoursContext","createContext","HoursProvider","cookingTimeOffset","setCookingTimeOffset","deliveryTimeOffset","setDeliveryTimeOffset","holidays","setHolidays","loaded","setLoaded","weeklyHours","setWeeklyHours","hours","JSON","parse","localStorage","getItem","_fetch","reduce","acc","cur","beginning","Date","end","lastModified","Provider","value","alignItems","controller","AbortController","a","prevLastModified","fetch","process","body","headers","method","signal","response","status","get","json","decodedResponse","setItem","stringify","console","error","abort","useHours","context","useContext","Error","About","apple","navigator","platform","useApple","deliveryMapNode","useRef","googleMapsAPILoaded","setGoogleMapsAPILoaded","now","day","getDay","_load","google","maps","loadScript","err","script","map","Map","current","center","lat","lng","clickableIcons","fullscreenControl","keyboardShortcuts","mapTypeControl","minZoom","restriction","latLngBounds","east","north","south","west","rotateControlOptions","scaleControlOptions","streetViewControl","tilt","zoom","Circle","fillColor","fillOpacity","radius","strokeColor","strokeOpacity","strokeWeight","Marker","position","label","fontSize","text","TrafficLayer","padding","href","rel","target","WeeklyHours","weekdays","Holidays","floor","listStyle","length","holiday","key","endDay","getHours","getMinutes","getSeconds","setDate","getDate","getMonth","getFullYear","Array","keys","offset","weekday","dayHours","filter","dailyHours","openWeekday","openWindow","openHour","openMinute","closeHour","closeMinute","parseFloat","CartStateContext","CartDispatchContext","CartProvider","useReducer","persistingReducer","items","state","dispatch","payload","type","decreaseItemSideQuantity","item","side","resetCart","setSpecialRequests","id","specialRequests","useCart","useCartState","useCartDispatch","action","newState","quantity","secondaryQuantity","sides","i","s","Object","isNaN","reducer","React","MenuContext","MenuProvider","dishes","setDishes","dishTrigrams","setDishTrigrams","sections","setSections","sectionTrigrams","setSectionTrigrams","setSides","timer","setInterval","_downloadIfStale","clearInterval","menu","downloadIfStale","d","dt","se","st","si","useMenu","hsb","hue","saturation","brightness","rgbToHexString","r","g","b","f","p","q","t","intToHexString","hex","round","toString","StylesContext","StylesProvider","backgroundColorBody","backgroundColorBodyAlternate","backgroundColorButton","backgroundColorButtonCTA","backgroundColorButtonDisabled","backgroundColorFeature","backgroundColorHeader","backgroundColorHeaderAlternate","backgroundColorSwitch","backgroundColorSwitchAlternate","backgroundColorSwitchDisabled","colorBody","colorBodyAlternate","colorButton","colorButtonCTA","colorButtonDisabled","colorFeature","colorHeader","colorHeaderAlternate","colorSecondary","colorSecondaryAlternate","colorSecondaryDisabled","colorSwitch","colorSwitchAlternate","useStyles","disabled","innerStyle","onDisabledPress","onPress","onPressIn","onPressOut","outerStyle","pressDurationBreakpoint","pressScale","pressed","setPressed","innerStyles","KhtmlUserSelect","MozUserSelect","MsUserSelect","WebkitTouchCallout","WebkitUserSelect","borderWidth","fontWeight","transform","transitionDuration","transitionProperty","transitionTiming","userSelect","outerStyles","cursor","onClick","event","onTouchEnd","onTouchStart","onMouseOut","onMouseOver","DishSidesModal","hide","cart","cartDispatch","dirty","setDirty","sidesQuantity","missingSides","setMissingSides","ms","backgroundColor","bottom","left","right","top","stopPropagation","boxShadow","name","color","nameChinese","addID","section","price","abs","whiteSpace","margin","Chili","size","viewBox","xmlns","fill","fillRule","stroke","strokeDasharray","strokeLinecap","strokeLinejoin","strokeMiterlimit","strokeWidth","Done","Edit","useDebounce","delay","debouncedValue","setDebouncedValue","handler","setTimeout","clearTimeout","useOverflowed","overflowed","setOverflowed","useLayoutEffect","scrollWidth","clientWidth","SectionDishRow","inCart","showSection","hasSides","editMode","setEditMode","spicy","unit","unitChinese","secondaryPrice","secondaryUnit","secondaryUnitChinese","nameRef","normalCTA","setNormalCTA","noteRef","sectionRef","showModal","setShowModal","sidesPrice","setSidesPrice","debouncedMissingSides","nameOverflowed","noteOverflowed","sectionOverflowed","note","picture","src","textDecoration","onChange","placeholder","Cart","history","useHistory","subtotal","taxRateString","split","tax","parseInt","pow","total","subtotalString","taxString","totalString","validCart","every","push","OrdersStateContext","OrdersDispatchContext","initialState","deliveryAddress","deliveryAddress2","deliveryCity","deliveryState","deliveryZip","phoneNumber","OrdersProvider","orders","forEach","order","timePlaced","timeReady","transactionTime","saveOrder","paid","transaction","useOrders","useOrdersState","useOrdersDispatch","SnacksStateContext","SnacksDispatchContext","SnacksProvider","dismissSnack","index","showErrorSnack","duration","useSnacks","useSnacksState","useSnacksDispatch","slice","active","Cash","CreditCard","Delivery","y","x","ScheduledSend","Send","Takeout","TelephoneInput","onChangeText","onKeyDown","onMouseUp","changes","setChanges","setCursor","selection","setSelection","selectionStart","setSelectionStart","selectionEnd","setSelectionEnd","snacksDispatch","rawCurrent","rawPrevious","replace","previous","_formatOrderPhoneNumber","start","_updateSelection","l","dst","getTimezoneOffset","max","Checkout","apiLoaded","setAPILoaded","colorSwitchDisabled","ccBlurred","setCCBlurred","ccCVC","setCCCVC","ccExpiry","setCCExpiry","ccFocusField","setCCFocusField","ccName","setCCName","ccNumber","setCCNumber","dateTimeBlurred","setDateTimeBlurred","deliveryAddressModified","setDeliveryAddressModified","deliveryBlurred","setDeliveryBlurred","debouncedDeliveryAddressModified","deliveryFee","setDeliveryFee","deliveryFeeCalculationPending","setDeliveryFeeCalculationPending","deliveryFeeCalculationRateLimited","setDeliveryFeeCalculationRateLimited","detailsBlurred","setDetailsBlurred","loading","setLoading","orderTime","ordersDispatch","specialTime","setSpecialTime","wrappedWeeklyHours","closeWeekday","mostRecentOrder","cardPayment","setCardPayment","some","endHour","endMinute","endWeekday","beginningHour","beginningMinute","beginningWeekday","cartASAPEnabled","setCartASAPEnabled","deliveryCache","address","address2","city","zip","setDeliveryAddress","setDeliveryAddress2","setDeliveryCity","setDeliveryState","setDeliveryZip","orderName","setOrderName","orderPhoneNumber","setOrderPhoneNumber","takeout","setTakeout","_nowOpen","nowOpen","setNowOpen","asap","setASAP","deliveryFeeString","valid","setValid","validCCNumber","setValidCCNumber","_calculateDeliveryFee","_cancelFetches","_loadAPI","innerTimeout","outerTimeout","showInfoSnack","time","_validOrder","beginningTime","endTime","setMinutes","_validSchedule","forFeeCalculationIfNecessary","_validType","cash","cvc","expiry","month","nowMonth","nowYear","year","_validExpiry","_validPayment","cleanPhoneNumber","test","_validDetails","htmlFor","toISOString","onBlur","onFocus","_onKeyDown","_blurDelivery","_focusDelivery","callback","_","ok","focused","number","_blurCC","_onChangeCC","_onFocusCC","_blurDetails","_focusDetails","_firstName","_lastName","ConvergeEmbeddedPayment","keyCode","setAttribute","blur","removeAttribute","path","ccFirstName","ccLastName","orderID","created","data","transactionToken","token","ccExpiry2","pay","ssl_add_token","ssl_card_number","ssl_cvv2cvc2","ssl_exp_date","ssl_first_name","ssl_get_token","ssl_invoice_number","ssl_last_name","ssl_merchant_txn_id","ssl_txn_auth_token","onApproval","approvalResponse","elavonTransaction","ssl_txn_id","errorShown","ssl_result_message","ssl_transaction_type","amountParts","ssl_amount","ssl_txn_time","onDeclined","onError","Fallback","MenuSectionRow","useRouteMatch","transformOrigin","Clear","Search","Section","candidates","setCandidates","useParams","query","setQuery","searchInputNode","debouncedQuery","toLowerCase","formattedQuery","uniqueTrigrams","terms","tlen","trigrams","_trigrams","term","trigram","uniqueCandidates","occurrences","j","dtLen","candidate","entries","sort","_fuzzyMatch","dish","focus","len","Menu","stLen","exact","onKeyPress","NavBar","clearQuery","queryLength","location","useLocation","zIndex","pathname","Orders","find","o","nowish","setHours","Detail","toLocaleString","substring","dishID","sideID","reversedOrders","reverse","OrderRow","placed","Warning","Info","Success","SnacksQueue","snacks","message","ContextProviderWrapper","App","reportWebVitals","onPerfEntry","Function","then","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","StrictMode","document","getElementById"],"mappings":"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","file":"static/js/main.c5902089.chunk.js","sourcesContent":["import { useEffect, useState } from \"react\";\n\nexport default function useViewport() {\n const [breakpoint, setBreakpoint] = useState(620);\n const [height, setHeight] = useState(window.innerHeight);\n const [width, setWidth] = useState(Math.min(window.innerWidth, 960));\n\n const [mobile, setMobile] = useState(\n height < breakpoint || width < breakpoint\n );\n const [portrait, setPortrait] = useState(height > width);\n\n useEffect(_subscribeWindowResize, [breakpoint, height, width]);\n\n return { breakpoint, height, mobile, portrait, setBreakpoint, width };\n\n function _subscribeWindowResize() {\n window.addEventListener(\"resize\", _handleWindowResize);\n\n return () => window.removeEventListener(\"resize\", _handleWindowResize);\n\n function _handleWindowResize() {\n const { innerHeight: newHeight, innerWidth: newFullWidth } = window;\n const newWidth = Math.min(newFullWidth, 960);\n if (newHeight === height && newWidth === width) {\n return;\n }\n setHeight(newHeight);\n setMobile(newHeight < breakpoint || newWidth < breakpoint);\n setPortrait(newHeight > newWidth);\n setWidth(newWidth);\n }\n }\n}\n","import { forwardRef } from \"react\";\n\nimport useViewport from \"../lib/useViewport.js\";\n\nexport default forwardRef(function Div({ children, style, ...props }, ref) {\n const { mobile } = useViewport();\n const height = style?.height || undefined;\n const width = style?.width || undefined;\n const styles = {\n alignContent: \"flex-start\",\n boxSizing: \"border-box\",\n display: \"flex\",\n flexDirection: \"column\",\n flexBasis: 0,\n flexGrow: 1,\n flexShrink: 0,\n height,\n justifyContent: \"flex-start\",\n marginBottom: 0,\n marginLeft: 0,\n marginRight: 0,\n marginTop: 0,\n maxHeight: height,\n maxWidth: width,\n minHeight: height,\n minWidth: width,\n overflowX: \"hidden\",\n overflowY: \"hidden\",\n overscrollBehavior: \"none\",\n paddingBottom: 0,\n paddingLeft: 0,\n paddingRight: 0,\n paddingTop: 0,\n width,\n ...style,\n };\n\n return mobile ? (\n
\n {children}\n
\n ) : (\n
\n {children}\n
\n );\n});\n","import React, { createContext, useContext, useEffect, useState } from \"react\";\n\nimport Div from \"./components/Div.js\";\n\nconst HoursContext = createContext();\n\nexport function HoursProvider({ children }) {\n const [cookingTimeOffset, setCookingTimeOffset] = useState();\n const [deliveryTimeOffset, setDeliveryTimeOffset] = useState();\n const [holidays, setHolidays] = useState();\n const [loaded, setLoaded] = useState(false);\n const [weeklyHours, setWeeklyHours] = useState();\n\n useEffect(_rehydrate, []);\n\n if (!loaded) {\n return (\n
\n Loading hours\n
\n );\n }\n\n return (\n \n {children}\n \n );\n\n function _fetch({ lastModified } = {}) {\n const controller = new AbortController();\n\n (async function ({ prevLastModified }) {\n try {\n const response = await fetch(\n process.env.NODE_ENV === \"production\"\n ? `https://${process.env.REACT_APP_apiBase}/hours`\n : `http://${process.env.REACT_APP_apiBase}:8080/hours`,\n !!prevLastModified\n ? {\n body: prevLastModified,\n headers: {\n \"Content-Type\": \"text/plain\",\n },\n method: \"POST\",\n signal: controller.signal,\n }\n : {\n method: \"POST\",\n signal: controller.signal,\n }\n );\n if (response.status === 304) {\n return;\n }\n const lastModified = response.headers.get(\"Last-Modified\");\n const decodedResponse = await response.json();\n localStorage.setItem(\"hours\", JSON.stringify(decodedResponse));\n localStorage.setItem(\"hoursModified\", lastModified);\n setCookingTimeOffset(decodedResponse.cookingTimeOffset);\n setDeliveryTimeOffset(decodedResponse.deliveryTimeOffset);\n setHolidays(\n decodedResponse.holidays.reduce(\n (acc, cur) => [\n ...acc,\n {\n beginning: new Date(cur.beginning),\n end: new Date(cur.end),\n },\n ],\n []\n )\n );\n setWeeklyHours(decodedResponse.weeklyHours);\n setLoaded(true);\n } catch (error) {\n console.error(error);\n }\n })({ prevLastModified: lastModified });\n\n return () => controller.abort();\n }\n\n function _rehydrate() {\n const hours = JSON.parse(localStorage.getItem(\"hours\"));\n if (hours === null) {\n _fetch();\n return;\n }\n setCookingTimeOffset(hours.cookingTimeOffset);\n setDeliveryTimeOffset(hours.deliveryTimeOffset);\n setHolidays(\n hours.holidays.reduce(\n (acc, cur) => [\n ...acc,\n {\n beginning: new Date(cur.beginning),\n end: new Date(cur.end),\n },\n ],\n []\n )\n );\n setWeeklyHours(hours.weeklyHours);\n setLoaded(true);\n _fetch({ lastModified: localStorage.getItem(\"hoursModified\") });\n }\n}\n\nexport function useHours() {\n const context = useContext(HoursContext);\n if (context === undefined) {\n throw new Error(\"useHours must be used within a HoursProvider\");\n }\n return context;\n}\n","import loadScript from \"load-script\";\nimport { useEffect, useRef, useState } from \"react\";\n\nimport { useHours } from \"./HoursContext.js\";\nimport Div from \"./components/Div.js\";\nimport useApple from \"./lib/useApple.js\";\nimport useViewport from \"./lib/useViewport.js\";\n\nexport default function About() {\n const apple = useApple();\n const deliveryMapNode = useRef();\n const [googleMapsAPILoaded, setGoogleMapsAPILoaded] = useState(false);\n const { holidays, weeklyHours } = useHours();\n const { mobile, width } = useViewport();\n const now = new Date();\n const day = now.getDay();\n\n useEffect(_loadGoogleMapsAPI, []);\n useEffect(_drawMap, [googleMapsAPILoaded]);\n\n return (\n
\n

Great Wall

\n

Phone

\n \n

(765) 962 - 5255

\n
\n

Address

\n \n
1731 National Rd W
\n
Richmond, IN 47374
\n \n \n \n

Delivery

\n

Range

\n 5 miles\n \n

Minimum order

$\n {Math.floor(process.env.REACT_APP_deliveryMinimumOrder / 100)}\n {process.env.REACT_APP_deliveryMinimumOrder % 100 === 0\n ? \"\"\n : `.${process.env.REACT_APP_deliveryMinimumOrder % 100}`}\n

Fee

\n \n \n
<2 miles
\n
$4
\n
\n \n
<3 miles
\n
$5
\n \n \n
<4 miles
\n
$6
\n \n \n
<5 miles
\n
$7
\n \n \n

Third-party software licenses

\n \n
  • \n \n load-script\n \n
  • \n
  • \n \n react\n \n
  • \n
  • \n \n react-credit-cards\n \n
  • \n
  • \n \n react-dom\n \n
  • \n
  • \n \n react-router-dom\n \n
  • \n \n \n );\n\n function _drawMap() {\n if (!googleMapsAPILoaded) {\n return;\n }\n const map = new window.google.maps.Map(deliveryMapNode.current, {\n center: { lat, lng },\n clickableIcons: false,\n fullscreenControl: false,\n keyboardShortcuts: false,\n mapTypeControl: false,\n minZoom: 11,\n restriction: {\n latLngBounds: {\n east: lng + 0.12,\n north: lat + 0.1,\n south: lat - 0.1,\n west: lng - 0.12,\n },\n },\n rotateControlOptions: false,\n scaleControlOptions: false,\n streetViewControl: false,\n tilt: false,\n zoom: 11,\n });\n new window.google.maps.Circle({\n center: { lat, lng },\n fillColor: \"red\",\n fillOpacity: 0.35,\n map,\n radius: 5 * 1609.34,\n strokeColor: \"red\",\n strokeOpacity: 0.8,\n strokeWeight: 2,\n });\n new window.google.maps.Marker({\n map,\n position: { lat, lng },\n label: {\n fontSize: \"20px\",\n text: \"Great Wall\",\n },\n });\n new window.google.maps.TrafficLayer({\n map,\n });\n }\n\n function _loadGoogleMapsAPI() {\n if (process.env.NODE_ENV === \"production\") {\n _load();\n }\n\n async function _load() {\n if (!!window.google?.maps) {\n setGoogleMapsAPILoaded(true);\n return;\n }\n loadScript(\n `https://maps.googleapis.com/maps/api/js?key=${process.env.REACT_APP_googleMapsAPIKey}&v=3.44`,\n (err, script) => {\n if (err) {\n console.error(err);\n return;\n }\n setGoogleMapsAPILoaded(true);\n }\n );\n }\n }\n}\n\nfunction Holidays({ holidays, now }) {\n if (holidays.length === 0) {\n return null;\n }\n return (\n \n

    Holiday Closings

    \n {holidays.map((holiday, key) => {\n const { beginning, end } = holiday;\n const endDay = new Date(end);\n if (\n endDay.getHours() === 0 &&\n endDay.getMinutes() === 0 &&\n endDay.getSeconds() === 0\n ) {\n endDay.setDate(endDay.getDate() - 1);\n }\n return (\n \n {`${beginning.getMonth() + 1}/${beginning.getDate()}${\n beginning.getFullYear() !== now.getFullYear()\n ? `/${beginning.getFullYear()}`\n : \"\"\n }${\n beginning.getHours() !== 0 ||\n beginning.getMinutes() !== 0 ||\n beginning.getSeconds() !== 0\n ? ` ${\n beginning.getHours() % 12 === 0\n ? 12\n : (beginning.getHours() + 12) % 12\n }:${\n (beginning.getMinutes() < 10 ? \"0\" : \"\") +\n beginning.getMinutes()\n }${beginning.getHours() < 12 ? \"am\" : \"pm\"}`\n : \"\"\n }`}{\" \"}\n -{\" \"}\n {`${endDay.getMonth() + 1}/${endDay.getDate()}${\n endDay.getFullYear() !== now.getFullYear()\n ? `/${endDay.getFullYear()}`\n : \"\"\n }${\n end.getHours() !== 0 ||\n end.getMinutes() !== 0 ||\n end.getSeconds() !== 0\n ? ` ${\n end.getHours() % 12 === 0 ? 12 : (end.getHours() + 12) % 12\n }:${(end.getMinutes() < 10 ? \"0\" : \"\") + end.getMinutes()}${\n end.getHours() < 12 ? \"am\" : \"pm\"\n }`\n : \"\"\n }`}\n \n );\n })}\n \n );\n}\n\nfunction WeeklyHours({ day, weekdays, weeklyHours }) {\n return (\n \n

    Weekly Hours

    \n {[...Array(7).keys()].map((offset) => {\n let weekday = (day + 7 + offset) % 7;\n const dayHours = weeklyHours.filter(\n (dailyHours) => dailyHours.openWeekday === weekday\n );\n return (\n \n \n {weekdays[weekday]}\n \n {dayHours.length\n ? dayHours.map((openWindow, key) => (\n \n \n {`${openWindow.openHour % 12}${\n openWindow.openMinute === 0\n ? \"\"\n : openWindow.openMinute < 10\n ? `:0${openWindow.openMinute}`\n : `:${openWindow.openMinute}`\n }${openWindow.openHour < 12 ? \"am\" : \"pm\"} - ${\n openWindow.closeHour % 12\n }${\n openWindow.closeMinute === 0\n ? \"\"\n : openWindow.closeMinute < 10\n ? `:0${openWindow.closeMinute}`\n : `:${openWindow.closeMinute}`\n }${openWindow.closeHour < 12 ? \"am\" : \"pm\"}`}\n \n \n ))\n : \"Closed\"}\n \n );\n })}\n \n );\n}\n\nconst lat = parseFloat(process.env.REACT_APP_restaurantLatitude);\nconst lng = parseFloat(process.env.REACT_APP_restaurantLongitude);\n\nconst weekdays = [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n];\n","export default function useApple() {\n const { platform } = window.navigator;\n\n switch (platform) {\n case \"iPhone\":\n case \"MacIntel\":\n case \"iPad\":\n case \"iPod\":\n case \"MacPPC\":\n case \"Mac68k\":\n return true;\n default:\n return false;\n }\n}\n","import React, { createContext, useEffect, useReducer } from \"react\";\n\nconst CartStateContext = createContext();\nconst CartDispatchContext = createContext();\n\nexport function CartProvider({ children }) {\n const [state, dispatch] = useReducer(persistingReducer, { items: {} });\n\n useEffect(_rehydrate, []);\n\n return (\n \n \n {children}\n \n \n );\n\n function _rehydrate() {\n dispatch({\n payload: JSON.parse(localStorage.getItem(\"cart\")),\n type: \"REHYDRATE\",\n });\n }\n}\n\nexport function decreaseItemQuantity({ dispatch, id }) {\n dispatch({ payload: { id }, type: \"DECREASE_ITEM_QUANTITY\" });\n}\n\nexport function decreaseItemSecondaryQuantity({ dispatch, id }) {\n dispatch({ payload: { id }, type: \"DECREASE_ITEM_SECONDARY_QUANTITY\" });\n}\n\nexport function decreaseItemSideQuantity({ dispatch, item, side }) {\n dispatch({ payload: { item, side }, type: \"DECREASE_ITEM_SIDE_QUANTITY\" });\n}\n\nexport function increaseItemQuantity({ dispatch, id }) {\n dispatch({ payload: { id }, type: \"INCREASE_ITEM_QUANTITY\" });\n}\n\nexport function increaseItemSecondaryQuantity({ dispatch, id }) {\n dispatch({ payload: { id }, type: \"INCREASE_ITEM_SECONDARY_QUANTITY\" });\n}\n\nexport function increaseItemSideQuantity({ dispatch, item, side }) {\n dispatch({ payload: { item, side }, type: \"INCREASE_ITEM_SIDE_QUANTITY\" });\n}\n\nexport function resetCart({ dispatch }) {\n dispatch({ type: \"RESET_CART\" });\n}\n\nexport function setItemQuantity({ dispatch, id, quantity }) {\n dispatch({ payload: { id, quantity }, type: \"SET_ITEM_QUANTITY\" });\n}\n\nexport function setItemSecondaryQuantity({ dispatch, id, secondaryQuantity }) {\n dispatch({\n payload: { id, secondaryQuantity },\n type: \"SET_ITEM_SECONDARY_QUANTITY\",\n });\n}\n\nexport function setSpecialRequests({ dispatch, id, specialRequests }) {\n dispatch({ payload: { id, specialRequests }, type: \"SET_SPECIAL_REQUESTS\" });\n}\n\nexport function useCart() {\n return [useCartState(), useCartDispatch()];\n}\n\nfunction persistingReducer(state, action) {\n const newState = reducer(state, action);\n localStorage.setItem(\"cart\", JSON.stringify(newState));\n return newState;\n}\n\nfunction reducer(state, action) {\n switch (action.type) {\n case \"DECREASE_ITEM_QUANTITY\": {\n const { id } = action.payload;\n if (!state.items[id]) {\n return state;\n }\n if (state.items[id].quantity === 1) {\n if (state.items[id].secondaryQuantity === undefined) {\n const items = { ...state.items };\n delete items[id];\n return {\n ...state,\n items,\n };\n }\n const item = { ...state.items[id] }; // untested\n delete item.quantity;\n return {\n ...state,\n items: {\n ...state.items,\n [id]: item,\n },\n };\n }\n return {\n ...state,\n items: {\n ...state.items,\n [id]: {\n ...state.items[id],\n quantity: state.items[id].quantity - 1,\n },\n },\n };\n }\n case \"DECREASE_ITEM_SECONDARY_QUANTITY\": {\n const { id } = action.payload;\n if (!state.items[id]) {\n return state;\n }\n if (state.items[id].secondaryQuantity === 1) {\n if (state.items[id].quantity === undefined) {\n const items = { ...state.items };\n delete items[id];\n return {\n ...state,\n items,\n };\n }\n const item = { ...state.items[id] }; // untested\n delete item.secondaryQuantity;\n return {\n ...state,\n items: {\n ...state.items,\n [id]: item,\n },\n };\n }\n return {\n ...state,\n items: {\n ...state.items,\n [id]: {\n ...state.items[id],\n secondaryQuantity: state.items[id].secondaryQuantity - 1,\n },\n },\n };\n }\n case \"DECREASE_ITEM_SIDE_QUANTITY\": {\n const { item, side } = action.payload;\n if (!state.items[item]) {\n return state;\n }\n if (!state.items[item].sides?.[side]?.quantity) {\n return state;\n }\n if (state.items[item].sides[side].quantity === 1) {\n if (state.items[item].sides.length === 1) {\n const i = { ...state.items[item] };\n delete i.sides;\n return {\n ...state,\n items: {\n ...state.items,\n [item]: i,\n },\n };\n }\n const s = { ...state.items[item].sides };\n delete s[side];\n return {\n ...state,\n items: {\n ...state.items,\n [item]: {\n ...state.items[item],\n sides: s,\n },\n },\n };\n }\n return {\n ...state,\n items: {\n ...state.items,\n [item]: {\n ...state.items[item],\n sides: {\n ...state.items[item].sides,\n [side]: {\n ...state.items[item].sides[side],\n quantity: state.items[item].sides[side].quantity - 1,\n },\n },\n },\n },\n };\n }\n case \"INCREASE_ITEM_QUANTITY\": {\n const { id } = action.payload;\n if (state.items[id] === undefined) {\n return {\n ...state,\n items: {\n ...state.items,\n [id]: {\n quantity: 1,\n },\n },\n };\n }\n if (state.items[id].quantity === undefined) {\n return {\n ...state,\n items: {\n ...state.items,\n [id]: {\n ...state.items[id],\n quantity: 1,\n },\n },\n };\n }\n return {\n ...state,\n items: {\n ...state.items,\n [id]: {\n ...state.items[id],\n quantity: state.items[id].quantity + 1,\n },\n },\n };\n }\n case \"INCREASE_ITEM_SECONDARY_QUANTITY\": {\n const { id } = action.payload;\n if (state.items[id] === undefined) {\n return {\n ...state,\n items: {\n ...state.items,\n [id]: {\n secondaryQuantity: 1,\n },\n },\n };\n }\n if (state.items[id].secondaryQuantity === undefined) {\n return {\n ...state,\n items: {\n ...state.items,\n [id]: {\n ...state.items[id],\n secondaryQuantity: 1,\n },\n },\n };\n }\n return {\n ...state,\n items: {\n ...state.items,\n [id]: {\n ...state.items[id],\n secondaryQuantity: state.items[id].secondaryQuantity + 1,\n },\n },\n };\n }\n case \"INCREASE_ITEM_SIDE_QUANTITY\": {\n const { item, side } = action.payload;\n if (state.items[item] === undefined) {\n return state;\n }\n if (\n !!state.items[item].quantity &&\n state.items[item].sides === undefined\n ) {\n return {\n ...state,\n items: {\n ...state.items,\n [item]: {\n ...state.items[item],\n sides: {\n [side]: {\n quantity: 1,\n },\n },\n },\n },\n };\n }\n if (\n state.items[item].quantity ===\n Object.keys(state.items[item].sides).reduce(\n (acc, cur) => acc + state.items[item].sides[cur].quantity,\n 0\n )\n ) {\n return state;\n }\n if (state.items[item].sides[side] === undefined) {\n return {\n ...state,\n items: {\n ...state.items,\n [item]: {\n ...state.items[item],\n sides: {\n ...state.items[item].sides,\n [side]: {\n quantity: 1,\n },\n },\n },\n },\n };\n }\n return {\n ...state,\n items: {\n ...state.items,\n [item]: {\n ...state.items[item],\n sides: {\n ...state.items[item].sides,\n [side]: {\n ...state.items[item].sides[side],\n quantity: state.items[item].sides[side].quantity + 1,\n },\n },\n },\n },\n };\n }\n case \"REHYDRATE\":\n if (action.payload === null) {\n return { items: {} };\n }\n return action.payload;\n case \"RESET_CART\":\n return { items: {} };\n case \"SET_ITEM_QUANTITY\": {\n const { id, quantity } = action.payload;\n if (typeof quantity !== \"number\") {\n throw new Error(\n `invalid desired item quantity type: ${quantity} for id: ${id}`\n );\n }\n if (isNaN(quantity)) {\n throw new Error(\n `invalid desired item quantity type: ${quantity} for id: ${id}`\n );\n }\n if (quantity < 0) {\n throw new Error(\n `invalid desired item quantity: ${quantity} for id: ${id}`\n );\n }\n if (quantity === 0) {\n if (state.items[id].secondaryQuantity === undefined) {\n const items = { ...state.items };\n delete items[id];\n return {\n ...state,\n items,\n };\n }\n const item = { ...state.items[id] };\n delete item.quantity;\n return {\n ...state,\n items: {\n ...state.items,\n [id]: item,\n },\n };\n }\n return {\n ...state,\n items: {\n ...state.items,\n [id]: {\n ...state.items[id],\n quantity,\n },\n },\n };\n }\n case \"SET_ITEM_SECONDARY_QUANTITY\": {\n const { id, secondaryQuantity } = action.payload;\n if (typeof secondaryQuantity !== \"number\") {\n throw new Error(\n `invalid desired item secondaryQuantity type: ${secondaryQuantity} for id: ${id}`\n );\n }\n if (isNaN(secondaryQuantity)) {\n throw new Error(\n `invalid desired item secondaryQuantity type: ${secondaryQuantity} for id: ${id}`\n );\n }\n if (secondaryQuantity < 0) {\n throw new Error(\n `invalid desired item secondaryQuantity: ${secondaryQuantity} for id: ${id}`\n );\n }\n if (secondaryQuantity === 0) {\n if (state.items[id].quantity === undefined) {\n const items = { ...state.items };\n delete items[id];\n return {\n ...state,\n items,\n };\n }\n const item = { ...state.items[id] };\n delete item.secondaryQuantity;\n return {\n ...state,\n items: {\n ...state.items,\n [id]: item,\n },\n };\n }\n return {\n ...state,\n items: {\n ...state.items,\n [id]: {\n ...state.items[id],\n secondaryQuantity,\n },\n },\n };\n }\n case \"SET_SPECIAL_REQUESTS\": {\n const { id, specialRequests } = action.payload;\n if (!state.items[id]) {\n throw new Error(`invalid specialRequests for ${id}, ${id} not in cart`);\n }\n return {\n ...state,\n items: {\n ...state.items,\n [id]: {\n ...state.items[id],\n specialRequests,\n },\n },\n };\n }\n default: {\n throw new Error(`Unhandled action type: ${action.type}`);\n }\n }\n}\n\nfunction useCartState() {\n const context = React.useContext(CartStateContext);\n if (context === undefined) {\n throw new Error(\"useCartState must be used within a CartProvider\");\n }\n return context;\n}\n\nfunction useCartDispatch() {\n const context = React.useContext(CartDispatchContext);\n if (context === undefined) {\n throw new Error(\"useCartDispatch must be used within a CartProvider\");\n }\n return context;\n}\n","import React, { createContext, useContext, useEffect, useState } from \"react\";\n\nimport Div from \"./components/Div.js\";\n\nconst MenuContext = createContext();\n\nexport function MenuProvider({ children }) {\n const [dishes, setDishes] = useState([]);\n const [dishTrigrams, setDishTrigrams] = useState([]);\n const [loaded, setLoaded] = useState(false);\n const [sections, setSections] = useState([]);\n const [sectionTrigrams, setSectionTrigrams] = useState([]);\n const [sides, setSides] = useState([]);\n\n useEffect(_pollIfStale, []);\n useEffect(_rehydrate, []);\n\n if (!loaded) {\n return (\n
    \n Loading menu\n
    \n );\n }\n\n return (\n \n {children}\n \n );\n\n function _pollIfStale() {\n const timer = setInterval(_downloadIfStale, 300000);\n return () => clearInterval(timer);\n }\n\n function _downloadIfStale() {\n _fetch({ lastModified: localStorage.getItem(\"menuModified\") });\n }\n\n function _fetch({ lastModified } = {}) {\n const controller = new AbortController();\n\n (async function ({ prevLastModified }) {\n try {\n const response = await fetch(\n process.env.NODE_ENV === \"production\"\n ? `https://${process.env.REACT_APP_apiBase}/menu`\n : `http://${process.env.REACT_APP_apiBase}:8080/menu`,\n !!prevLastModified\n ? {\n body: prevLastModified,\n headers: {\n \"Content-Type\": \"text/plain\",\n },\n method: \"POST\",\n signal: controller.signal,\n }\n : {\n method: \"POST\",\n signal: controller.signal,\n }\n );\n if (response.status === 304) {\n return;\n }\n const lastModified = response.headers.get(\"Last-Modified\");\n const decodedResponse = await response.json();\n localStorage.setItem(\"menu\", JSON.stringify(decodedResponse));\n localStorage.setItem(\"menuModified\", lastModified);\n const {\n dishes: d,\n dishTrigrams: dt,\n sections: se,\n sectionTrigrams: st,\n sides: si,\n } = decodedResponse;\n setDishes(d);\n setDishTrigrams(dt);\n setSections(se);\n setSectionTrigrams(st);\n setSides(si);\n setLoaded(true);\n } catch (error) {\n console.error(error);\n }\n })({ prevLastModified: lastModified });\n\n return () => controller.abort();\n }\n\n function _rehydrate() {\n const menu = JSON.parse(localStorage.getItem(\"menu\"));\n if (menu === null) {\n _fetch();\n return;\n }\n setDishes(menu.dishes);\n setDishTrigrams(menu.dishTrigrams);\n setSections(menu.sections);\n setSectionTrigrams(menu.sectionTrigrams);\n setSides(menu.sides);\n setLoaded(true);\n _fetch({ lastModified: localStorage.getItem(\"menuModified\") });\n }\n}\n\nexport function useMenu() {\n const context = useContext(MenuContext);\n if (context === undefined) {\n throw new Error(\"useMenu must be used within a MenuProvider\");\n }\n return context;\n}\n","export default function hsb(hue, saturation, brightness) {\n hue /= 360;\n if (saturation > 100 || saturation < 0) {\n throw Error(`invalid saturation. expected 0-1 or 0-100, got ${saturation}`);\n }\n if (saturation > 1) {\n saturation /= 100;\n }\n if (brightness > 100 || brightness < 0) {\n throw Error(`invalid brightness. expected 0-1 or 0-100, got ${brightness}`);\n }\n if (brightness > 1) {\n brightness /= 100;\n }\n if (saturation === 0) {\n return rgbToHexString({\n r: brightness * 255,\n g: brightness * 255,\n b: brightness * 255,\n });\n }\n let i = Math.floor(hue * 6.0);\n const f = hue * 6 - i;\n const p = brightness * (1 - saturation);\n const q = brightness * (1 - saturation * f);\n const t = brightness * (1 - saturation * (1 - f));\n i %= 6;\n switch (i) {\n case 0:\n return rgbToHexString({\n r: brightness * 255,\n g: t * 255,\n b: p * 255,\n });\n case 1:\n return rgbToHexString({\n r: q * 255,\n g: brightness * 255,\n b: p * 255,\n });\n case 2:\n return rgbToHexString({\n r: p * 255,\n g: brightness * 255,\n b: t * 255,\n });\n case 3:\n return rgbToHexString({\n r: p * 255,\n g: q * 255,\n b: brightness * 255,\n });\n case 4:\n return rgbToHexString({\n r: t * 255,\n g: p * 255,\n b: brightness * 255,\n });\n case 5:\n return rgbToHexString({\n r: brightness * 255,\n g: p * 255,\n b: q * 255,\n });\n default:\n return rgbToHexString({\n r: 0,\n g: 0,\n b: 0,\n });\n }\n}\n\nfunction rgbToHexString({ r, g, b }) {\n return `#${intToHexString(r)}${intToHexString(g)}${intToHexString(b)}`;\n}\n\nfunction intToHexString(value) {\n const hex = Math.round(value).toString(16);\n return hex.length === 1 ? `0${hex}` : hex;\n}\n","import React, { createContext, useContext } from \"react\";\n\nimport hsb from \"./lib/hsb.js\";\n\nconst StylesContext = createContext();\n\n// icon colors\n// hsb(205, 97.3, 88.6) // darkest\n// hsb(194, 96.5, 89.8) // mid\n// hsb(188, 91.4, 95.3) // brightest\nexport function StylesProvider({ children }) {\n return (\n \n {children}\n \n );\n}\n\nexport function useStyles() {\n const context = useContext(StylesContext);\n if (context === undefined) {\n throw new Error(\"useStyles must be used within a StylesProvider\");\n }\n return context;\n}\n","import {\n forwardRef,\n // useCallback,\n // useRef,\n useState,\n} from \"react\";\n\nimport useViewport from \"../lib/useViewport.js\";\n\nexport default forwardRef(function Pressable(\n {\n children,\n disabled = false,\n innerStyle,\n onDisabledPress,\n // onDoublePress,\n // onLongPress,\n onPress,\n onPressIn,\n onPressOut,\n outerStyle,\n pressDurationBreakpoint = 500,\n pressScale = 1.5,\n ...props\n },\n ref\n) {\n // const height = outerStyle?.height || undefined;\n const { mobile } = useViewport();\n // const pressTimeout = useRef();\n // const pressedRef = useRef();\n const [pressed, setPressed] = useState(false);\n // const target = useRef();\n const width = outerStyle?.width || undefined;\n\n const innerStyles = {\n KhtmlUserSelect: \"none\",\n MozUserSelect: \"none\",\n MsUserSelect: \"none\",\n WebkitTouchCallout: \"none\",\n WebkitUserSelect: \"none\",\n borderWidth: 0,\n boxSizing: \"border-box\",\n display: \"flex\",\n flexBasis: \"auto\",\n flexDirection: \"row\",\n flexGrow: 0,\n flexShrink: 0,\n fontSize: 16,\n fontWeight: pressed ? \"bold\" : \"normal\",\n transform: pressed ? `scale(${pressScale})` : undefined,\n transitionDuration: 600,\n transitionProperty: \"all\",\n transitionTiming: \"ease-in-out\",\n justifyContent: \"flex-start\",\n overflowX: \"hidden\",\n overflowY: \"hidden\",\n overscrollBehavior: \"none\",\n userSelect: \"none\",\n ...innerStyle,\n };\n const outerStyles = {\n alignItems: \"center\",\n borderWidth: 0,\n // boxShadow: pressed\n // ? \"0 14px 28px rgba(0, 0, 0, 0.75), 0 10px 10px rgba(0, 0, 0, 0.66)\"\n // : \"0 1px 3px rgba(0, 0, 0, 0.36), 0 1px 2px rgba(0, 0, 0, 0.72)\",\n boxSizing: \"border-box\",\n cursor: \"pointer\",\n display: \"flex\",\n flexBasis: \"auto\",\n flexDirection: \"row\",\n flexGrow: 0,\n flexShrink: 0,\n // height,\n justifyContent: \"center\",\n marginBottom: 0,\n marginLeft: 0,\n marginRight: 0,\n marginTop: 0,\n // maxHeight: height,\n // maxWidth: width,\n // minHeight: height,\n // minWidth: width,\n overflowX: \"hidden\",\n // overflowY: \"hidden\",\n overscrollBehavior: \"none\",\n paddingBottom: 0,\n paddingLeft: 0,\n paddingRight: 0,\n paddingTop: 0,\n width,\n ...outerStyle,\n };\n\n // const clear = useCallback((event, shouldTriggerClick = true) => {\n // event.stopPropagation();\n // pressedRef.current = false;\n // setPressed(false);\n // if (mobile && target.current) {\n // target.current.removeEventListener(\"contextmenu\", _preventDefault);\n // target.current.removeEventListener(\"touchend\", _preventDefault);\n // }\n // if (mobile) {\n // onPressOut?.(event);\n // }\n // });\n\n // const start = useCallback((event) => {\n // event.stopPropagation();\n // pressedRef.current = true;\n // setPressed(true);\n // if (event.target) {\n // if (mobile) {\n // event.target.addEventListener(\"contextmenu\", _preventDefault);\n // event.target.addEventListener(\"touchend\", _preventDefault, {\n // passive: false,\n // });\n // onPressIn?.(event);\n // }\n // target.current = event.target;\n // }\n // if (pressTimeout.current !== null && pressTimeout.current !== undefined) {\n // clearTimeout(pressTimeout.current);\n // pressTimeout.current = null;\n // setPressed(false);\n // onDoublePress?.(event);\n // return;\n // }\n // pressTimeout.current = setTimeout(() => {\n // clearTimeout(pressTimeout.current);\n // pressTimeout.current = null;\n // setPressed(false);\n // if (pressedRef.current) {\n // onLongPress?.(event);\n // return;\n // }\n // onPress?.(event);\n // }, pressDurationBreakpoint);\n // });\n\n return mobile ? (\n {\n if (disabled) {\n onDisabledPress?.(event);\n return;\n }\n onPress(event);\n setPressed(false);\n }}\n onTouchEnd={(event) => {\n if (disabled) {\n return;\n }\n setPressed(false);\n onPressOut?.(event);\n }}\n onTouchStart={(event) => {\n if (disabled) {\n return;\n }\n setPressed(true);\n onPressIn?.(event);\n }}\n // onTouchEnd={clear}\n // onTouchMove={() => {\n // clearTimeout(pressTimeout.current);\n // pressTimeout.current = null;\n // setPressed(false);\n // }}\n // onTouchStart={start}\n ref={ref}\n style={outerStyles}\n {...props}\n >\n
    {children}
    \n {\n //pressedRef.current\n }\n \n ) : (\n {\n if (disabled) {\n onDisabledPress?.(event);\n return;\n }\n onPress(event);\n setPressed(false);\n }}\n onMouseOut={(event) => {\n if (disabled) {\n return;\n }\n setPressed(false);\n onPressOut?.(event);\n }}\n onMouseOver={(event) => {\n if (disabled) {\n return;\n }\n setPressed(true);\n onPressIn?.(event);\n }}\n // onDrag={() => {\n // clearTimeout(pressTimeout.current);\n // pressTimeout.current = null;\n // setPressed(false);\n // }}\n // onMouseDown={start}\n // onMouseLeave={(event) => clear(event, false)}\n // onMouseOut={onPressOut}\n // onMouseOver={onPressIn}\n // onMouseUp={clear}\n ref={ref}\n style={outerStyles}\n {...props}\n >\n
    {children}
    \n {\n //pressedRef.current\n }\n \n );\n\n // function _preventDefault(event) {\n // event.cancelable && event.preventDefault();\n // }\n});\n","import { useEffect, useState } from \"react\";\n\nimport {\n decreaseItemSideQuantity,\n increaseItemSideQuantity,\n useCart,\n} from \"./CartContext.js\";\nimport { useMenu } from \"./MenuContext.js\";\nimport { useStyles } from \"./StylesContext.js\";\nimport Div from \"./components/Div.js\";\nimport Pressable from \"./components/Pressable.js\";\nimport useViewport from \"./lib/useViewport.js\";\n\nexport default function DishSidesModal({ hide, id }) {\n const {\n backgroundColorBody,\n backgroundColorButton,\n backgroundColorButtonCTA,\n colorButton,\n colorButtonCTA,\n colorSecondary,\n } = useStyles();\n const [cart, cartDispatch] = useCart();\n const [dirty, setDirty] = useState(false);\n const { dishes, sections, sides } = useMenu();\n const { height, width } = useViewport();\n const [missingSides, setMissingSides] = useState(\n cart.items[id].quantity - sidesQuantity(cart.items[id].sides)\n );\n useEffect(() => {\n const ms = cart.items[id].quantity - sidesQuantity(cart.items[id].sides);\n setMissingSides(ms);\n if (dirty && ms === 0) {\n hide();\n }\n }, [cart.items[id].quantity, cart.items[id].sides, dirty]);\n\n return (\n \n {\n event.stopPropagation();\n }}\n style={{\n backgroundColor: backgroundColorBody,\n height: (height * 3) / 4,\n width: width - 32,\n }}\n >\n {missingSides > 0 ? (\n
    \n \n Pick {missingSides}\n {sidesQuantity(cart.items[id]?.sides) === 0 ? \" \" : \" more \"}side\n {missingSides === 1 ? \"\" : \"s\"} for \n {dishes[id].name} \n \n ({dishes[id].nameChinese})\n \n
    \n \n {Object.keys(sides)\n .filter(\n (side) =>\n sides[side].addID === sections[dishes[id].section].addID\n )\n .map((side) => (\n \n \n \n {sides[side].name}{\" \"}\n \n ({sides[side].nameChinese})\n \n \n {sides[side].price === undefined\n ? \"\"\n : `$${Math.floor(sides[side].price / 100)}.${\n sides[side].price % 100 < 10\n ? `0${sides[side].price % 100}`\n : sides[side].price % 100\n }`}\n \n \n \n {!!cart.items[id]?.sides?.[side]?.quantity ? (\n {\n decreaseItemSideQuantity({\n dispatch: cartDispatch,\n item: id,\n side,\n });\n setDirty(true);\n }}\n outerStyle={{\n backgroundColor: backgroundColorButton,\n paddingBottom: 8,\n paddingLeft: 12,\n paddingRight: 12,\n paddingTop: 8,\n }}\n >\n -\n \n ) : (\n \n )}\n \n \n {cart.items[id]?.sides?.[side]?.quantity}\n \n \n {\n increaseItemSideQuantity({\n dispatch: cartDispatch,\n item: id,\n side,\n });\n setDirty(true);\n }}\n outerStyle={{\n backgroundColor: backgroundColorButtonCTA,\n paddingBottom: 8,\n paddingLeft: 12,\n paddingRight: 12,\n paddingTop: 8,\n }}\n >\n +\n \n \n \n \n ))}\n \n \n ) : (\n
    \n \n {missingSides === 0 ? (\n <>\n Side{cart.items[id].quantity === 1 ? \"\" : \"s\"} for{\" \"}\n {dishes[id].name} \n \n ({dishes[id].nameChinese})\n \n \n ) : (\n <>\n Remove {Math.abs(missingSides)} side\n {missingSides === -1 ? \" \" : \"s \"}\n for {dishes[id].name}{\" \"}\n \n ({dishes[id].nameChinese})\n \n \n )}\n
    \n
    \n {Object.keys(cart.items[id].sides).map((side) => (\n \n \n {\n decreaseItemSideQuantity({\n dispatch: cartDispatch,\n item: id,\n side,\n });\n setDirty(true);\n }}\n outerStyle={{\n backgroundColor:\n missingSides < 0\n ? backgroundColorButtonCTA\n : backgroundColorButton,\n paddingBottom: 8,\n paddingLeft: 12,\n paddingRight: 12,\n paddingTop: 8,\n }}\n >\n -\n \n
    \n \n \n {cart.items[id].sides[side].quantity} with{\" \"}\n {sides[side].name}{\" \"}\n \n ({sides[side].nameChinese})\n \n \n \n \n ))}\n \n \n )}\n {missingSides === 0 ? (\n \n Done\n \n ) : null}\n \n \n );\n}\n\nfunction sidesQuantity(sides) {\n if (sides === undefined) {\n return 0;\n }\n return Object.keys(sides).reduce((acc, cur) => acc + sides[cur].quantity, 0);\n}\n","export default function Chili({ size = 48 }) {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n","export default function Done({ color = \"black\", size = 48 }) {\n return (\n \n \n \n \n );\n}\n","export default function Edit({ color = \"black\", size = 48 }) {\n return (\n \n \n \n \n );\n}\n","import { useEffect, useState } from \"react\";\n\nexport default function useDebounce(value, delay = 250) {\n const [debouncedValue, setDebouncedValue] = useState(value);\n useEffect(() => {\n const handler = setTimeout(() => setDebouncedValue(value), delay);\n return () => clearTimeout(handler);\n // return () => clearTimeout(setTimeout(() => setDebouncedValue(value), delay));\n }, [value, delay]);\n return debouncedValue;\n}\n","import { useLayoutEffect, useState } from \"react\";\n\nexport default function useOverflowed(ref) {\n const [overflowed, setOverflowed] = useState(undefined);\n\n useLayoutEffect(() => {\n if (ref.current) {\n setOverflowed(ref.current.scrollWidth > ref.current.clientWidth);\n }\n }, [ref]);\n\n return overflowed;\n}\n","import { useEffect, useRef, useState } from \"react\";\n\nimport DishSidesModal from \"./DishSidesModal.js\";\nimport {\n decreaseItemQuantity,\n decreaseItemSecondaryQuantity,\n increaseItemQuantity,\n increaseItemSecondaryQuantity,\n setSpecialRequests,\n useCart,\n} from \"./CartContext.js\";\nimport { useMenu } from \"./MenuContext.js\";\nimport { useStyles } from \"./StylesContext.js\";\nimport Chili from \"./assets/Chili.js\";\nimport Done from \"./assets/Done.js\";\nimport Edit from \"./assets/Edit.js\";\nimport Div from \"./components/Div.js\";\nimport Pressable from \"./components/Pressable.js\";\nimport useDebounce from \"./lib/useDebounce.js\";\nimport useOverflowed from \"./lib/useOverflowed.js\";\n\nexport default function SectionDishRow({\n id,\n inCart = false,\n showSection = false,\n}) {\n const [cart, cartDispatch] = useCart();\n const {\n backgroundColorButton,\n backgroundColorButtonCTA,\n colorButton,\n colorButtonCTA,\n colorSecondary,\n } = useStyles();\n const { dishes, sections, sides } = useMenu();\n const hasSides = sections[dishes[id].section].addID !== undefined;\n const [editMode, setEditMode] = useState(!inCart);\n const {\n name,\n nameChinese,\n price,\n section,\n spicy,\n unit,\n unitChinese,\n\n secondaryPrice,\n secondaryUnit,\n secondaryUnitChinese,\n } = dishes[id];\n const [missingSides, setMissingSides] = useState(0);\n const nameRef = useRef(null);\n const [normalCTA, setNormalCTA] = useState(true);\n const noteRef = useRef(null);\n const sectionRef = useRef(null);\n const [showModal, setShowModal] = useState(false);\n const [sidesPrice, setSidesPrice] = useState(0);\n\n const debouncedMissingSides = useDebounce(missingSides, 500);\n const nameOverflowed = useOverflowed(nameRef);\n const noteOverflowed = useOverflowed(noteRef);\n const sectionOverflowed = useOverflowed(sectionRef);\n\n useEffect(() => {\n if (!hasSides) {\n return;\n }\n if (!cart.items[id]?.quantity) {\n setMissingSides(0);\n return;\n }\n setMissingSides(\n (cart.items[id]?.quantity ?? 0) -\n (Object.keys(cart.items[id]?.sides ?? [])?.reduce?.(\n (acc, cur) => acc + cart.items[id]?.sides?.[cur]?.quantity,\n 0\n ) ?? 0)\n );\n }, [cart.items[id], hasSides]);\n\n useEffect(() => {\n if (debouncedMissingSides) {\n setShowModal(true);\n }\n }, [debouncedMissingSides]);\n\n useEffect(() => {\n if (!hasSides) {\n setNormalCTA(true);\n return;\n }\n if (cart.items[id]?.quantity === undefined) {\n setNormalCTA(true);\n return;\n }\n setSidesPrice(\n Object.keys(cart.items[id].sides ?? {}).reduce(\n (acc, side) =>\n acc + (sides[side].price ?? 0) * cart.items[id].sides[side].quantity,\n 0\n ) ?? 0\n );\n if (\n cart.items[id].sides === undefined ||\n sidesQuantity(cart.items[id]?.sides) !== (cart.items[id]?.quantity ?? 0)\n ) {\n setNormalCTA(false);\n return;\n }\n setNormalCTA(true);\n }, [cart.items, hasSides, id, sides]);\n\n return (\n \n {showSection && (\n \n \n {sections[section].name}{\" \"}\n \n ({sections[section].nameChinese})\n \n \n {!!sections[section].note && (\n \n {sections[section].note}\n

    \n )}\n \n )}\n \n {inCart && (\n \n {cart.items[id].quantity !== undefined && (\n \n {cart.items[id].quantity} {dishes[id].unit}\n \n )}\n {cart.items[id].secondaryQuantity !== undefined && (\n \n {cart.items[id].secondaryQuantity} {dishes[id].secondaryUnit}\n \n )}\n \n )}\n
    \n {dishes[id].status !== 1 && (\n \n {dishes[id].status === 2 ? \"Out of stock\" : \"Discontinued\"}\n
    \n )}\n \n {!!dishes[id].picture && (\n \n )}\n
    \n \n {spicy && (\n \n \n \n )}\n \n {name}\n
    \n \n \n {nameChinese}\n \n {inCart &&\n (cart.items[id].quantity !== undefined ||\n cart.items[id].secondaryQuantity !== undefined) ? (\n \n $\n {Math.floor(\n ((cart.items[id].quantity ?? 0) * price +\n (cart.items[id].secondaryQuantity ?? 0) *\n (secondaryPrice ?? 0)) /\n 100\n )}\n .\n {((cart.items[id].quantity ?? 0) * price +\n (cart.items[id].secondaryQuantity ?? 0) *\n (secondaryPrice ?? 0)) %\n 100 <\n 10\n ? `0${\n ((cart.items[id].quantity ?? 0) * price +\n (cart.items[id].secondaryQuantity ?? 0) *\n (secondaryPrice ?? 0)) %\n 100\n }`\n : ((cart.items[id].quantity ?? 0) * price +\n (cart.items[id].secondaryQuantity ?? 0) *\n (secondaryPrice ?? 0)) %\n 100}\n \n ) : (\n <>\n {!inCart && (\n \n ${Math.floor(price / 100)}.\n {price % 100 < 10 ? `0${price % 100}` : price % 100}\n \n )}\n {!inCart && secondaryUnit !== undefined && (\n  / \n )}\n {!inCart && secondaryUnit !== undefined && (\n \n ${Math.floor(secondaryPrice / 100)}.\n {secondaryPrice % 100 < 10\n ? `0${secondaryPrice % 100}`\n : secondaryPrice % 100}\n \n )}\n \n )}\n \n \n {inCart && sidesPrice !== 0 && (\n \n Sides (total)\n \n ${Math.floor(sidesPrice / 100)}.\n {sidesPrice % 100 < 10\n ? `0${sidesPrice % 100}`\n : sidesPrice % 100}\n \n \n )}\n \n \n \n {inCart && (\n \n setEditMode(!editMode)}\n outerStyle={{\n backgroundColor: backgroundColorButton,\n marginBottom: 4,\n marginLeft: 16,\n marginRight: 4,\n marginTop: 4,\n padding: 8,\n }}\n >\n {editMode ? (\n \n ) : (\n \n )}\n \n \n )}\n \n {(editMode || !inCart) && (\n \n \n {!!cart.items?.[id]?.quantity ? (\n {\n decreaseItemQuantity({ dispatch: cartDispatch, id });\n }}\n outerStyle={{\n backgroundColor: backgroundColorButton,\n paddingBottom: 8,\n paddingLeft: 12,\n paddingRight: 12,\n paddingTop: 8,\n }}\n >\n -\n \n ) : (\n \n )}\n \n \n {cart.items?.[id]?.quantity}\n {secondaryUnit === undefined ? \"\" : ` ${unit} (${unitChinese})`}\n \n \n {\n increaseItemQuantity({ dispatch: cartDispatch, id });\n }}\n outerStyle={{\n backgroundColor:\n !inCart && normalCTA\n ? backgroundColorButtonCTA\n : backgroundColorButton,\n paddingBottom: 8,\n paddingLeft: 12,\n paddingRight: 12,\n paddingTop: 8,\n }}\n >\n +\n \n \n \n )}\n {(editMode || !inCart) && secondaryUnit !== undefined && (\n \n \n {!!cart.items?.[id]?.secondaryQuantity ? (\n {\n decreaseItemSecondaryQuantity({ dispatch: cartDispatch, id });\n }}\n outerStyle={{\n backgroundColor: backgroundColorButton,\n paddingBottom: 8,\n paddingLeft: 12,\n paddingRight: 12,\n paddingTop: 8,\n }}\n >\n -\n \n ) : (\n \n )}\n \n \n {cart.items?.[id]?.secondaryQuantity} {secondaryUnit} (\n {secondaryUnitChinese})\n \n \n {\n increaseItemSecondaryQuantity({ dispatch: cartDispatch, id });\n }}\n outerStyle={{\n backgroundColor:\n !inCart && normalCTA\n ? backgroundColorButtonCTA\n : backgroundColorButton,\n paddingBottom: 8,\n paddingLeft: 12,\n paddingRight: 12,\n paddingTop: 8,\n }}\n >\n +\n \n \n \n )}\n {!hasSides ? null : cart.items[id]?.quantity ===\n undefined ? null : !editMode && inCart && normalCTA ? null : (\n \n setShowModal(true)}\n outerStyle={{\n backgroundColor: normalCTA\n ? backgroundColorButton\n : backgroundColorButtonCTA,\n marginTop: 8,\n paddingBottom: 8,\n paddingLeft: 12,\n paddingRight: 12,\n paddingTop: 8,\n }}\n pressScale={1.1}\n >\n {sidesQuantity(cart.items[id]?.sides) <\n (cart.items[id]?.quantity ?? 0)\n ? `Pick ${\n cart.items[id].quantity - sidesQuantity(cart.items[id].sides)\n } ${\n sidesQuantity(cart.items[id]?.sides) === 0 ? \"\" : \"more \"\n }side${\n cart.items[id].quantity -\n sidesQuantity(cart.items[id].sides) ===\n 1\n ? \"\"\n : \"s\"\n }`\n : sidesQuantity(cart.items[id]?.sides) ===\n (cart.items[id]?.quantity ?? 0)\n ? \"Change sides\"\n : `Remove ${\n sidesQuantity(cart.items[id].sides) - cart.items[id].quantity\n } side${\n sidesQuantity(cart.items[id].sides) -\n cart.items[id].quantity ===\n 1\n ? \"\"\n : \"s\"\n }`}\n \n \n )}\n {cart.items[id]?.specialRequests !== undefined && (\n \n setSpecialRequests({\n dispatch: cartDispatch,\n id,\n specialRequests: event.target.value,\n })\n }\n placeholder=\"Special request[s]\"\n style={{\n marginTop: 16,\n paddingBottom: 8,\n paddingLeft: 12,\n paddingRight: 12,\n paddingTop: 8,\n }}\n value={cart.items[id]?.specialRequests}\n />\n )}\n {(!inCart || editMode) && cart.items?.[id] && (\n \n \n
    \n {cart.items[id]?.specialRequests !== undefined ? (\n \n setSpecialRequests({\n dispatch: cartDispatch,\n id,\n specialRequests: undefined,\n })\n }\n outerStyle={{\n backgroundColor: backgroundColorButton,\n paddingBottom: 8,\n paddingLeft: 12,\n paddingRight: 12,\n paddingTop: 8,\n }}\n pressScale={1.1}\n >\n Remove special request[s]\n \n ) : (\n \n setSpecialRequests({\n dispatch: cartDispatch,\n id,\n specialRequests: \"\",\n })\n }\n outerStyle={{\n backgroundColor: backgroundColorButton,\n paddingBottom: 8,\n paddingLeft: 12,\n paddingRight: 12,\n paddingTop: 8,\n }}\n pressScale={1.1}\n >\n Make special request[s]\n \n )}\n
    \n
    \n
    \n )}\n {showModal ? : null}\n \n );\n\n function _hideModal() {\n setShowModal(false);\n }\n}\n\nfunction sidesQuantity(sides) {\n if (sides === undefined) {\n return 0;\n }\n return Object.keys(sides).reduce((acc, cur) => acc + sides[cur].quantity, 0);\n}\n","import { useHistory } from \"react-router-dom\";\nimport { useEffect } from \"react\";\n\nimport { useCart } from \"./CartContext.js\";\nimport { useMenu } from \"./MenuContext.js\";\nimport SectionDishRow from \"./SectionDishRow.js\";\nimport { useStyles } from \"./StylesContext.js\";\nimport Div from \"./components/Div.js\";\nimport Pressable from \"./components/Pressable.js\";\n\nexport default function Cart() {\n const {\n backgroundColorButtonCTA,\n backgroundColorButtonDisabled,\n backgroundColorFeature,\n colorButtonCTA,\n colorButtonDisabled,\n colorFeature,\n } = useStyles();\n const [cart] = useCart();\n const { dishes, downloadIfStale, sections, sides } = useMenu();\n const history = useHistory();\n const subtotal = Object.keys(cart.items).reduce(\n (acc, item) =>\n acc +\n (dishes[item].price ?? 0) * (cart.items[item].quantity ?? 0) +\n (dishes[item].secondaryPrice ?? 0) *\n (cart.items[item].secondaryQuantity ?? 0) +\n (Object.keys(cart.items[item].sides ?? {}).reduce(\n (acc, side) =>\n acc +\n (sides[side].price ?? 0) * cart.items[item].sides[side].quantity,\n 0\n ) ?? 0),\n 0\n );\n const taxRateString = process.env.REACT_APP_taxRate.split(\".\")[1];\n let tax = Math.floor(\n (subtotal * parseInt(taxRateString)) /\n Math.pow(10, taxRateString.length - 1)\n );\n if (tax % 10 >= 5) {\n tax += 10;\n }\n tax = Math.floor(tax / 10);\n const total = subtotal + tax;\n const subtotalString = `${Math.floor(subtotal / 100)}.${\n subtotal % 100 < 10 ? `0${subtotal % 100}` : subtotal % 100\n }`;\n const taxString = `${Math.floor(tax / 100)}.${\n tax % 100 < 10 ? `0${tax % 100}` : tax % 100\n }`;\n const totalString = `${Math.floor(total / 100)}.${\n total % 100 < 10 ? `0${total % 100}` : total % 100\n }`;\n const validCart =\n Object.keys(cart.items).length > 0 &&\n Object.keys(cart.items).every(\n (item) =>\n dishes[item].status === 1 &&\n (sections[dishes[item].section].addID === undefined ||\n (cart.items[item].sides !== undefined &&\n cart.items[item].quantity ===\n Object.keys(cart.items[item].sides).reduce(\n (acc, side) => acc + cart.items[item].sides[side].quantity,\n 0\n )))\n );\n\n useEffect(downloadIfStale, []);\n\n return (\n
    \n
    \n {Object.keys(cart.items).map((id) => (\n \n ))}\n
    \n \n \n \n Subtotal:\n
    \n \n {subtotalString}\n \n \n \n \n Tax:\n \n \n {taxString}\n \n \n \n \n Total:\n \n \n ${totalString}\n \n \n \n \n Checkout\n \n \n );\n\n function _checkout() {\n history.push(\"/checkout\");\n }\n}\n","import { createContext, useContext, useEffect, useReducer } from \"react\";\n\nconst OrdersStateContext = createContext();\nconst OrdersDispatchContext = createContext();\n\nconst initialState = {\n deliveryAddress: \"\",\n deliveryAddress2: \"\",\n deliveryCity: \"\",\n deliveryState: \"\",\n deliveryZip: \"\",\n name: \"\",\n phoneNumber: \"\",\n\n // orders: [], // part of initialState but need to declare separately (objects are copied by reference)\n};\n\nexport function OrdersProvider({ children }) {\n const [state, dispatch] = useReducer(persistingReducer, {\n ...initialState,\n orders: [],\n });\n\n useEffect(_rehydrate, []);\n\n return (\n \n \n {children}\n \n \n );\n\n function _rehydrate() {\n const payload = JSON.parse(localStorage.getItem(\"orders\"));\n payload?.orders?.forEach?.((order) => {\n order.timePlaced = new Date(order.timePlaced);\n order.timeReady = new Date(order.timeReady);\n order.transactionTime = new Date(order.transactionTime);\n });\n\n dispatch({\n // https://stackoverflow.com/a/1353711\n payload,\n type: \"REHYDRATE\",\n });\n }\n}\n\nexport function saveOrder({\n dispatch,\n deliveryAddress,\n deliveryAddress2,\n deliveryCity,\n deliveryState,\n deliveryZip,\n id,\n items,\n name,\n paid,\n phoneNumber,\n specialRequests,\n timePlaced,\n timeReady,\n total,\n transaction,\n transactionTime,\n}) {\n dispatch({\n payload: {\n deliveryAddress,\n deliveryAddress2,\n deliveryCity,\n deliveryState,\n deliveryZip,\n id,\n items,\n name,\n paid,\n phoneNumber,\n specialRequests,\n timePlaced,\n timeReady,\n total,\n transaction,\n transactionTime,\n },\n type: \"SAVE_ORDER\",\n });\n}\n\nexport function useOrders() {\n return [useOrdersState(), useOrdersDispatch()];\n}\n\nfunction persistingReducer(state, action) {\n const newState = reducer(state, action);\n localStorage.setItem(\"orders\", JSON.stringify(newState));\n return newState;\n}\n\nfunction reducer(state, action) {\n switch (action.type) {\n case \"REHYDRATE\":\n if (action.payload === null) {\n return { ...initialState, orders: [] };\n }\n return action.payload;\n case \"SAVE_ORDER\":\n const delivery = !!action.payload.deliveryAddress;\n return {\n // ...state,\n orders: [\n ...state.orders,\n {\n deliveryAddress: action.payload.deliveryAddress,\n deliveryAddress2: action.payload.deliveryAddress2,\n deliveryCity: action.payload.deliveryCity,\n deliveryState: action.payload.deliveryState,\n deliveryZip: action.payload.deliveryZip,\n id: action.payload.id,\n items: action.payload.items,\n name: action.payload.name,\n paid: action.payload.paid,\n phoneNumber: action.payload.phoneNumber,\n specialRequests: action.payload.specialRequests,\n timePlaced: action.payload.timePlaced,\n timeReady: action.payload.timeReady,\n total: action.payload.total,\n transaction: action.payload.transaction,\n transactionTime: action.payload.transactionTime,\n },\n ],\n };\n default: {\n throw new Error(`Unhandled action type: ${action.type}`);\n }\n }\n}\n\nfunction useOrdersState() {\n const context = useContext(OrdersStateContext);\n if (context === undefined) {\n throw new Error(\"useOrdersState must be used within a OrdersProvider\");\n }\n return context;\n}\n\nfunction useOrdersDispatch() {\n const context = useContext(OrdersDispatchContext);\n if (context === undefined) {\n throw new Error(\"useOrdersDispatch must be used within a OrdersProvider\");\n }\n return context;\n}\n","import { createContext, useContext, useReducer } from \"react\";\n\nconst SnacksStateContext = createContext();\nconst SnacksDispatchContext = createContext();\n\nexport function SnacksProvider({ children }) {\n const [state, dispatch] = useReducer(reducer, []);\n\n return (\n \n \n {children}\n \n \n );\n}\n\nexport function dismissSnack({ dispatch, index }) {\n dispatch({ payload: { index }, type: \"DISMISS_SNACK\" });\n}\n\nexport function showErrorSnack({ body, dispatch, duration = 2000 }) {\n dispatch({ payload: { body, dispatch, duration }, type: \"SHOW_ERROR\" });\n}\n\nexport function showInfoSnack({ body, dispatch, duration = 2000 }) {\n dispatch({ payload: { body, dispatch, duration }, type: \"SHOW_INFO\" });\n}\n\nexport function showWarningSnack({ body, dispatch, duration = 2000 }) {\n dispatch({ payload: { body, dispatch, duration }, type: \"SHOW_WARNING\" });\n}\n\nexport function showSucessSnack({ body, dispatch, duration = 2000 }) {\n dispatch({ payload: { body, dispatch, duration }, type: \"SHOW_SUCCESS\" });\n}\n\nexport function useSnacks() {\n return [useSnacksState(), useSnacksDispatch()];\n}\n\nfunction reducer(state, action) {\n switch (action.type) {\n case \"DISMISS_SNACK\": {\n return [\n ...state.slice(0, action.payload.index),\n {\n ...state[action.payload.index],\n active: false,\n },\n ...state.slice(action.payload.index + 1),\n ];\n }\n case \"SHOW_ERROR\":\n setTimeout(\n () =>\n dismissSnack({\n dispatch: action.payload.dispatch,\n index: state.length,\n }),\n action.payload.duration\n );\n return [\n ...state,\n {\n active: true,\n body: action.payload.body,\n type: \"error\",\n },\n ];\n case \"SHOW_INFO\":\n setTimeout(\n () =>\n dismissSnack({\n dispatch: action.payload.dispatch,\n index: state.length,\n }),\n action.payload.duration\n );\n return [\n ...state,\n {\n active: true,\n body: action.payload.body,\n type: \"info\",\n },\n ];\n case \"SHOW_SUCCESS\":\n setTimeout(\n () =>\n dismissSnack({\n dispatch: action.payload.dispatch,\n index: state.length,\n }),\n action.payload.duration\n );\n return [\n ...state,\n {\n active: true,\n body: action.payload.body,\n type: \"success\",\n },\n ];\n case \"SHOW_WARNING\":\n setTimeout(\n () =>\n dismissSnack({\n dispatch: action.payload.dispatch,\n index: state.length,\n }),\n action.payload.duration\n );\n return [\n ...state,\n {\n active: true,\n body: action.payload.body,\n type: \"warning\",\n },\n ];\n default: {\n throw new Error(`Unhandled action type: ${action.type}`);\n }\n }\n}\n\nfunction useSnacksState() {\n const context = useContext(SnacksStateContext);\n if (context === undefined) {\n throw new Error(\"useSnacksState must be used within a SnacksProvider\");\n }\n return context;\n}\n\nfunction useSnacksDispatch() {\n const context = useContext(SnacksDispatchContext);\n if (context === undefined) {\n throw new Error(\"useSnacksDispatch must be used within a SnacksProvider\");\n }\n return context;\n}\n","export default function Cash({\n backgroundColor = \"white\",\n color = \"black\",\n size = 48,\n}) {\n return (\n \n \n \n \n \n \n );\n}\n","export default function CreditCard({\n backgroundColor = \"white\",\n color = \"black\",\n size = 48,\n}) {\n return (\n \n \n \n \n );\n}\n","export default function Delivery({ color = \"black\", size = 48 }) {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n","export default function ScheduledSend({ color = \"black\", size = 48 }) {\n return (\n \n \n \n \n );\n}\n","export default function Send({ color = \"black\", size = 48 }) {\n return (\n \n \n \n \n );\n}\n","export default function Takeout({ color = \"black\", size = 48 }) {\n return (\n \n \n \n \n \n \n \n \n );\n}\n","import React, { useEffect, useLayoutEffect, useRef, useState } from \"react\";\n\nimport { showErrorSnack, useSnacks } from \"../SnacksContext.js\";\n\nexport default function TelephoneInput({\n onChange,\n onChangeText,\n onKeyDown,\n onMouseUp,\n value,\n ...props\n}) {\n const [changes, setChanges] = useState(0);\n const [cursor, setCursor] = useState(null);\n const ref = useRef(null);\n const [selection, setSelection] = useState();\n const [selectionStart, setSelectionStart] = useState(null);\n const [selectionEnd, setSelectionEnd] = useState(null);\n const [, snacksDispatch] = useSnacks();\n\n useLayoutEffect(() => {\n ref.current.selectionStart = cursor;\n ref.current.selectionEnd = cursor;\n }, [changes, cursor, ref]);\n\n useLayoutEffect(() => {\n if (\n !selection ||\n typeof selection?.selectionEnd !== \"number\" ||\n typeof selection?.selectionStart !== \"number\"\n ) {\n return;\n }\n ref.current.selectionStart = selection.selectionStart;\n ref.current.selectionEnd = selection.selectionEnd;\n }, [ref, selection]);\n\n return (\n \n );\n\n function _formatOrderPhoneNumber(value) {\n const l = value.length;\n if (l > 10) {\n return;\n }\n if (l === 0) {\n return \"\";\n }\n if (l < 3) {\n return `(${value}`;\n }\n if (l < 6) {\n return `(${value.slice(0, 3)}) ${value.slice(3)}`;\n }\n return `(${value.slice(0, 3)}) ${value.slice(3, 6)} - ${value.slice(6)}`;\n }\n\n function _onChange(event) {\n setChanges(changes + 1);\n const rawCurrent = event.target.value;\n const rawPrevious = value;\n const current = rawCurrent.replace(/\\D/g, \"\");\n const previous = rawPrevious.replace(/\\D/g, \"\");\n if (current.length > 10) {\n setSelection({\n selectionEnd,\n selectionStart,\n });\n showErrorSnack({\n body: \"Phone number too long\",\n dispatch: snacksDispatch,\n duration: 7500,\n });\n return;\n }\n if (selectionStart === selectionEnd) {\n if (current.length === previous.length) {\n if (event.target.selectionStart < selectionStart) {\n if (selectionStart === 1) {\n setCursor(1);\n return;\n }\n if (selectionStart < 7) {\n onChangeText?.(\n _formatOrderPhoneNumber(previous.slice(0, 2) + previous.slice(3))\n );\n setCursor(3);\n return;\n }\n onChangeText?.(\n _formatOrderPhoneNumber(previous.slice(0, 5) + previous.slice(6))\n );\n setCursor(8);\n return;\n }\n if (selectionStart < 7) {\n onChangeText?.(\n _formatOrderPhoneNumber(previous.slice(0, 3) + previous.slice(4))\n );\n setCursor(4);\n return;\n }\n onChangeText?.(\n _formatOrderPhoneNumber(previous.slice(0, 6) + previous.slice(7))\n );\n setCursor(9);\n return;\n }\n onChangeText?.(_formatOrderPhoneNumber(current));\n const start =\n rawPrevious.slice(0, selectionStart).replace(/\\D/g, \"\").length +\n rawCurrent\n .slice(\n selectionStart,\n selectionEnd + rawCurrent.length - rawPrevious.length\n )\n .replace(/\\D/g, \"\").length;\n if (current.length < previous.length) {\n if (event.target.selectionStart < selectionStart) {\n if (start < 4) {\n setCursor(start);\n return;\n }\n if (start < 7) {\n setCursor(start + 2);\n return;\n }\n setCursor(start + 5);\n return;\n }\n if (start < 3) {\n setCursor(start + 1);\n return;\n }\n if (start < 6) {\n setCursor(start + 3);\n return;\n }\n setCursor(start + 6);\n return;\n }\n }\n onChangeText?.(_formatOrderPhoneNumber(current));\n const start =\n rawPrevious.slice(0, selectionStart).replace(/\\D/g, \"\").length +\n rawCurrent\n .slice(\n selectionStart,\n selectionEnd + rawCurrent.length - rawPrevious.length\n )\n .replace(/\\D/g, \"\").length;\n if (start < 3) {\n setCursor(start + 1);\n return;\n }\n if (start < 6) {\n setCursor(start + 3);\n return;\n }\n setCursor(start + 6);\n }\n\n function _onKeyDown(event) {\n _updateSelection();\n onKeyDown?.(event);\n }\n\n function _onMouseUp(event) {\n _updateSelection();\n onMouseUp?.(event);\n }\n\n function _updateSelection() {\n setSelectionStart(ref.current.selectionStart);\n setSelectionEnd(ref.current.selectionEnd);\n }\n}\n","export default function dst() {\n // this assumes that dst starts at same time locally as eastern time\n // doesn't work for most of arizona and some usa territories\n // otherwise good for usa\n return (\n new Date().getTimezoneOffset() <\n Math.max(\n new Date(new Date().getFullYear(), 0, 1).getTimezoneOffset(),\n new Date(new Date().getFullYear(), 6, 1).getTimezoneOffset()\n )\n );\n}\n","import loadScript from \"load-script\";\nimport React, { useEffect, useState } from \"react\";\nimport CreditCardPreview from \"react-credit-cards\";\nimport \"react-credit-cards/es/styles-compiled.css\";\nimport { useHistory } from \"react-router-dom\";\n\nimport { resetCart, useCart } from \"./CartContext.js\";\nimport { useHours } from \"./HoursContext.js\";\nimport { useMenu } from \"./MenuContext.js\";\nimport { saveOrder, useOrders } from \"./OrdersContext.js\";\nimport {\n showErrorSnack,\n showInfoSnack,\n // showSuccessSnack,\n // showWarningSnack,\n useSnacks,\n} from \"./SnacksContext.js\";\nimport { useStyles } from \"./StylesContext.js\";\nimport Cash from \"./assets/Cash.js\";\nimport CreditCard from \"./assets/CreditCard.js\";\nimport Delivery from \"./assets/Delivery.js\";\nimport ScheduledSend from \"./assets/ScheduledSend.js\";\nimport Send from \"./assets/Send.js\";\nimport Takeout from \"./assets/Takeout.js\";\nimport Div from \"./components/Div.js\";\nimport Pressable from \"./components/Pressable.js\";\nimport TelephoneInput from \"./components/TelephoneInput.js\";\nimport dst from \"./lib/dst.js\";\nimport useDebounce from \"./lib/useDebounce.js\";\nimport useViewport from \"./lib/useViewport.js\";\n\nexport default function Checkout() {\n const [apiLoaded, setAPILoaded] = useState(false);\n const {\n backgroundColorButton,\n backgroundColorButtonCTA,\n backgroundColorButtonDisabled,\n backgroundColorFeature,\n backgroundColorSwitch,\n backgroundColorSwitchAlternate,\n backgroundColorSwitchDisabled,\n colorButton,\n colorButtonCTA,\n colorButtonDisabled,\n colorFeature,\n colorSwitch,\n colorSwitchAlternate,\n colorSwitchDisabled,\n } = useStyles();\n const [cart, cartDispatch] = useCart();\n const [ccBlurred, setCCBlurred] = useState(true);\n const controller = new AbortController();\n const {\n cookingTimeOffset,\n deliveryTimeOffset,\n holidays,\n weeklyHours,\n } = useHours();\n const [ccCVC, setCCCVC] = useState(\"\");\n const [ccExpiry, setCCExpiry] = useState(\"\");\n const [ccFocusField, setCCFocusField] = useState(\"\");\n const [ccName, setCCName] = useState(\"\");\n const [ccNumber, setCCNumber] = useState(\"\");\n const [dateTimeBlurred, setDateTimeBlurred] = useState(true);\n const [deliveryAddressModified, setDeliveryAddressModified] = useState(0);\n const [deliveryBlurred, setDeliveryBlurred] = useState(true);\n const debouncedDeliveryAddressModified = useDebounce(\n deliveryAddressModified,\n 1000\n );\n const [deliveryFee, setDeliveryFee] = useState();\n const [\n deliveryFeeCalculationPending,\n setDeliveryFeeCalculationPending,\n ] = useState(false);\n const [\n deliveryFeeCalculationRateLimited,\n setDeliveryFeeCalculationRateLimited,\n ] = useState(false);\n const [detailsBlurred, setDetailsBlurred] = useState(true);\n const { dishes, sections, sides } = useMenu();\n const { height, width } = useViewport();\n const history = useHistory();\n const [loading, setLoading] = useState(false);\n const [orderTime, setOrderTime] = useState(new Date());\n const [orders, ordersDispatch] = useOrders();\n const [, snacksDispatch] = useSnacks();\n const [specialRequests, setSpecialRequests] = useState(\"\");\n const [specialTime, setSpecialTime] = useState(\"\");\n const wrappedWeeklyHours = [\n ...weeklyHours.reduce(\n (acc, dailyHours) => [\n ...acc,\n dailyHours.closeWeekday >= dailyHours.openWeekday\n ? dailyHours\n : {\n ...dailyHours,\n closeWeekday: dailyHours.closeWeekday + 7,\n },\n ],\n []\n ),\n ];\n\n const mostRecentOrder =\n orders.orders.length === 0\n ? undefined\n : orders.orders[orders.orders.length - 1];\n const [cardPayment, setCardPayment] = useState(\n mostRecentOrder === undefined ? true : mostRecentOrder.paid\n );\n const [cartASAPEnabled, setCartASAPEnabled] = useState(\n Object.keys(cart.items).every(\n (item) =>\n sections[dishes[item].section].hours === undefined ||\n sections[dishes[item].section].hours.some(\n ({\n endHour,\n endMinute,\n endWeekday,\n beginningHour,\n beginningMinute,\n beginningWeekday,\n }) =>\n (beginningWeekday < orderTime.getDay() ||\n (beginningWeekday === orderTime.getDay() &&\n beginningHour < orderTime.getHours()) ||\n (beginningWeekday === orderTime.getDay() &&\n beginningHour === orderTime.getHours() &&\n beginningMinute <= orderTime.getMinutes())) &&\n (endWeekday > orderTime.getDay() ||\n (endWeekday === orderTime.getDay() &&\n endHour > orderTime.getHours()) ||\n (endWeekday === orderTime.getDay() &&\n endHour === orderTime.getHours() &&\n endMinute >= orderTime.getMinutes()))\n )\n )\n );\n const deliveryCache = {};\n for (let i = orders.orders.length - 1; i >= 0; i--) {\n if (orders.orders[i].deliveryAddress === \"\") {\n continue;\n }\n deliveryCache.address = orders.orders[i].deliveryAddress;\n deliveryCache.address2 = orders.orders[i].deliveryAddress2;\n deliveryCache.city = orders.orders[i].deliveryCity;\n deliveryCache.state = orders.orders[i].deliveryState;\n deliveryCache.zip = orders.orders[i].deliveryZip;\n break;\n }\n const [deliveryAddress, setDeliveryAddress] = useState(\n deliveryCache.address ?? \"\"\n );\n const [deliveryAddress2, setDeliveryAddress2] = useState(\n deliveryCache.address2 ?? \"\"\n );\n const [deliveryCity, setDeliveryCity] = useState(\n deliveryCache.city ?? \"Richmond\"\n );\n const [deliveryState, setDeliveryState] = useState(\n deliveryCache.state ?? \"IN\"\n );\n const [deliveryZip, setDeliveryZip] = useState(deliveryCache.zip ?? \"47374\");\n const [orderName, setOrderName] = useState(\n mostRecentOrder === undefined ? \"\" : mostRecentOrder.name\n );\n const [orderPhoneNumber, setOrderPhoneNumber] = useState(\n mostRecentOrder === undefined\n ? \"\"\n : `(${mostRecentOrder.phoneNumber.slice(\n 0,\n 3\n )}) ${mostRecentOrder.phoneNumber.slice(\n 3,\n 6\n )} - ${mostRecentOrder.phoneNumber.slice(6)}`\n );\n\n // security vulnerability\n // need to pass cart items + quantities\n // otherwise can manipulate prices client-side\n const subtotal = Object.keys(cart.items).reduce(\n (acc, item) =>\n acc +\n (dishes[item].price ?? 0) * (cart.items[item].quantity ?? 0) +\n (dishes[item].secondaryPrice ?? 0) *\n (cart.items[item].secondaryQuantity ?? 0) +\n (Object.keys(cart.items[item].sides ?? {}).reduce(\n (acc, side) =>\n acc +\n (sides[side].price ?? 0) * cart.items[item].sides[side].quantity,\n 0\n ) ?? 0),\n 0\n );\n const [takeout, setTakeout] = useState(\n mostRecentOrder === undefined ||\n subtotal <\n (isNaN(parseInt(process.env.REACT_APP_deliveryMinimumOrder))\n ? 0\n : parseInt(process.env.REACT_APP_deliveryMinimumOrder))\n ? true\n : mostRecentOrder.deliveryAddress === \"\"\n );\n const [nowOpen, setNowOpen] = useState(_nowOpen({ orderTime, takeout }));\n const [asap, setASAP] = useState(cartASAPEnabled && nowOpen);\n const taxRateString = process.env.REACT_APP_taxRate.split(\".\")[1];\n let tax = Math.floor(\n ((subtotal + (takeout ? 0 : deliveryFee ?? 0)) * parseInt(taxRateString)) /\n Math.pow(10, taxRateString.length - 1)\n );\n if (tax % 10 >= 5) {\n tax += 10;\n }\n tax = Math.floor(tax / 10);\n const total = subtotal + (takeout ? 0 : deliveryFee ?? 0) + tax;\n const deliveryFeeString = `${Math.floor((deliveryFee ?? 0) / 100)}.${\n (deliveryFee ?? 0) % 100 < 10\n ? `0${(deliveryFee ?? 0) % 100}`\n : (deliveryFee ?? 0) % 100\n }`;\n const subtotalString = `${Math.floor(subtotal / 100)}.${\n subtotal % 100 < 10 ? `0${subtotal % 100}` : subtotal % 100\n }`;\n const taxString = `${Math.floor(tax / 100)}.${\n tax % 100 < 10 ? `0${tax % 100}` : tax % 100\n }`;\n const totalString = `${Math.floor(total / 100)}.${\n total % 100 < 10 ? `0${total % 100}` : total % 100\n }`;\n const [valid, setValid] = useState(false);\n const [validCCNumber, setValidCCNumber] = useState(false);\n // const [validType, setValidType] = useState(false);\n\n // deliveryAddressModified becomes redundant\n // useEffect(\n // () => {\n // if (takeout) {\n // setValidType(true)\n // return;\n // }\n // if (deliveryAddress.length < 4) {\n // setValidType(false)\n // return;\n // }\n // if (deliveryCity.length === 0) {\n // setValidType(false)\n // return;\n // }\n // if (\n // !process.env.REACT_APP_validDeliveryZipCodes.split(\",\").some(\n // (zip) => zip === deliveryZip\n // )\n // ) {\n // setValidType(false)\n // return;\n // }\n // setValidType(true)\n // },\n // [\n // //\n // ]\n // );\n\n useEffect(_calculateDeliveryFee, [debouncedDeliveryAddressModified]);\n useEffect(_cancelFetches, []);\n useEffect(_cartASAPEnabled, [cart, dishes, orderTime, sections]);\n useEffect(_loadAPI, []);\n useEffect(_rateLimitDeliveryFeeCalculation, [\n deliveryFeeCalculationRateLimited,\n ]);\n // useEffect(_startTicking, []);\n useEffect(_updateNowOpen, [orderTime, takeout]);\n useEffect(_validate, [\n asap,\n cardPayment,\n cart,\n ccCVC,\n ccExpiry,\n ccName,\n deliveryAddress,\n deliveryAddress2,\n deliveryAddressModified,\n deliveryCity,\n deliveryFee,\n deliveryFeeCalculationPending,\n deliveryState,\n deliveryZip,\n loading,\n orderName,\n orderPhoneNumber,\n specialTime,\n subtotal,\n takeout,\n validCCNumber,\n ]);\n\n return (\n
    \n \n

    Schedule

    \n \n \n showErrorSnack({\n body: \"Closed or closing soon.\",\n dispatch: snacksDispatch,\n duration: 10000,\n })\n }\n onPress={() => setASAP(true)}\n outerStyle={{\n backgroundColor:\n !cartASAPEnabled || !nowOpen\n ? backgroundColorSwitchDisabled\n : asap\n ? backgroundColorSwitchAlternate\n : backgroundColorSwitch,\n flexBasis: 0,\n flexShrink: 0,\n flexGrow: 1,\n padding: 16,\n }}\n pressScale={1.25}\n >\n \n \n Now\n \n \n setASAP(false)}\n outerStyle={{\n backgroundColor: asap\n ? backgroundColorSwitch\n : backgroundColorSwitchAlternate,\n flexBasis: 0,\n flexShrink: 0,\n flexGrow: 1,\n padding: 16,\n }}\n pressScale={1.25}\n >\n \n \n Future\n \n \n
    \n {!asap && (\n
    \n \n setDateTimeBlurred(true)}\n onChange={(event) => setSpecialTime(event.target.value)}\n onFocus={() => setDateTimeBlurred(false)}\n onKeyDown={_onKeyDown}\n placeholder=\"Schedule date/time\"\n style={{\n boxSizing: \"border-box\",\n fontSize: 20,\n height: 48,\n paddingLeft: 12,\n paddingRight: 12,\n width: width - 32,\n }}\n type=\"datetime-local\"\n value={specialTime}\n />\n
    \n )}\n
    \n

    Type

    \n \n setTakeout(true)}\n outerStyle={{\n backgroundColor: takeout\n ? backgroundColorSwitchAlternate\n : backgroundColorSwitch,\n flexBasis: 0,\n flexShrink: 0,\n flexGrow: 1,\n padding: 16,\n }}\n pressScale={1.25}\n >\n \n \n Takeout\n \n \n \n showErrorSnack({\n body: `$${Math.floor(\n process.env.REACT_APP_deliveryMinimumOrder / 100\n )} ${\n process.env.REACT_APP_deliveryMinimumOrder % 100 === 0\n ? \"\"\n : `.${process.env.REACT_APP_deliveryMinimumOrder % 100}`\n } delivery minimum`,\n dispatch: snacksDispatch,\n duration: 10000,\n })\n }\n onPress={() => setTakeout(false)}\n outerStyle={{\n backgroundColor:\n subtotal < parseInt(process.env.REACT_APP_deliveryMinimumOrder)\n ? backgroundColorSwitchDisabled\n : takeout\n ? backgroundColorSwitch\n : backgroundColorSwitchAlternate,\n flexBasis: 0,\n flexShrink: 0,\n flexGrow: 1,\n padding: 16,\n }}\n pressScale={1.25}\n >\n \n \n Delivery\n \n \n
    \n {!takeout && (\n <>\n {\n setDeliveryAddress(event.target.value);\n setDeliveryAddressModified(deliveryAddressModified + 1);\n }}\n onFocus={_focusDelivery}\n onKeyDown={_onKeyDown}\n placeholder=\"Address\"\n style={{\n boxSizing: \"border-box\",\n marginBottom: 16,\n paddingBottom: 8,\n paddingLeft: 12,\n paddingRight: 12,\n paddingTop: 8,\n width: width - 32,\n }}\n type=\"text\"\n value={deliveryAddress}\n />\n {\n setDeliveryAddress2(event.target.value);\n setDeliveryAddressModified(deliveryAddressModified + 1);\n }}\n onFocus={_focusDelivery}\n onKeyDown={_onKeyDown}\n placeholder=\"Address 2\"\n style={{\n boxSizing: \"border-box\",\n marginBottom: 16,\n paddingBottom: 8,\n paddingLeft: 12,\n paddingRight: 12,\n paddingTop: 8,\n width: width - 32,\n }}\n type=\"text\"\n value={deliveryAddress2}\n />\n \n {\n setDeliveryAddressModified(deliveryAddressModified + 1);\n setDeliveryCity(event.target.value);\n }}\n onFocus={_focusDelivery}\n onKeyDown={_onKeyDown}\n placeholder=\"City\"\n style={{\n boxSizing: \"border-box\",\n display: \"flex\",\n flexGrow: 3,\n marginRight: 16,\n paddingBottom: 8,\n paddingLeft: 12,\n paddingRight: 12,\n paddingTop: 8,\n width: 0,\n }}\n type=\"text\"\n value={deliveryCity}\n />\n {\n setDeliveryAddressModified(deliveryAddressModified + 1);\n setDeliveryState(event.target.value);\n }}\n onFocus={_focusDelivery}\n value={deliveryState}\n style={{\n boxSizing: \"border-box\",\n display: \"flex\",\n flexGrow: 1,\n marginRight: 16,\n paddingBottom: 8,\n paddingLeft: 12,\n paddingRight: 12,\n paddingTop: 8,\n width: 0,\n }}\n >\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {\n setDeliveryAddressModified(deliveryAddressModified + 1);\n setDeliveryZip(event.target.value);\n }}\n onFocus={_focusDelivery}\n onKeyDown={_onKeyDown}\n placeholder=\"Zip\"\n style={{\n boxSizing: \"border-box\",\n display: \"flex\",\n flexGrow: 2,\n paddingBottom: 8,\n paddingLeft: 12,\n paddingRight: 12,\n paddingTop: 8,\n width: 0,\n }}\n type=\"text\"\n value={deliveryZip}\n />\n \n \n )}\n
    \n

    Payment

    \n \n setCardPayment(true)}\n outerStyle={{\n backgroundColor: cardPayment\n ? backgroundColorSwitchAlternate\n : backgroundColorSwitch,\n flexBasis: 0,\n flexShrink: 0,\n flexGrow: 1,\n padding: 16,\n }}\n pressScale={1.25}\n >\n \n \n Card\n \n \n setCardPayment(false)}\n outerStyle={{\n backgroundColor: cardPayment\n ? backgroundColorSwitch\n : backgroundColorSwitchAlternate,\n flexBasis: 0,\n flexShrink: 0,\n flexGrow: 1,\n padding: 16,\n }}\n pressScale={1.25}\n >\n \n \n Cash\n \n \n
    \n {cardPayment && (\n \n \n \n \n \n \n \n )}\n

    Details

    \n \n \n setOrderName(event.target.value)}\n onFocus={_focusDetails}\n onKeyDown={_onKeyDown}\n placeholder=\"Name order under\"\n style={{\n flexGrow: 1,\n marginRight: cardPayment && ccName.length >= 3 ? 16 : 0,\n minWidth: 0,\n paddingBottom: 8,\n paddingLeft: 12,\n paddingRight: 12,\n paddingTop: 8,\n }}\n type=\"text\"\n value={orderName}\n />\n {cardPayment && ccName.length >= 3 && (\n setOrderName(ccName)}\n outerStyle={{\n backgroundColor: backgroundColorButton,\n paddingBottom: 8,\n paddingLeft: 12,\n paddingRight: 12,\n paddingTop: 8,\n }}\n pressScale={1.2}\n >\n Copy CC name\n \n )}\n \n \n setSpecialRequests(event.target.value)}\n onFocus={_focusDetails}\n onKeyDown={_onKeyDown}\n placeholder=\"Special request[s]\"\n style={{\n marginBottom: 16,\n paddingBottom: 8,\n paddingLeft: 12,\n paddingRight: 12,\n paddingTop: 8,\n }}\n type=\"text\"\n value={specialRequests}\n />\n \n \n {((ccBlurred && dateTimeBlurred && deliveryBlurred && detailsBlurred) ||\n height > 640) && (\n <>\n \n \n \n Subtotal:\n \n \n {subtotalString}\n \n \n {\n // !takeout && validType && !loading && (\n }\n {!takeout && (\n \n \n Delivery Fee:\n \n \n {loading ||\n deliveryAddressModified !== debouncedDeliveryAddressModified\n ? \"\"\n : deliveryFeeString}\n \n \n )}\n \n \n Tax:\n \n \n {taxString}\n \n \n \n \n Total:\n \n \n ${totalString}\n \n \n \n \n Place Order\n \n \n )}\n \n );\n\n function _blurCC() {\n setCCBlurred(true);\n }\n\n function _blurDelivery() {\n setDeliveryBlurred(true);\n }\n\n function _blurDetails() {\n setDetailsBlurred(true);\n }\n\n function _calculateDeliveryFee() {\n if (loading) {\n setDeliveryFeeCalculationPending(true);\n return _cancelFetches;\n }\n if (takeout) {\n setDeliveryFeeCalculationPending(true);\n return _cancelFetches;\n }\n if (\n deliveryAddress.length < 4 ||\n deliveryCity.length === 0 ||\n deliveryZip.length !== 5 ||\n isNaN(parseInt(deliveryZip))\n ) {\n setDeliveryFeeCalculationPending(true);\n return _cancelFetches;\n }\n // if (!validType) {\n // return _cancelFetches;\n // }\n setLoading(true);\n (async function () {\n try {\n const response = await fetch(\n process.env.NODE_ENV === \"production\"\n ? `https://${process.env.REACT_APP_apiBase}/delivery-fee`\n : `http://${process.env.REACT_APP_apiBase}:8080/delivery-fee`,\n {\n body: JSON.stringify({\n address: deliveryAddress,\n address2: deliveryAddress2,\n city: deliveryCity,\n state: deliveryState,\n zip: deliveryZip,\n }),\n method: \"POST\",\n signal: controller.signal,\n }\n );\n if (!response.ok) {\n if (response.status === 404) {\n showErrorSnack({\n body: \"Address not found\",\n dispatch: snacksDispatch,\n });\n setDeliveryFeeCalculationPending(true);\n return;\n }\n if (response.status === 429) {\n setDeliveryFeeCalculationRateLimited(true);\n setDeliveryFeeCalculationPending(true);\n setLoading(false);\n showErrorSnack({\n body: \"Too many requests.\\nWill retry in 10s.\",\n dispatch: snacksDispatch,\n });\n return;\n }\n showErrorSnack({\n body: await response.text(),\n dispatch: snacksDispatch,\n });\n setLoading(false);\n setDeliveryFeeCalculationPending(true);\n return;\n }\n setDeliveryFee(parseInt(await response.text()));\n setLoading(false);\n } catch (error) {\n console.error(error);\n setLoading(false);\n }\n })();\n return _cancelFetches;\n }\n\n function _cancelFetches() {\n return () => controller.abort();\n }\n\n function _cartASAPEnabled() {\n setCartASAPEnabled(\n Object.keys(cart.items).every(\n (item) =>\n sections[dishes[item].section].hours === undefined ||\n sections[dishes[item].section].hours.some(\n ({\n endHour,\n endMinute,\n endWeekday,\n beginningHour,\n beginningMinute,\n beginningWeekday,\n }) =>\n (beginningWeekday < orderTime.getDay() ||\n (beginningWeekday === orderTime.getDay() &&\n beginningHour < orderTime.getHours()) ||\n (beginningWeekday === orderTime.getDay() &&\n beginningHour === orderTime.getHours() &&\n beginningMinute <= orderTime.getMinutes())) &&\n (endWeekday > orderTime.getDay() ||\n (endWeekday === orderTime.getDay() &&\n endHour > orderTime.getHours()) ||\n (endWeekday === orderTime.getDay() &&\n endHour === orderTime.getHours() &&\n endMinute >= orderTime.getMinutes()))\n )\n )\n );\n }\n\n function _firstName() {\n return ccName.split(\" \")[0];\n }\n\n function _focusDelivery() {\n setDeliveryBlurred(false);\n }\n\n function _focusDetails() {\n setDetailsBlurred(false);\n }\n\n function _lastName() {\n return ccName.split(\" \")[1];\n }\n\n function _loadAPI() {\n (function () {\n if (window.window.ConvergeEmbeddedPayment) {\n return;\n }\n loadScript(\n process.env.NODE_ENV === \"production\"\n ? \"https://api.convergepay.com/hosted-payments/Checkout.js\"\n : \"https://api.demo.convergepay.com/hosted-payments/Checkout.js\",\n (err, script) => {\n if (err) {\n console.error(err);\n return;\n }\n setAPILoaded(true);\n }\n );\n })();\n }\n\n function _nowOpen({ nowOpen, takeout }) {\n let beginningTime = new Date(orderTime);\n let endTime = new Date(orderTime);\n if (!takeout) {\n endTime.setMinutes(\n endTime.getMinutes() + (cookingTimeOffset + deliveryTimeOffset)\n );\n } else {\n endTime.setMinutes(endTime.getMinutes() + cookingTimeOffset);\n }\n return (\n !holidays.some(\n ({ beginning, end }) => beginning < beginningTime && end > endTime\n ) &&\n wrappedWeeklyHours.some(\n ({\n closeHour,\n closeMinute,\n closeWeekday,\n openHour,\n openMinute,\n openWeekday,\n }) =>\n (openWeekday < beginningTime.getDay() ||\n (openWeekday === beginningTime.getDay() &&\n openHour < beginningTime.getHours()) ||\n (openWeekday === beginningTime.getDay() &&\n openHour === beginningTime.getHours() &&\n openMinute <= beginningTime.getMinutes())) &&\n (closeWeekday > endTime.getDay() ||\n (closeWeekday === endTime.getDay() &&\n closeHour > endTime.getHours()) ||\n (closeWeekday === endTime.getDay() &&\n closeHour === endTime.getHours() &&\n closeMinute >= endTime.getMinutes()))\n )\n );\n }\n\n function _onChangeCC(event) {\n const { name, value } = event.target;\n switch (name) {\n case \"cvc\":\n if (value.length > 3) {\n return;\n }\n if (value !== \"\" && !/^[0-9\\b]+$/.test(value)) {\n return;\n }\n setCCCVC(value);\n return;\n case \"expiry\":\n if (value.replace(/\\//g, \"\").length > 4) {\n return;\n }\n if (value !== \"\" && !/^[0-9/\\b]+$/.test(value)) {\n return;\n }\n setCCExpiry(value);\n return;\n case \"number\":\n if (value.replace(/\\s/g, \"\").length > 16) {\n return;\n }\n if (value !== \"\" && !/^[0-9 \\b]+$/.test(value)) {\n return;\n }\n setCCNumber(value);\n return;\n case \"name\":\n setCCName(value);\n return;\n }\n }\n\n function _onFocusCC(event) {\n setCCBlurred(false);\n setCCFocusField(event.target.name);\n }\n\n function _onKeyDown(event) {\n if (event.keyCode !== 13) {\n return;\n }\n event.target.setAttribute(\"readonly\", \"readonly\");\n event.target.blur();\n event.target.removeAttribute(\"readonly\");\n }\n\n async function _placeOrder() {\n if (!valid) {\n return;\n }\n setLoading(true);\n let orderID, transactionToken;\n const path = cardPayment\n ? \"/request-transaction-token\"\n : \"/place-cash-order\";\n\n try {\n const response = await fetch(\n process.env.NODE_ENV === \"production\"\n ? `https://${process.env.REACT_APP_apiBase}${path}`\n : `http://${process.env.REACT_APP_apiBase}:8080${path}`,\n {\n body: JSON.stringify({\n items: Object.keys(cart.items).reduce((acc, item) => {\n if (cart.items[item].sides === undefined) {\n return [\n ...acc,\n {\n ...cart.items[item],\n id: item.toString(),\n },\n ];\n }\n return [\n ...acc,\n {\n ...cart.items[item],\n id: item.toString(),\n sides: Object.keys(cart.items[item].sides).reduce(\n (acc, side) => [\n ...acc,\n {\n ...cart.items[item].sides[side],\n id: side.toString(),\n },\n ],\n []\n ),\n },\n ];\n }, []),\n name: orderName,\n phoneNumber: orderPhoneNumber.replace(/\\D/g, \"\"),\n total: totalString,\n ...(cardPayment && {\n ccFirstName: _firstName(),\n ccLastName: _lastName(),\n }),\n ...(!takeout && {\n deliveryAddress,\n deliveryAddress2,\n deliveryCity,\n deliveryState,\n }),\n ...(specialRequests.length > 0 && { specialRequests }),\n ...(!asap && { specialTime: new Date(specialTime) }),\n }),\n method: \"POST\",\n signal: controller.signal,\n }\n );\n if (response.status === 400 || response.status === 403) {\n showErrorSnack({\n body: \"Invalid input\",\n dispatch: snacksDispatch,\n duration: 10000,\n });\n setLoading(false);\n return;\n }\n if (response.status === 500) {\n showErrorSnack({\n body: \"Unknown error\",\n dispatch: snacksDispatch,\n duration: 10000,\n });\n setLoading(false);\n return;\n }\n if (response.status === 401) {\n showErrorSnack({\n body: \"Failed to acquire transaction token\",\n dispatch: snacksDispatch,\n duration: 10000,\n });\n setLoading(false);\n return;\n }\n if (!response.ok) {\n throw new Error(response);\n }\n if (!cardPayment) {\n const json = await response.json();\n const orderID = json.order;\n const timeReady = asap ? new Date(json.created) : new Date(specialTime);\n if (asap) {\n if (takeout) {\n timeReady.setMinutes(timeReady.getMinutes() + cookingTimeOffset);\n } else {\n timeReady.setMinutes(\n timeReady.getMinutes() + cookingTimeOffset + deliveryTimeOffset\n );\n }\n }\n saveOrder({\n dispatch: ordersDispatch,\n id: orderID,\n items: cart.items,\n name: orderName,\n paid: false,\n phoneNumber: orderPhoneNumber.replace(/\\D/g, \"\"),\n specialRequests,\n timePlaced: new Date(json.created),\n timeReady,\n total: totalString,\n ...(!takeout && {\n deliveryAddress,\n deliveryAddress2,\n deliveryCity,\n deliveryState,\n deliveryZip,\n }),\n });\n resetCart({ dispatch: cartDispatch });\n setLoading(false);\n history.push(`order/${orderID}`);\n return;\n }\n const data = await response.json();\n orderID = data.order;\n transactionToken = data.token;\n } catch (error) {\n console.error(error);\n setLoading(false);\n return _cancelFetches;\n }\n try {\n if (!apiLoaded) {\n _loadAPI();\n }\n const ccExpiry2 = ccExpiry.replace(/\\//, \"\");\n window.ConvergeEmbeddedPayment.pay(\n {\n ssl_add_token: \"y\",\n ssl_card_number: ccNumber.replace(/ /g, \"\"),\n ssl_cvv2cvc2: ccCVC,\n ssl_exp_date: `${ccExpiry2.slice(0, -2)}/${ccExpiry2.slice(-2)}`,\n ssl_first_name: _firstName(),\n ssl_get_token: \"y\",\n ssl_invoice_number: orderID,\n ssl_last_name: _lastName(),\n ssl_merchant_txn_id: orderID,\n ssl_txn_auth_token: transactionToken,\n },\n {\n onApproval: async (approvalResponse) => {\n try {\n const response = await fetch(\n process.env.NODE_ENV === \"production\"\n ? `https://${process.env.REACT_APP_apiBase}/checkout-js-response`\n : `http://${process.env.REACT_APP_apiBase}:8080/checkout-js-relay`,\n {\n body:\n process.env.NODE_ENV === \"production\"\n ? JSON.stringify({\n elavonTransaction: approvalResponse.ssl_txn_id,\n })\n : JSON.stringify(approvalResponse),\n method: \"POST\",\n signal: controller.signal,\n }\n );\n // approval: 201\n // decline: 204\n // elavon error: 502\n // user error: 400\n // server error: 500\n // elavon timeout: 504\n if (\n response.status !== 201 &&\n response.status !== 204 &&\n response.status !== 400 &&\n response.status !== 500 &&\n response.status !== 502 &&\n response.status !== 504\n ) {\n throw new Error(response);\n }\n if (response.status === 504) {\n showErrorSnack({\n body:\n \"Failed to process transaction.\\nPlease refresh and try again.\",\n dispatch: snacksDispatch,\n duration: 10000,\n });\n return;\n }\n if (response.status === 400) {\n showErrorSnack({\n body: \"Invalid input\",\n dispatch: snacksDispatch,\n duration: 10000,\n });\n return;\n }\n if (response.status !== 201 && response.status !== 204) {\n showErrorSnack({\n body: \"Unknown error\",\n dispatch: snacksDispatch,\n duration: 10000,\n });\n setLoading(false);\n return;\n }\n if (response.status === 204) {\n let errorShown = false;\n if (approvalResponse.ssl_result_message !== \"APPROVAL\") {\n showErrorSnack({\n body: approvalResponse.ssl_result_message,\n dispatch: snacksDispatch,\n duration: 10000,\n });\n errorShown = true;\n }\n if (approvalResponse.ssl_transaction_type !== \"SALE\") {\n showErrorSnack({\n body: `Invalid transaction type: ${approvalResponse.ssl_transaction_type}`,\n dispatch: snacksDispatch,\n duration: 10000,\n });\n errorShown = true;\n }\n if (approvalResponse.ssl_transaction_type !== \"SALE\") {\n showErrorSnack({\n body: `Invalid transaction type: ${approvalResponse.ssl_transaction_type}`,\n dispatch: snacksDispatch,\n duration: 10000,\n });\n errorShown = true;\n }\n const amountParts = approvalResponse.ssl_amount.split(\".\");\n if (\n amountParts.length !== 2 ||\n amountParts[1].length !== 2 ||\n isNaN(amountParts[1]) ||\n amountParts[0].length === 0 ||\n isNaN(amountParts[0]) ||\n amountParts[0] === 0\n ) {\n showErrorSnack({\n body: `Invalid amount: ${approvalResponse.ssl_amount}`,\n dispatch: snacksDispatch,\n duration: 10000,\n });\n errorShown = true;\n }\n if (isNaN(Date.parse(approvalResponse.ssl_txn_time))) {\n showErrorSnack({\n body: `Invalid transaction time: ${approvalResponse.ssl_txn_time}`,\n dispatch: snacksDispatch,\n duration: 10000,\n });\n errorShown = true;\n }\n if (!errorShown) {\n showErrorSnack({\n body: \"Unknown error\",\n dispatch: snacksDispatch,\n duration: 10000,\n });\n }\n setLoading(false);\n return;\n }\n const created =\n approvalResponse.ssl_txn_time + (dst() ? \" EDT\" : \" EST\");\n const timeReady = asap\n ? new Date(created)\n : new Date(specialTime);\n if (asap) {\n if (takeout) {\n timeReady.setMinutes(\n timeReady.getMinutes() + cookingTimeOffset\n );\n } else {\n timeReady.setMinutes(\n timeReady.getMinutes() +\n cookingTimeOffset +\n deliveryTimeOffset\n );\n }\n }\n saveOrder({\n dispatch: ordersDispatch,\n id: orderID,\n items: cart.items,\n name: orderName,\n paid: true,\n phoneNumber: orderPhoneNumber.replace(/\\D/g, \"\"),\n specialRequests,\n timePlaced: new Date(created),\n timeReady,\n total: approvalResponse.ssl_amount,\n transaction: approvalResponse.ssl_txn_id,\n transactionTime: new Date(approvalResponse.ssl_txn_time),\n ...(!takeout && {\n deliveryAddress,\n deliveryAddress2,\n deliveryCity,\n deliveryState,\n deliveryZip,\n }),\n });\n resetCart({ dispatch: cartDispatch });\n setLoading(false);\n history.push(`order/${orderID}`);\n } catch (error) {\n console.error(error);\n setLoading(false);\n return _cancelFetches;\n }\n setLoading(false);\n },\n onDeclined: (response) => {\n showErrorSnack({\n body: response.ssl_result_message,\n dispatch: snacksDispatch,\n duration: 10000,\n });\n setLoading(false);\n return;\n },\n onError: (error) => {\n // don't know shape of response, this callback never fires\n showErrorSnack({\n body: JSON.stringify(error, null, 2),\n dispatch: snacksDispatch,\n duration: 10000,\n });\n setLoading(false);\n return;\n },\n }\n );\n } catch (error) {\n console.error(error);\n setLoading(false);\n }\n }\n\n function _rateLimitDeliveryFeeCalculation() {\n if (!deliveryFeeCalculationRateLimited) {\n return;\n }\n let innerTimeout;\n const outerTimeout = setTimeout(() => {\n showInfoSnack({\n body: \"Calculating delivery fee\",\n dispatch: snacksDispatch,\n });\n _calculateDeliveryFee();\n setDeliveryFeeCalculationPending(false);\n innerTimeout = setTimeout(() => {\n setDeliveryFeeCalculationRateLimited(false);\n }, 10000);\n }, 10000);\n return () => {\n clearTimeout(outerTimeout);\n clearTimeout(innerTimeout);\n };\n }\n\n function _startTicking() {\n const timer = setInterval(_tick, 1000);\n return () => clearInterval(timer);\n }\n\n function _tick() {\n setOrderTime(new Date());\n }\n\n function _updateNowOpen() {\n setNowOpen(_nowOpen({ orderTime, takeout }));\n }\n\n function _validCCNumber(_, ok) {\n setValidCCNumber(ok);\n }\n\n function _validCVC({ cvc }) {\n return cvc.length === 3;\n }\n\n function _validDetails({ name, phoneNumber }) {\n const cleanPhoneNumber = phoneNumber.replace(/[(). -]/g, \"\");\n return (\n name.length >= 3 &&\n cleanPhoneNumber.length === 10 &&\n /^[0-9]+$/.test(cleanPhoneNumber)\n );\n }\n\n function _validExpiry({ expiry }) {\n const month = +expiry.slice(0, 2);\n if (month < 1 || month > 12) {\n return false;\n }\n const nowMonth = new Date().getMonth() + 1;\n const nowYear = new Date().getFullYear().toString().slice(-2);\n const year = +expiry.slice(-2);\n if (year < nowYear) {\n return false;\n }\n if (year === nowYear && month < nowMonth) {\n return false;\n }\n if (year - 20 > nowYear) {\n return false;\n }\n return true;\n }\n\n function _validOrder({ cart, specialTime, subtotal, takeout }) {\n if (\n !takeout &&\n subtotal < parseInt(process.env.REACT_APP_deliveryMinimumOrder)\n ) {\n return false;\n }\n let time = specialTime === undefined ? new Date() : new Date(specialTime);\n return (\n Object.keys(cart.items).length > 0 &&\n Object.keys(cart.items).every(\n (item) =>\n sections[dishes[item].section].addID === undefined ||\n cart.items[item].quantity ===\n Object.keys(cart.items[item].sides ?? []).reduce(\n (acc, side) => acc + cart.items[item].sides[side].quantity,\n 0\n )\n ) &&\n Object.keys(cart.items).every(\n (item) =>\n sections[dishes[item].section].hours === undefined ||\n sections[dishes[item].section].hours.some(\n ({\n endHour,\n endMinute,\n endWeekday,\n beginningHour,\n beginningMinute,\n beginningWeekday,\n }) =>\n (beginningWeekday < time.getDay() ||\n (beginningWeekday === time.getDay() &&\n beginningHour < time.getHours()) ||\n (beginningWeekday === time.getDay() &&\n beginningHour === time.getHours() &&\n beginningMinute <= time.getMinutes())) &&\n (endWeekday > time.getDay() ||\n (endWeekday === time.getDay() && endHour > time.getHours()) ||\n (endWeekday === time.getDay() &&\n endHour === time.getHours() &&\n endMinute >= time.getMinutes()))\n )\n )\n );\n }\n\n function _validPayment({ cash, cvc, expiry, name, validCCNumber }) {\n if (cash) {\n return true;\n }\n // not working\n // [\\x20-\\x7E\\xA0-\\xFF]\n // /^[\\x09\\x0A\\x0D\\x20-\\x7E\\xA0-\\xFF]*$/\n // https://stackoverflow.com/questions/13130419/validate-a-subgroup-of-iso-8859#comment52241763_13130455\n // console.log(/^[\\x09\\x0A\\x0D\\x20-\\x7E\\xA0-\\xFF]*$/.test(name));\n return (\n _validCVC({ cvc }) &&\n _validExpiry({ expiry }) &&\n name.length > 0 &&\n // /[^\\u0000-\\u00ff]/g.test(name) &&\n validCCNumber\n );\n }\n\n function _validSchedule({ asap, specialTime, takeout }) {\n let beginningTime = new Date();\n let endTime = new Date(beginningTime);\n if (!takeout) {\n if (!asap) {\n if (specialTime === undefined) {\n return false;\n }\n beginningTime = new Date(specialTime);\n endTime = new Date(specialTime);\n beginningTime.setMinutes(\n beginningTime.getMinutes() - (cookingTimeOffset + deliveryTimeOffset)\n );\n endTime.setMinutes(endTime.getMinutes() + deliveryTimeOffset);\n } else {\n endTime.setMinutes(\n endTime.getMinutes() + (cookingTimeOffset + deliveryTimeOffset)\n );\n }\n } else {\n if (!asap) {\n if (specialTime === undefined) {\n return false;\n }\n beginningTime = new Date(specialTime);\n endTime = new Date(specialTime);\n beginningTime.setMinutes(\n beginningTime.getMinutes() - cookingTimeOffset\n );\n } else {\n endTime.setMinutes(endTime.getMinutes() + cookingTimeOffset);\n }\n }\n return (\n !holidays.some(\n ({ beginning, end }) => beginning < beginningTime && end > endTime\n ) &&\n wrappedWeeklyHours.some(\n ({\n closeHour,\n closeMinute,\n closeWeekday,\n openHour,\n openMinute,\n openWeekday,\n }) =>\n (openWeekday < beginningTime.getDay() ||\n (openWeekday === beginningTime.getDay() &&\n openHour < beginningTime.getHours()) ||\n (openWeekday === beginningTime.getDay() &&\n openHour === beginningTime.getHours() &&\n openMinute <= beginningTime.getMinutes())) &&\n (closeWeekday > endTime.getDay() ||\n (closeWeekday === endTime.getDay() &&\n closeHour > endTime.getHours()) ||\n (closeWeekday === endTime.getDay() &&\n closeHour === endTime.getHours() &&\n closeMinute >= endTime.getMinutes()))\n )\n );\n }\n\n function _validType({\n debouncedDeliveryAddressModified,\n deliveryAddress,\n deliveryAddressModified,\n deliveryCity,\n deliveryFee,\n deliveryFeeCalculationPending,\n deliveryZip,\n forFeeCalculationIfNecessary = true,\n loading,\n } = {}) {\n if (takeout) {\n return true;\n }\n if (forFeeCalculationIfNecessary) {\n return (\n deliveryAddress.length > 3 &&\n deliveryCity.length !== 0 &&\n deliveryZip.length === 5 &&\n !isNaN(parseInt(deliveryZip))\n );\n }\n return (\n !loading &&\n !!deliveryFee &&\n deliveryAddressModified === debouncedDeliveryAddressModified &&\n !deliveryFeeCalculationPending\n );\n }\n\n function _validate() {\n setValid(\n !loading &&\n _validOrder({ cart, specialTime, subtotal, takeout }) &&\n _validSchedule({ asap, specialTime, takeout }) &&\n _validType({\n debouncedDeliveryAddressModified,\n deliveryAddress,\n deliveryAddressModified,\n deliveryCity,\n deliveryFee,\n deliveryFeeCalculationPending,\n deliveryZip,\n forFeeCalculationIfNecessary: false,\n loading,\n }) &&\n _validPayment({\n cash: !cardPayment,\n cvc: ccCVC,\n expiry: ccExpiry,\n name: ccName,\n validCCNumber,\n }) &&\n _validDetails({\n name: orderName,\n phoneNumber: orderPhoneNumber.replace(/\\D/g, \"\"),\n })\n );\n }\n}\n","import { useEffect } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport Div from \"./components/Div.js\";\n\nexport default function Fallback() {\n const history = useHistory();\n\n useEffect(_redirectToMenu);\n\n return (\n
    \n

    404

    \n Page not found. Redirecting to the menu...\n
    \n );\n\n function _redirectToMenu() {\n setTimeout(() => history.push(\"/menu\"), 2500);\n }\n}\n","import { useHistory, useRouteMatch } from \"react-router-dom\";\n\nimport { useMenu } from \"./MenuContext.js\";\nimport { useStyles } from \"./StylesContext.js\";\nimport Div from \"./components/Div.js\";\nimport Pressable from \"./components/Pressable.js\";\n\nexport default function MenuSectionRow({ id, name, nameChinese, note }) {\n\tconst { backgroundColorBody, colorBody, colorSecondary } = useStyles();\n\tconst history = useHistory();\n\tlet { path } = useRouteMatch();\n\tconst { sections } = useMenu();\n\n\treturn (\n\t\t history.push(`${path}/section/${id}`)}\n\t\t\touterStyle={{\n\t\t\t\tbackgroundColor: backgroundColorBody,\n\t\t\t\toverflowY: \"hidden\",\n\t\t\t}}\n\t\t\tpressScale={1.2}\n\t\t>\n\t\t\t\n\t\t\t\t{!!sections[id].picture && (\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t{name} \n\t\t\t\t\t\t\n\t\t\t\t\t\t\t({nameChinese})\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t{!!note && (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{note}\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","export default function Clear({\n backgroundColor = \"white\",\n color = \"black\",\n size = 48,\n}) {\n return (\n \n \n \n \n );\n}\n","export default function Search({\n backgroundColor = \"white\",\n color = \"black\",\n size = 48,\n}) {\n return (\n \n \n \n \n );\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport { useParams } from \"react-router-dom\";\n\nimport { useMenu } from \"./MenuContext.js\";\nimport SectionDishRow from \"./SectionDishRow.js\";\nimport { useStyles } from \"./StylesContext.js\";\nimport Clear from \"./assets/Clear.js\";\nimport Search from \"./assets/Search.js\";\nimport Div from \"./components/Div.js\";\nimport Pressable from \"./components/Pressable.js\";\nimport useDebounce from \"./lib/useDebounce.js\";\nimport useViewport from \"./lib/useViewport.js\";\n\nexport default function Section() {\n const { backgroundColorButton, colorButton, colorSecondary } = useStyles();\n const [candidates, setCandidates] = useState([]);\n const { dishes, dishTrigrams, sections } = useMenu();\n const { id: section } = useParams();\n const [query, setQuery] = useState(\"\");\n const searchInputNode = useRef(null);\n const { width } = useViewport();\n\n const debouncedQuery = useDebounce(query, 250);\n const { name, nameChinese, note } = sections[section];\n const options = [...Object.keys(dishes)]\n .filter((id) => dishes[id].section === section)\n .map((id) => ({\n id,\n name: sections[id]\n ? sections[id]?.name.toLowerCase().replace(/[^a-z]/g, \"\")\n : dishes[id]?.name.toLowerCase().replace(/[^a-z]/g, \"\"),\n }));\n\n useEffect(() => {\n if (debouncedQuery) {\n _fuzzyMatch({ query });\n }\n }, [debouncedQuery]);\n\n return (\n
    \n \n

    \n {name} ({nameChinese})\n

    \n {!!note && (\n

    \n {note}\n

    \n )}\n
    \n {query ? (\n \n {!!sections[section].picture && (\n \n )}\n \n {query.length < 3 ? (\n
    \n Please enter at least 3 letters to search{\" \"}\n {sections[section].name} dishes.\n
    \n ) : candidates.length === 0 ? (\n
    No results. Please try a different search.
    \n ) : (\n candidates\n .filter(([id]) => dishes[id]?.status === 1)\n .map(([id]) => )\n )}\n \n \n ) : (\n
    \n {Object.keys(dishes)\n .filter((dish) => dishes[dish]?.section === section)\n .filter((dish) => dishes[dish]?.status === 1)\n .map((dish) => (\n \n ))}\n
    \n )}\n \n setQuery(event.target.value)}\n placeholder={`Search for ${name} dish`}\n ref={searchInputNode}\n style={{\n display: \"flex\",\n flexBasis: 0,\n flexGrow: 1,\n fontSize: 24,\n paddingBottom: 12,\n paddingLeft: 16,\n paddingRight: 16,\n paddingTop: 12,\n width: width - 88,\n }}\n type=\"text\"\n value={query}\n />\n {\n if (query) {\n setCandidates([]);\n setQuery(\"\");\n }\n searchInputNode.current.focus();\n }}\n outerStyle={{\n backgroundColor: backgroundColorButton,\n padding: 16,\n }}\n >\n {query ? (\n \n ) : (\n \n )}\n \n \n \n );\n\n function _fuzzyMatch({ query }) {\n const formattedQuery = query.toLowerCase().replace(/[^a-z ]/g, \"\");\n if (formattedQuery.length < 3) {\n return;\n setCandidates(\n options.filter((option) =>\n option.name.toLowerCase().includes(formattedQuery)\n )\n // options.filter((option) => {\n // let j = -1;\n // for (let i = 0; i < formattedQuery.length; i++) {\n // let c = formattedQuery[i];\n // j = option.name.indexOf(c, j + 1);\n // if (j == -1) {\n // return false;\n // }\n // }\n // return true;\n // })\n );\n return;\n }\n let uniqueTrigrams = {};\n const terms = formattedQuery.split(\" \");\n for (let i = 0, tlen = terms.length; i < tlen; i++) {\n let trigrams = _trigrams({ term: terms[i] });\n for (const trigram in trigrams) {\n if (uniqueTrigrams[trigram] !== undefined) {\n uniqueTrigrams[trigram]++;\n continue;\n }\n uniqueTrigrams[trigram] = 1;\n }\n }\n let uniqueCandidates = {};\n for (const trigram in uniqueTrigrams) {\n const occurrences = uniqueTrigrams[trigram];\n let dt = dishTrigrams[trigram];\n if (dt === undefined) {\n continue;\n }\n for (\n let j = 0, dtLen = dt.length, candidate = dt[0];\n j < dtLen;\n candidate = dt[++j]\n ) {\n if (uniqueCandidates[candidate] !== undefined) {\n uniqueCandidates[candidate] += occurrences;\n continue;\n }\n if (dishes[candidate].section !== section) {\n continue;\n }\n uniqueCandidates[candidate] = occurrences;\n }\n }\n setCandidates(\n Object.entries(uniqueCandidates).sort((a, b) => {\n if (a[1] < b[1]) {\n return 1;\n }\n if (a[1] > b[1]) {\n return -1;\n }\n return 0;\n })\n );\n }\n\n function _trigrams({ term }) {\n const len = term.length;\n const trigrams = {};\n for (let i = 0; i < len - 2; i++) {\n trigrams[term.slice(i, i + 3)] = true;\n }\n return trigrams;\n }\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport { Route, Switch, useHistory, useRouteMatch } from \"react-router-dom\";\n\nimport { useMenu } from \"./MenuContext.js\";\nimport MenuSectionRow from \"./MenuSectionRow.js\";\nimport Section from \"./Section.js\";\nimport SectionDishRow from \"./SectionDishRow.js\";\nimport { useStyles } from \"./StylesContext.js\";\nimport Clear from \"./assets/Clear.js\";\nimport Search from \"./assets/Search.js\";\nimport Div from \"./components/Div.js\";\nimport Pressable from \"./components/Pressable.js\";\nimport useDebounce from \"./lib/useDebounce.js\";\nimport useViewport from \"./lib/useViewport.js\";\n\nexport default function Menu({ query, setQuery }) {\n const {\n backgroundColorBody,\n backgroundColorButton,\n colorBody,\n colorButton,\n colorSecondary,\n } = useStyles();\n const [candidates, setCandidates] = useState([]);\n const { dishes, dishTrigrams, sections, sectionTrigrams } = useMenu();\n const history = useHistory();\n const options = [...Object.keys(sections), ...Object.keys(dishes)].map(\n (id) => ({\n id,\n name: sections[id]\n ? sections[id]?.name.toLowerCase().replace(/[^a-z]/g, \"\")\n : dishes[id]?.name.toLowerCase().replace(/[^a-z]/g, \"\"),\n })\n );\n const searchInputNode = useRef(null);\n let { path } = useRouteMatch();\n const { width } = useViewport();\n\n const debouncedQuery = useDebounce(query, 250);\n\n useEffect(() => {\n if (debouncedQuery) {\n _fuzzyMatch({ query });\n }\n }, [debouncedQuery]);\n\n return (\n
    \n \n \n
    \n {query ? (\n \n {query.length < 3 ? (\n
    Enter at least 3 letters to search the menu.
    \n ) : candidates.length === 0 ? (\n
    No results. Please try a different search.
    \n ) : (\n candidates\n .filter(([id]) => !sections[id] && dishes[id]?.status === 1)\n .map(([id]) =>\n sections[id] ? (\n history.push(`${path}/section/${id}`)}\n outerStyle={{ backgroundColor: backgroundColorBody }}\n pressScale={1.2}\n >\n
    \n \n {sections[id].name} \n \n ({sections[id].nameChinese})\n \n
    \n {!!sections[id].note && (\n \n {sections[id].note}\n
    \n )}\n
    \n \n ) : (\n \n )\n )\n )}\n \n ) : (\n
    \n {Object.keys(sections).map((id) => (\n \n ))}\n
    \n )}\n \n setQuery(event.target.value)}\n onKeyPress={_blurOnEnter}\n placeholder=\"Search for section or dish\"\n ref={searchInputNode}\n style={{\n display: \"flex\",\n flexBasis: 0,\n flexGrow: 1,\n fontSize: 24,\n paddingBottom: 12,\n paddingLeft: 16,\n paddingRight: 16,\n paddingTop: 12,\n width: width - 88,\n }}\n type=\"text\"\n value={query}\n />\n {\n if (query) {\n setCandidates([]);\n setQuery(\"\");\n }\n searchInputNode.current.focus();\n }}\n outerStyle={{\n backgroundColor: backgroundColorButton,\n padding: 16,\n }}\n >\n {query ? (\n \n ) : (\n \n )}\n \n \n \n \n \n
    \n \n \n \n );\n\n function _blurOnEnter(event) {\n if (event.key !== \"Enter\") {\n return;\n }\n searchInputNode.current.blur();\n }\n\n function _fuzzyMatch({ query }) {\n const formattedQuery = query.toLowerCase().replace(/[^a-z ]/g, \"\");\n if (formattedQuery.length < 3) {\n return;\n setCandidates(\n options.filter((option) =>\n option.name.toLowerCase().includes(formattedQuery)\n )\n // options.filter((option) => {\n // let j = -1;\n // for (let i = 0; i < formattedQuery.length; i++) {\n // let c = formattedQuery[i];\n // j = option.name.indexOf(c, j + 1);\n // if (j == -1) {\n // return false;\n // }\n // }\n // return true;\n // })\n );\n return;\n }\n let uniqueTrigrams = {};\n const terms = formattedQuery.split(\" \");\n for (let i = 0, tlen = terms.length; i < tlen; i++) {\n let trigrams = _trigrams({ term: terms[i] });\n for (const trigram in trigrams) {\n if (uniqueTrigrams[trigram] !== undefined) {\n uniqueTrigrams[trigram]++;\n continue;\n }\n uniqueTrigrams[trigram] = 1;\n }\n }\n let uniqueCandidates = {};\n for (const trigram in uniqueTrigrams) {\n const occurrences = uniqueTrigrams[trigram];\n let st = sectionTrigrams[trigram];\n if (st !== undefined) {\n for (\n let i = 0, stLen = st.length, candidate = st[0];\n i < stLen;\n candidate = st[++i]\n ) {\n if (uniqueCandidates[candidate] !== undefined) {\n uniqueCandidates[candidate] += 10000 * occurrences;\n continue;\n }\n uniqueCandidates[candidate] = 10000 * occurrences;\n }\n }\n let dt = dishTrigrams[trigram];\n if (dt === undefined) {\n continue;\n }\n for (\n let j = 0, dtLen = dt.length, candidate = dt[0];\n j < dtLen;\n candidate = dt[++j]\n ) {\n if (uniqueCandidates[candidate] !== undefined) {\n uniqueCandidates[candidate] += occurrences;\n continue;\n }\n uniqueCandidates[candidate] = occurrences;\n }\n }\n setCandidates(\n Object.entries(uniqueCandidates).sort((a, b) => {\n if (a[1] < b[1]) {\n return 1;\n }\n if (a[1] > b[1]) {\n return -1;\n }\n return 0;\n })\n );\n }\n\n function _trigrams({ term }) {\n const len = term.length;\n const trigrams = {};\n for (let i = 0; i < len - 2; i++) {\n trigrams[term.slice(i, i + 3)] = true;\n }\n return trigrams;\n }\n}\n","import { useHistory, useLocation } from \"react-router-dom\";\n\nimport { useCart } from \"./CartContext.js\";\nimport { useMenu } from \"./MenuContext.js\";\nimport { useStyles } from \"./StylesContext.js\";\nimport Div from \"./components/Div.js\";\nimport Pressable from \"./components/Pressable.js\";\n\nexport default function NavBar({ clearQuery, queryLength }) {\n const [cart] = useCart();\n const { downloadIfStale } = useMenu();\n const {\n backgroundColorHeader,\n backgroundColorHeaderAlternate,\n colorHeader,\n colorHeaderAlternate,\n } = useStyles();\n const history = useHistory();\n const location = useLocation();\n\n return (\n \n {\n downloadIfStale();\n clearQuery();\n history.push(\"/menu\");\n }}\n outerStyle={{\n backgroundColor:\n location.pathname === \"/menu\" && queryLength === 0\n ? backgroundColorHeaderAlternate\n : backgroundColorHeader,\n flexBasis: 0,\n flexGrow: 1,\n padding: 16,\n textDecoration:\n location.pathname === \"/menu\" && queryLength === 0\n ? \"none\"\n : \"underline\",\n }}\n >\n Menu\n \n history.push(\"/cart\")}\n outerStyle={{\n backgroundColor:\n location.pathname === \"/cart\"\n ? backgroundColorHeaderAlternate\n : backgroundColorHeader,\n flexBasis: 0,\n flexGrow: 1,\n padding: 16,\n textDecoration: location.pathname === \"/cart\" ? \"none\" : \"underline\",\n }}\n >\n Cart\n {!!Object.keys(cart.items).length &&\n ` (${Object.keys(cart.items).reduce(\n (acc, cur) =>\n acc +\n (cart.items[cur].quantity ?? 0) +\n (cart.items[cur].secondaryQuantity ?? 0),\n 0\n )})`}\n \n history.push(\"/orders\")}\n outerStyle={{\n backgroundColor:\n location.pathname === \"/orders\"\n ? backgroundColorHeaderAlternate\n : backgroundColorHeader,\n flexBasis: 0,\n flexGrow: 1,\n padding: 16,\n textDecoration:\n location.pathname === \"/orders\" ? \"none\" : \"underline\",\n }}\n >\n Orders\n \n history.push(\"/about\")}\n outerStyle={{\n backgroundColor:\n location.pathname === \"/about\"\n ? backgroundColorHeaderAlternate\n : backgroundColorHeader,\n flexBasis: 0,\n flexGrow: 1,\n padding: 16,\n textDecoration: location.pathname === \"/about\" ? \"none\" : \"underline\",\n }}\n >\n About\n \n \n );\n}\n","import { useParams } from \"react-router-dom\";\n\nimport { useMenu } from \"./MenuContext.js\";\nimport { useOrders } from \"./OrdersContext.js\";\nimport { useStyles } from \"./StylesContext.js\";\nimport Div from \"./components/Div.js\";\n\nexport default function Orders() {\n const [orders] = useOrders();\n const { backgroundColorBody, colorBody } = useStyles();\n const { id } = useParams();\n const order = orders.orders.find((o) => o.id === id);\n const { dishes, sides } = useMenu();\n let nowish = new Date();\n nowish = nowish.setHours(nowish.getHours() + 2);\n\n return (\n \n

    Order: {id}

    \n {order?.timeReady.toLocaleString()}\n ${order?.total}\n {order?.timeReady > nowish && (\n {order?.paid ? \"Yes\" : \"No\"}\n )}\n {order?.name}\n \n ({order?.phoneNumber.substring(0, 3)}){\" \"}\n {order?.phoneNumber.substring(3, 6)} - {order?.phoneNumber.substring(6)}\n \n {!!order?.deliveryAddress && (\n \n {order?.deliveryAddress}\n
    \n {!!order?.deliveryAddress2 && order?.deliveryAddress2 &&
    }\n {order?.deliveryCity}, {order?.deliveryState} {order?.deliveryZip}\n
    \n )}\n {order?.timePlaced.toLocaleString()}\n {!!order?.specialRequests && (\n {order?.specialRequests}\n )}\n \n {!!order?.items &&\n Object.keys(order?.items)?.map((dishID) => (\n
    \n {!!order.items[dishID].quantity &&\n !!order.items[dishID].secondaryQuantity\n ? ` ${order.items[dishID].quantity} ${dishes[dishID].unit} & ${order.items[dishID].secondaryQuantity} ${dishes[dishID].secondaryUnit}`\n : !!order.items[dishID].secondaryQuantity\n ? `${order.items[dishID].secondaryQuantity} ${dishes[dishID].secondaryUnit}`\n : ` ${order.items[dishID].quantity} ${dishes[dishID].unit}`}\n  \n {dishes[dishID]?.name}\n {!!order.items[dishID].specialRequests && (\n
    \n {order.items[dishID].specialRequests}\n
    \n )}\n {!!order.items[dishID]?.sides &&\n Object.keys(order.items[dishID].sides).map((sideID) => (\n
    \n {`${order.items[dishID].sides[sideID].quantity} with ${sides[sideID].name}`}\n
    \n ))}\n
    \n ))}\n
    \n \n );\n}\n\nfunction Detail({ children, label }) {\n const { colorBody, colorSecondary } = useStyles();\n return (\n \n {label}: \n \n {children}\n \n \n );\n}\n\n// orders: [\n// ...state.orders,\n// {\n// deliveryAddress: action.payload.deliveryAddress,\n// deliveryAddress2: action.payload.deliveryAddress2,\n// deliveryCity: action.payload.deliveryCity,\n// deliveryState: action.payload.deliveryState,\n// deliveryZip: action.payload.deliveryZip,\n// id: action.payload.id,\n// items: action.payload.items,\n// name: action.payload.name,\n// phoneNumber: action.payload.phoneNumber,\n// specialRequests: action.payload.specialRequests,\n// timePlaced: action.payload.timePlaced,\n// timeReady: action.payload.timeReady,\n// total: action.payload.total,\n// transaction: action.payload.transaction,\n// transactionTime: action.payload.transactionTime,\n// },\n// ],\n// name: action.payload.name,\n// phoneNumber: action.payload.phoneNumber,\n// ...(delivery && {\n// deliveryAddress: action.payload.deliveryAddress,\n// deliveryAddress2: action.payload.deliveryAddress2,\n// deliveryCity: action.payload.deliveryCity,\n// deliveryState: action.payload.deliveryState,\n// deliveryZip: action.payload.deliveryZip,\n// }),\n","import { useHistory } from \"react-router-dom\";\n\nimport { useOrders } from \"./OrdersContext.js\";\nimport { useStyles } from \"./StylesContext.js\";\nimport Div from \"./components/Div.js\";\nimport Pressable from \"./components/Pressable.js\";\n\nexport default function Orders() {\n const [orders] = useOrders();\n const reversedOrders = orders.orders?.slice?.()?.reverse?.();\n\n return (\n
    \n \n Order History\n \n
    \n {reversedOrders?.map?.((order) => (\n \n ))}\n
    \n
    \n );\n}\n\nfunction OrderRow({ order }) {\n const { backgroundColorBody, colorBody, colorSecondary } = useStyles();\n const history = useHistory();\n const { id, timePlaced: placed, total } = order;\n\n return (\n \n history.push(`order/${order.id}`)}\n outerStyle={{\n backgroundColor: backgroundColorBody,\n paddingBottom: 16,\n paddingTop: 16,\n }}\n >\n {id}\n \n
    \n {placed.toLocaleString()}\n
    \n
    ${total}
    \n \n \n \n );\n}\n","export default function Error({\n backgroundColor = \"white\",\n color = \"black\",\n size = 48,\n}) {\n return (\n \n \n \n );\n}\n","export default function Warning({\n backgroundColor = \"white\",\n color = \"black\",\n size = 48,\n}) {\n return (\n \n \n \n );\n}\n","export default function Info({\n backgroundColor = \"white\",\n color = \"black\",\n size = 48,\n}) {\n return (\n \n \n \n \n );\n}\n","export default function Success({\n backgroundColor = \"white\",\n color = \"black\",\n size = 48,\n}) {\n return (\n \n \n \n \n );\n}\n","import { dismissSnack, useSnacks } from \"./SnacksContext.js\";\nimport { useStyles } from \"./StylesContext.js\";\nimport Error from \"./assets/Error.js\";\nimport Warning from \"./assets/Warning.js\";\nimport Info from \"./assets/Info.js\";\nimport Success from \"./assets/Success.js\";\nimport Div from \"./components/Div.js\";\nimport Pressable from \"./components/Pressable.js\";\nimport hsb from \"./lib/hsb.js\";\nimport useViewport from \"./lib/useViewport.js\";\n\nexport default function SnacksQueue() {\n const { backgroundColorBody, colorBody } = useStyles();\n const [snacks, snacksDispatch] = useSnacks();\n const { width } = useViewport();\n\n if (snacks.length === 0) {\n return null;\n }\n return (\n \n {snacks.map((message, index) => {\n if (!message.active) {\n return null;\n }\n return (\n \n {message.type === \"info\" ? (\n \n ) : message.type === \"success\" ? (\n \n ) : message.type === \"warning\" ? (\n \n ) : (\n \n )}\n \n {message.body}\n \n dismissSnack({ dispatch: snacksDispatch, index })}\n outerStyle={{ padding: 8 }}\n >\n ✕\n \n \n );\n })}\n \n );\n}\n","import React, { useState } from \"react\";\nimport { BrowserRouter as Router, Route, Switch } from \"react-router-dom\";\n\nimport About from \"./About.js\";\nimport Cart from \"./Cart.js\";\nimport { CartProvider } from \"./CartContext.js\";\nimport Checkout from \"./Checkout.js\";\nimport Fallback from \"./Fallback.js\";\nimport { HoursProvider } from \"./HoursContext.js\";\nimport Menu from \"./Menu.js\";\nimport { MenuProvider } from \"./MenuContext.js\";\nimport NavBar from \"./NavBar.js\";\nimport Order from \"./Order.js\";\nimport Orders from \"./Orders.js\";\nimport { OrdersProvider } from \"./OrdersContext.js\";\nimport { SnacksProvider } from \"./SnacksContext.js\";\nimport SnacksQueue from \"./SnacksQueue.js\";\nimport { StylesProvider, useStyles } from \"./StylesContext.js\";\nimport Div from \"./components/Div.js\";\nimport useViewport from \"./lib/useViewport.js\";\n\nexport default function ContextProviderWrapper() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nfunction App() {\n const {\n backgroundColorBody: backgroundColor,\n colorBody: color,\n } = useStyles();\n const { height, width } = useViewport();\n const [query, setQuery] = useState(\"\");\n return (\n
    \n \n setQuery(\"\")} queryLength={query.length} />\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n );\n}\n","const reportWebVitals = onPerfEntry => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport \"./index.css\";\nimport App from \"./App\";\nimport reportWebVitals from \"./reportWebVitals\";\n\nReactDOM.render(\n \n \n ,\n document.getElementById(\"root\")\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}