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

78 lines (77 loc) 3.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.menuReducer = exports.selectSoldOut = exports.selectMenu = exports.resetMenu = exports.fetchMenu = exports.MenuActionType = 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 = { categories: [], featured: [], favorites: [], recents: [], soldOut: [], error: null, loading: 'idle' }; var MenuActionType; (function (MenuActionType) { MenuActionType["FetchMenu"] = "menu/fetchMenu"; })(MenuActionType || (exports.MenuActionType = MenuActionType = {})); exports.fetchMenu = (0, toolkit_1.createAsyncThunk)(MenuActionType.FetchMenu, function (_a, _b) { return tslib_1.__awaiter(void 0, [_a, _b], void 0, function (_c, _d) { var _e, config, customer, orders, favs, _f, categories, soldOut, recents, favorites, featured, err_1; var revenueCenterId = _c.revenueCenterId, serviceType = _c.serviceType, requestedAt = _c.requestedAt; var getState = _d.getState, rejectWithValue = _d.rejectWithValue; return tslib_1.__generator(this, function (_g) { switch (_g.label) { case 0: _g.trys.push([0, 2, , 3]); _e = getState(), config = _e.config, customer = _e.customer; orders = customer.orders, favs = customer.favorites; return [4 /*yield*/, config.api.getMenu(revenueCenterId, serviceType, requestedAt)]; case 1: _f = _g.sent(), categories = _f.menu, soldOut = _f.sold_out_items; recents = (0, utils_1.makeRecentItems)(categories, soldOut, orders); favorites = (0, utils_1.makeFavoriteItems)(categories, soldOut, favs); featured = (0, utils_1.makeFeatured)(categories); return [2 /*return*/, { categories: categories, soldOut: soldOut, featured: featured, favorites: favorites, recents: recents }]; case 2: err_1 = _g.sent(); return [2 /*return*/, rejectWithValue(err_1)]; case 3: return [2 /*return*/]; } }); }); }); var menuSlice = (0, toolkit_1.createSlice)({ name: types_1.ReducerType.Menu, initialState: initialState, reducers: { resetMenu: function (state) { return state; } }, extraReducers: function (builder) { builder .addCase(exports.fetchMenu.fulfilled, function (state, action) { var _a = action.payload, categories = _a.categories, soldOut = _a.soldOut, featured = _a.featured, favorites = _a.favorites, recents = _a.recents; state.categories = categories; state.featured = featured; state.favorites = favorites; state.recents = recents; state.soldOut = soldOut; state.loading = 'idle'; state.error = null; }) .addCase(exports.fetchMenu.pending, function (state) { state.loading = 'pending'; }) .addCase(exports.fetchMenu.rejected, function (state, action) { state.error = action.payload; state.loading = 'idle'; }); } }); exports.resetMenu = menuSlice.actions.resetMenu; var selectMenu = function (state) { return state.menu; }; exports.selectMenu = selectMenu; var selectSoldOut = function (state) { return state.menu.soldOut; }; exports.selectSoldOut = selectSoldOut; exports.menuReducer = menuSlice.reducer;