UNPKG

@open-tender/store

Version:

A library of hooks, reducers, utility functions, and types for use with Open Tender applications that utilize our in-store POS API

320 lines (319 loc) 15.5 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.selectCartIds = exports.selectCart = exports.selectCurrentSection = exports.selectCurrentOption = exports.selectCurrentItem = exports.selectCurrentCategory = exports.selectCurrentVendor = exports.selectMenuVars = exports.selectMenuSlug = exports.selectRevenueCenterId = exports.selectRequestedAt = exports.selectServiceTypeName = exports.selectServiceType = exports.selectOrderTypeName = exports.selectOrderType = exports.selectMessages = exports.selectAlert = exports.selectOrder = exports.setOrderDeviceType = exports.removeMessage = exports.addMessage = exports.decrementItemInCart = exports.incrementItemInCart = exports.removeItemFromCart = exports.addItemToCart = exports.setCurrentSection = exports.setCurrentOption = exports.setCurrentItem = exports.setCurrentCategory = exports.setCurrentVendor = exports.setCart = exports.setMenuVars = exports.setOrderServiceType = exports.setPrepType = exports.setTable = exports.setRevenueCenterId = exports.setRequestedAt = exports.setServiceType = exports.setOrderType = exports.setOrderId = exports.setAlert = exports.resetAlert = exports.resetMessages = exports.resetCart = exports.resetLocation = exports.resetRevenueCenter = exports.resetOrderType = exports.resetOrder = exports.reorder = exports.OrderActionType = void 0; exports.orderReducer = exports.selectCartValidate = exports.selectCanOrder = exports.selectCartCounts = exports.selectCartTotals = exports.selectCartTotal = exports.selectCartQuantity = void 0; var tslib_1 = require("tslib"); var utils_1 = require("@open-tender/utils"); var toolkit_1 = require("@reduxjs/toolkit"); var types_1 = require("./types"); var initialState = { orderId: null, orderType: null, serviceType: null, revenueCenterId: null, table: null, prepType: null, requestedAt: 'asap', currentVendor: null, currentCategory: null, currentItem: null, currentOption: null, currentSection: null, cart: [], cartCounts: {}, messages: [], alert: null, error: null, loading: 'idle', deviceType: 'KIOSK' }; var OrderActionType; (function (OrderActionType) { OrderActionType["Reorder"] = "orders/reorder"; })(OrderActionType || (exports.OrderActionType = OrderActionType = {})); exports.reorder = (0, toolkit_1.createAsyncThunk)(OrderActionType.Reorder, function (orderCart_1, _a) { return tslib_1.__awaiter(void 0, [orderCart_1, _a], void 0, function (orderCart, _b) { var _c, config, order, revenueCenterId, serviceType, requestedAt, categories, menuItems, simpleCart, _d, cart, cartCounts, err_1; var getState = _b.getState, rejectWithValue = _b.rejectWithValue; return tslib_1.__generator(this, function (_e) { switch (_e.label) { case 0: _e.trys.push([0, 2, , 3]); _c = getState(), config = _c.config, order = _c.order; revenueCenterId = order.revenueCenterId || 0; serviceType = order.serviceType || 'WALKIN'; requestedAt = (0, utils_1.dateToIso)(new Date(), (0, utils_1.getUserTimezone)()); return [4 /*yield*/, config.api.getMenu(revenueCenterId, serviceType, requestedAt)]; case 1: categories = (_e.sent()).menu; menuItems = Object.values((0, utils_1.makeMenuItemLookup)(categories)); simpleCart = (0, utils_1.makeSimpleCart)(orderCart); _d = (0, utils_1.rehydrateCart)(menuItems, simpleCart), cart = _d.cart, cartCounts = _d.cartCounts; return [2 /*return*/, { cart: cart, cartCounts: cartCounts }]; case 2: err_1 = _e.sent(); return [2 /*return*/, rejectWithValue(err_1)]; case 3: return [2 /*return*/]; } }); }); }); var orderSlice = (0, toolkit_1.createSlice)({ name: types_1.ReducerType.Orders, initialState: initialState, reducers: { resetOrder: function () { return initialState; }, resetOrderType: function (state) { state.orderId = null; state.orderType = null; state.serviceType = null; state.prepType = null; state.revenueCenterId = null; state.table = null; state.requestedAt = 'asap'; }, resetRevenueCenter: function (state) { state.revenueCenterId = null; }, resetLocation: function (state) { state.revenueCenterId = null; }, resetCart: function (state) { state.cart = []; state.cartCounts = {}; }, resetMessages: function (state) { state.messages = []; }, resetAlert: function (state) { state.alert = null; }, setAlert: function (state, action) { state.alert = action.payload; }, setOrderId: function (state, action) { state.orderId = action.payload; }, setOrderType: function (state, action) { state.orderType = action.payload; }, setServiceType: function (state, action) { state.serviceType = action.payload; }, setRequestedAt: function (state, action) { state.requestedAt = action.payload; }, setRevenueCenterId: function (state, action) { state.revenueCenterId = action.payload; }, setTable: function (state, action) { state.table = action.payload; }, setPrepType: function (state, action) { state.prepType = action.payload; }, setOrderServiceType: function (state, action) { var _a = action.payload, orderType = _a.orderType, serviceType = _a.serviceType; state.orderType = orderType; state.serviceType = serviceType; }, setMenuVars: function (state, action) { var _a = action.payload, revenueCenterId = _a.revenueCenterId, serviceType = _a.serviceType, requestedAt = _a.requestedAt; state.revenueCenterId = revenueCenterId; state.serviceType = serviceType; state.requestedAt = requestedAt; }, setCart: function (state, action) { state.cart = action.payload; state.cartCounts = (0, utils_1.calcCartCounts)(action.payload); }, setCurrentVendor: function (state, action) { state.currentVendor = action.payload; }, setCurrentCategory: function (state, action) { state.currentCategory = action.payload; }, setCurrentItem: function (state, action) { state.currentItem = action.payload; }, setCurrentOption: function (state, action) { state.currentOption = action.payload; }, setCurrentSection: function (state, action) { state.currentSection = action.payload; }, setOrderDeviceType: function (state, action) { state.deviceType = action.payload; }, addItemToCart: function (state, action) { var _a = (0, utils_1.addItem)(tslib_1.__spreadArray([], state.cart, true), action.payload), cart = _a.cart, cartCounts = _a.cartCounts; state.cart = cart; state.cartCounts = cartCounts; }, removeItemFromCart: function (state, action) { var index = action.payload.index; var _a = (0, utils_1.removeItem)(tslib_1.__spreadArray([], state.cart, true), index), cart = _a.cart, cartCounts = _a.cartCounts; state.cart = cart; state.cartCounts = cartCounts; }, incrementItemInCart: function (state, action) { var index = action.payload.index; var _a = (0, utils_1.incrementItem)(tslib_1.__spreadArray([], state.cart, true), index), cart = _a.cart, cartCounts = _a.cartCounts; state.cart = cart; state.cartCounts = cartCounts; }, decrementItemInCart: function (state, action) { var index = action.payload.index; var _a = (0, utils_1.decrementItem)(tslib_1.__spreadArray([], state.cart, true), index), cart = _a.cart, cartCounts = _a.cartCounts; state.cart = cart; state.cartCounts = cartCounts; }, addMessage: function (state, action) { var existing = state.messages.map(function (i) { return i.message; }); if (!existing.includes(action.payload)) { state.messages = tslib_1.__spreadArray(tslib_1.__spreadArray([], state.messages, true), [ { message: action.payload, id: (0, utils_1.makeRandomNumberString)() } ], false); } }, removeMessage: function (state, action) { state.messages = state.messages.filter(function (i) { return i.id !== action.payload; }); } }, extraReducers: function (builder) { builder .addCase(exports.reorder.fulfilled, function (state, action) { state.cart = action.payload.cart; state.cartCounts = action.payload.cartCounts; state.serviceType = 'WALKIN'; state.orderType = 'OLO'; state.prepType = 'EAT_HERE'; state.loading = 'idle'; state.error = null; }) .addCase(exports.reorder.pending, function (state) { state.loading = 'pending'; }) .addCase(exports.reorder.rejected, function (state, action) { state.error = action.payload; state.loading = 'idle'; }); } }); exports.resetOrder = (_a = orderSlice.actions, _a.resetOrder), exports.resetOrderType = _a.resetOrderType, exports.resetRevenueCenter = _a.resetRevenueCenter, exports.resetLocation = _a.resetLocation, exports.resetCart = _a.resetCart, exports.resetMessages = _a.resetMessages, exports.resetAlert = _a.resetAlert, exports.setAlert = _a.setAlert, exports.setOrderId = _a.setOrderId, exports.setOrderType = _a.setOrderType, exports.setServiceType = _a.setServiceType, exports.setRequestedAt = _a.setRequestedAt, exports.setRevenueCenterId = _a.setRevenueCenterId, exports.setTable = _a.setTable, exports.setPrepType = _a.setPrepType, exports.setOrderServiceType = _a.setOrderServiceType, exports.setMenuVars = _a.setMenuVars, exports.setCart = _a.setCart, exports.setCurrentVendor = _a.setCurrentVendor, exports.setCurrentCategory = _a.setCurrentCategory, exports.setCurrentItem = _a.setCurrentItem, exports.setCurrentOption = _a.setCurrentOption, exports.setCurrentSection = _a.setCurrentSection, exports.addItemToCart = _a.addItemToCart, exports.removeItemFromCart = _a.removeItemFromCart, exports.incrementItemInCart = _a.incrementItemInCart, exports.decrementItemInCart = _a.decrementItemInCart, exports.addMessage = _a.addMessage, exports.removeMessage = _a.removeMessage, exports.setOrderDeviceType = _a.setOrderDeviceType; var selectOrder = function (state) { return state.order; }; exports.selectOrder = selectOrder; var selectAlert = function (state) { return state.order.alert; }; exports.selectAlert = selectAlert; var selectMessages = function (state) { return state.order.messages; }; exports.selectMessages = selectMessages; var selectOrderType = function (state) { return state.order.orderType; }; exports.selectOrderType = selectOrderType; var selectOrderTypeName = function (state) { return utils_1.orderTypeNamesMap[state.order.orderType]; }; exports.selectOrderTypeName = selectOrderTypeName; var selectServiceType = function (state) { return state.order.serviceType; }; exports.selectServiceType = selectServiceType; var selectServiceTypeName = function (state) { return utils_1.serviceTypeNamesMap[state.order.serviceType]; }; exports.selectServiceTypeName = selectServiceTypeName; var selectRequestedAt = function (state) { return state.order.requestedAt === 'asap' ? 'ASAP' : state.order.requestedAt; }; exports.selectRequestedAt = selectRequestedAt; var selectRevenueCenterId = function (state) { return state.order.revenueCenterId; }; exports.selectRevenueCenterId = selectRevenueCenterId; var selectMenuSlug = function (state) { var slug = (state.config.store || {}).slug; return slug ? "/menu/".concat(slug) : '/'; }; exports.selectMenuSlug = selectMenuSlug; var selectMenuVars = function (state) { return { revenueCenterId: state.order.revenueCenterId, serviceType: state.order.serviceType, requestedAt: state.order.requestedAt }; }; exports.selectMenuVars = selectMenuVars; var selectCurrentVendor = function (state) { return state.order.currentVendor; }; exports.selectCurrentVendor = selectCurrentVendor; var selectCurrentCategory = function (state) { return state.order.currentCategory; }; exports.selectCurrentCategory = selectCurrentCategory; var selectCurrentItem = function (state) { return state.order.currentItem; }; exports.selectCurrentItem = selectCurrentItem; var selectCurrentOption = function (state) { return state.order.currentOption; }; exports.selectCurrentOption = selectCurrentOption; var selectCurrentSection = function (state) { return state.order.currentSection; }; exports.selectCurrentSection = selectCurrentSection; var selectCart = function (state) { return state.order.cart; }; exports.selectCart = selectCart; exports.selectCartIds = (0, toolkit_1.createSelector)(function (state) { var cart = state.order.cart; return cart; }, function (cart) { if (!cart) return []; return cart.map(function (i) { return i.id; }); }); exports.selectCartQuantity = (0, toolkit_1.createSelector)(function (state) { var cart = state.order.cart; return cart; }, function (cart) { if (!cart) return 0; return cart.reduce(function (t, i) { return (t += i.quantity); }, 0); }); exports.selectCartTotal = (0, toolkit_1.createSelector)(function (state) { var cart = state.order.cart; return cart; }, function (cart) { if (!cart) return 0.0; return cart.reduce(function (t, i) { return (t += i.totalPrice || 0); }, 0.0); }); exports.selectCartTotals = (0, toolkit_1.createSelector)(function (state) { var cart = state.order.cart; return cart; }, function (cart) { if (!cart) return { count: 0, total: 0.0 }; var count = cart.reduce(function (t, i) { return (t += i.quantity); }, 0); var total = cart.reduce(function (t, i) { return (t += i.totalPrice || 0); }, 0.0); return { count: count, total: total }; }); var selectCartCounts = function (state) { return state.order.cartCounts || {}; }; exports.selectCartCounts = selectCartCounts; var selectCanOrder = function (state) { return state.order.revenueCenterId && state.order.serviceType && state.order.requestedAt; }; exports.selectCanOrder = selectCanOrder; var selectCartValidate = function (state) { var _a = state.order || {}, revenueCenterId = _a.revenueCenterId, serviceType = _a.serviceType, requestedAt = _a.requestedAt, cart = _a.cart; return { revenueCenterId: revenueCenterId, serviceType: serviceType, requestedAt: requestedAt, cart: cart }; }; exports.selectCartValidate = selectCartValidate; exports.orderReducer = orderSlice.reducer;