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

609 lines (608 loc) 26.8 kB
var _a; import { __assign, __awaiter, __generator } from "tslib"; import { currentLocalDate, isoToDate, timezoneMap } from '@open-tender/utils'; import { createAsyncThunk, createSlice } from '@reduxjs/toolkit'; import { // currentLocalDate, filterOrdersToday, makeItemCounts, makeKdsOrder, makeKdsOrders, makeKdsStationCounts, makeOrdersForPrepStation, makeOrdersParams, notDone // timezoneMap } from '../utils'; import { addAlert } from './alerts'; import { ReducerType } from './types'; var initialState = { terminalId: null, itemTypes: null, prepStations: [], prepStationId: null, orderType: 'CURRENT', columns: 4, boxes: 8, cardWidth: 320, fontSize: 'medium', colorScheme: 'dark', view: null, page: 1, search: null, businessDate: null, summary: true, allDay: false, allDayMods: false, orders: [], loading: 'idle', error: null, order: null, counts: { current: null, future: null, qa: null }, stationCounts: null }; export var KdsActionType; (function (KdsActionType) { KdsActionType["FetchKdsOrders"] = "kds/fetchKdsOrders"; KdsActionType["UpdateKdsOrder"] = "kds/updateKdsOrder"; KdsActionType["PrintKdsOrder"] = "kds/printKdsOrder"; KdsActionType["PrintTickets"] = "kds/printTickets"; KdsActionType["ResetTickets"] = "kds/resetTickets"; KdsActionType["PrintTicket"] = "kds/printTicket"; KdsActionType["UpdateTicket"] = "kds/updateTicket"; KdsActionType["ResetTicket"] = "kds/resetTicket"; KdsActionType["DoneTicket"] = "kds/doneTicket"; KdsActionType["CompleteTicket"] = "kds/completeTicket"; })(KdsActionType || (KdsActionType = {})); export var fetchKdsOrders = createAsyncThunk(KdsActionType.FetchKdsOrders, function (params_1, _a) { return __awaiter(void 0, [params_1, _a], void 0, function (params, _b) { var api, args, orders, ordersKds, prepStations, stationCounts, err_1; var getState = _b.getState, rejectWithValue = _b.rejectWithValue; return __generator(this, function (_c) { switch (_c.label) { case 0: _c.trys.push([0, 2, , 3]); api = getState().config.api; args = makeOrdersParams(params); return [4 /*yield*/, api.getOrders(args)]; case 1: orders = _c.sent(); ordersKds = makeKdsOrders(orders); prepStations = getState().kds.prepStations; stationCounts = prepStations ? makeKdsStationCounts(ordersKds, prepStations) : null; // const itemTypes = getState().kds.itemTypes // const counts = makeKdsCounts(itemTypes, ordersKds) return [2 /*return*/, { orders: ordersKds, stationCounts: stationCounts }]; case 2: err_1 = _c.sent(); return [2 /*return*/, rejectWithValue(err_1)]; case 3: return [2 /*return*/]; } }); }); }); export var updateKdsOrder = createAsyncThunk(KdsActionType.UpdateKdsOrder, function (_a, _b) { return __awaiter(void 0, [_a, _b], void 0, function (_c, _d) { var api, order, err_2, detail; var orderId = _c.orderId, data = _c.data; var getState = _d.getState, dispatch = _d.dispatch; return __generator(this, function (_e) { switch (_e.label) { case 0: _e.trys.push([0, 2, , 3]); api = getState().config.api; return [4 /*yield*/, api.patchOrder(orderId, data)]; case 1: order = _e.sent(); dispatch(replaceKdsOrder(makeKdsOrder(order))); return [3 /*break*/, 3]; case 2: err_2 = _e.sent(); detail = err_2.detail; dispatch(addAlert(detail)); return [3 /*break*/, 3]; case 3: return [2 /*return*/]; } }); }); }); export var printKdsOrder = createAsyncThunk(KdsActionType.PrintKdsOrder, function (orderId_1, _a) { return __awaiter(void 0, [orderId_1, _a], void 0, function (orderId, _b) { var api, order, err_3, detail; var getState = _b.getState, dispatch = _b.dispatch; return __generator(this, function (_c) { switch (_c.label) { case 0: _c.trys.push([0, 2, , 3]); api = getState().config.api; return [4 /*yield*/, api.postReceipt(orderId)]; case 1: order = _c.sent(); dispatch(replaceKdsOrder(makeKdsOrder(order))); return [3 /*break*/, 3]; case 2: err_3 = _c.sent(); detail = err_3.detail; dispatch(addAlert(detail)); return [3 /*break*/, 3]; case 3: return [2 /*return*/]; } }); }); }); export var printTickets = createAsyncThunk(KdsActionType.PrintTickets, function (_a, _b) { return __awaiter(void 0, [_a, _b], void 0, function (_c, _d) { var api, statusUpdate, data, order, err_4, detail; var orderId = _c.orderId, ticketNos = _c.ticketNos, status = _c.status; var getState = _d.getState, dispatch = _d.dispatch; return __generator(this, function (_e) { switch (_e.label) { case 0: _e.trys.push([0, 2, , 3]); api = getState().config.api; statusUpdate = status ? { ticket_status: status } : {}; data = ticketNos ? __assign(__assign({}, statusUpdate), { ticket_nos: ticketNos }) : statusUpdate; return [4 /*yield*/, api.postTicketsPrint(orderId, data)]; case 1: order = _e.sent(); dispatch(replaceKdsOrder(makeKdsOrder(order))); return [3 /*break*/, 3]; case 2: err_4 = _e.sent(); detail = err_4.detail; dispatch(addAlert(detail)); return [3 /*break*/, 3]; case 3: return [2 /*return*/]; } }); }); }); export var updateTickets = createAsyncThunk(KdsActionType.PrintTickets, function (_a, _b) { return __awaiter(void 0, [_a, _b], void 0, function (_c, _d) { var api, statusUpdate, data, order, err_5, detail; var orderId = _c.orderId, ticketNos = _c.ticketNos, status = _c.status; var getState = _d.getState, dispatch = _d.dispatch; return __generator(this, function (_e) { switch (_e.label) { case 0: _e.trys.push([0, 2, , 3]); api = getState().config.api; statusUpdate = { ticket_status: status }; data = ticketNos ? __assign(__assign({}, statusUpdate), { ticket_nos: ticketNos }) : statusUpdate; return [4 /*yield*/, api.putTicketsStatus(orderId, data)]; case 1: order = _e.sent(); dispatch(replaceKdsOrder(makeKdsOrder(order))); return [3 /*break*/, 3]; case 2: err_5 = _e.sent(); detail = err_5.detail; dispatch(addAlert(detail)); return [3 /*break*/, 3]; case 3: return [2 /*return*/]; } }); }); }); export var resetTickets = createAsyncThunk(KdsActionType.ResetTickets, function (orderId_1, _a) { return __awaiter(void 0, [orderId_1, _a], void 0, function (orderId, _b) { var api, order, err_6, detail; var getState = _b.getState, dispatch = _b.dispatch; return __generator(this, function (_c) { switch (_c.label) { case 0: _c.trys.push([0, 2, , 3]); api = getState().config.api; return [4 /*yield*/, api.postTicketsReset(orderId)]; case 1: order = _c.sent(); dispatch(replaceKdsOrder(makeKdsOrder(order))); return [3 /*break*/, 3]; case 2: err_6 = _c.sent(); detail = err_6.detail; dispatch(addAlert(detail)); return [3 /*break*/, 3]; case 3: return [2 /*return*/]; } }); }); }); export var printTicket = createAsyncThunk(KdsActionType.PrintTicket, function (_a, _b) { return __awaiter(void 0, [_a, _b], void 0, function (_c, _d) { var api, data, order, err_7, detail; var orderId = _c.orderId, ticketNo = _c.ticketNo, status = _c.status; var getState = _d.getState, dispatch = _d.dispatch; return __generator(this, function (_e) { switch (_e.label) { case 0: _e.trys.push([0, 2, , 3]); api = getState().config.api; data = status ? { ticket_status: status } : undefined; return [4 /*yield*/, api.postTicketPrint(orderId, ticketNo, data)]; case 1: order = _e.sent(); dispatch(replaceKdsOrder(makeKdsOrder(order))); return [3 /*break*/, 3]; case 2: err_7 = _e.sent(); detail = err_7.detail; dispatch(addAlert(detail)); return [3 /*break*/, 3]; case 3: return [2 /*return*/]; } }); }); }); export var updateTicket = createAsyncThunk(KdsActionType.UpdateTicket, function (_a, _b) { return __awaiter(void 0, [_a, _b], void 0, function (_c, _d) { var api, data, order, err_8, detail; var orderId = _c.orderId, ticketNo = _c.ticketNo, status = _c.status; var getState = _d.getState, dispatch = _d.dispatch; return __generator(this, function (_e) { switch (_e.label) { case 0: _e.trys.push([0, 2, , 3]); api = getState().config.api; data = status ? { ticket_status: status } : undefined; return [4 /*yield*/, api.putTicketStatus(orderId, ticketNo, data)]; case 1: order = _e.sent(); dispatch(replaceKdsOrder(makeKdsOrder(order))); return [3 /*break*/, 3]; case 2: err_8 = _e.sent(); detail = err_8.detail; dispatch(addAlert(detail)); return [3 /*break*/, 3]; case 3: return [2 /*return*/]; } }); }); }); export var resetTicket = createAsyncThunk(KdsActionType.ResetTicket, function (_a, _b) { return __awaiter(void 0, [_a, _b], void 0, function (_c, _d) { var api, order, err_9, detail; var orderId = _c.orderId, ticketNo = _c.ticketNo; var getState = _d.getState, dispatch = _d.dispatch; return __generator(this, function (_e) { switch (_e.label) { case 0: _e.trys.push([0, 2, , 3]); api = getState().config.api; return [4 /*yield*/, api.postTicketStatus(orderId, ticketNo, 'reset')]; case 1: order = _e.sent(); dispatch(replaceKdsOrder(makeKdsOrder(order))); return [3 /*break*/, 3]; case 2: err_9 = _e.sent(); detail = err_9.detail; dispatch(addAlert(detail)); return [3 /*break*/, 3]; case 3: return [2 /*return*/]; } }); }); }); export var doneTicket = createAsyncThunk(KdsActionType.DoneTicket, function (_a, _b) { return __awaiter(void 0, [_a, _b], void 0, function (_c, _d) { var api, order, err_10, detail; var orderId = _c.orderId, ticketNo = _c.ticketNo; var getState = _d.getState, dispatch = _d.dispatch; return __generator(this, function (_e) { switch (_e.label) { case 0: _e.trys.push([0, 2, , 3]); api = getState().config.api; return [4 /*yield*/, api.postTicketStatus(orderId, ticketNo, 'done')]; case 1: order = _e.sent(); dispatch(replaceKdsOrder(makeKdsOrder(order))); return [3 /*break*/, 3]; case 2: err_10 = _e.sent(); detail = err_10.detail; dispatch(addAlert(detail)); return [3 /*break*/, 3]; case 3: return [2 /*return*/]; } }); }); }); export var completeTicket = createAsyncThunk(KdsActionType.CompleteTicket, function (_a, _b) { return __awaiter(void 0, [_a, _b], void 0, function (_c, _d) { var api, order, err_11, detail; var orderId = _c.orderId, ticketNo = _c.ticketNo; var getState = _d.getState, dispatch = _d.dispatch; return __generator(this, function (_e) { switch (_e.label) { case 0: _e.trys.push([0, 2, , 3]); api = getState().config.api; return [4 /*yield*/, api.postTicketStatus(orderId, ticketNo, 'completed')]; case 1: order = _e.sent(); dispatch(replaceKdsOrder(makeKdsOrder(order))); return [3 /*break*/, 3]; case 2: err_11 = _e.sent(); detail = err_11.detail; dispatch(addAlert(detail)); return [3 /*break*/, 3]; case 3: return [2 /*return*/]; } }); }); }); var kdsSlice = createSlice({ name: ReducerType.Kds, initialState: initialState, reducers: { resetkds: function () { return initialState; }, setKdsTerminalId: function (state, action) { state.terminalId = action.payload; }, setKdsItemTypes: function (state, action) { state.itemTypes = action.payload; }, setKdsPrepStations: function (state, action) { state.prepStations = action.payload; }, setKdsPrepStationId: function (state, action) { state.prepStationId = action.payload; }, setKdsOrderType: function (state, action) { state.orderType = action.payload; }, setKdsColumns: function (state, action) { state.columns = action.payload; }, setKdsBoxes: function (state, action) { state.boxes = action.payload; }, setKdsCardWidth: function (state, action) { state.cardWidth = action.payload; }, setKdsFontSize: function (state, action) { state.fontSize = action.payload; }, setKdsColorScheme: function (state, action) { state.colorScheme = action.payload; }, setKdsPage: function (state, action) { state.page = action.payload; }, setKdsView: function (state, action) { state.view = action.payload; }, setKdsBusinessDate: function (state, action) { state.businessDate = action.payload; }, setKdsSearch: function (state, action) { state.search = action.payload; }, toggleKdsSummary: function (state) { state.summary = !state.summary; }, toggleKdsAllDay: function (state) { state.allDay = !state.allDay; }, toggleKdsAllDayMods: function (state) { state.allDayMods = !state.allDayMods; }, setKdsOrder: function (state, action) { state.order = action.payload; }, replaceKdsOrder: function (state, action) { var updated = action.payload; var tz = timezoneMap[updated.timezone]; var updatedOrders = state.orders .map(function (i) { return i.order_uuid === updated.order_uuid ? updated : i; }) .filter(function (i) { var _a; return (_a = i.order_prep) === null || _a === void 0 ? void 0 : _a.fire_at; }); var orders = updatedOrders .map(function (i) { var _a; return (__assign(__assign({}, i), { fireAt: ((_a = i.order_prep) === null || _a === void 0 ? void 0 : _a.fire_at) ? isoToDate(i.order_prep.fire_at, tz) : new Date() })); }) .sort(function (a, b) { return a.fireAt.getTime() - b.fireAt.getTime(); }); // const counts = makeKdsCounts(state.itemTypes, orders) var stationCounts = makeKdsStationCounts(updatedOrders, state.prepStations || []); var order = state.order ? updated : null; return __assign(__assign({}, state), { orders: orders, order: order, stationCounts: stationCounts }); } }, extraReducers: function (builder) { builder .addCase(fetchKdsOrders.fulfilled, function (state, action) { var _a = action.payload, orders = _a.orders, stationCounts = _a.stationCounts; state.orders = orders; state.stationCounts = stationCounts; state.loading = 'idle'; state.error = null; }) .addCase(fetchKdsOrders.pending, function (state) { state.loading = 'pending'; }) .addCase(fetchKdsOrders.rejected, function (state, action) { state.error = action.payload; state.loading = 'idle'; }) .addCase(updateKdsOrder.fulfilled, function (state) { state.loading = 'idle'; state.error = null; }) .addCase(updateKdsOrder.pending, function (state) { state.loading = 'pending'; }) .addCase(updateKdsOrder.rejected, function (state) { state.loading = 'idle'; }) .addCase(printKdsOrder.fulfilled, function (state) { state.loading = 'idle'; state.error = null; }) .addCase(printKdsOrder.pending, function (state) { state.loading = 'pending'; }) .addCase(printKdsOrder.rejected, function (state) { state.loading = 'idle'; }) .addCase(printTickets.fulfilled, function (state) { state.loading = 'idle'; state.error = null; }) .addCase(printTickets.pending, function (state) { state.loading = 'pending'; }) .addCase(printTickets.rejected, function (state) { state.loading = 'idle'; }) .addCase(resetTickets.fulfilled, function (state) { state.loading = 'idle'; state.error = null; }) .addCase(resetTickets.pending, function (state) { state.loading = 'pending'; }) .addCase(resetTickets.rejected, function (state) { state.loading = 'idle'; }) .addCase(printTicket.fulfilled, function (state) { state.loading = 'idle'; state.error = null; }) .addCase(printTicket.pending, function (state) { state.loading = 'pending'; }) .addCase(printTicket.rejected, function (state) { state.loading = 'idle'; }) .addCase(updateTicket.fulfilled, function (state) { state.loading = 'idle'; state.error = null; }) .addCase(updateTicket.pending, function (state) { state.loading = 'pending'; }) .addCase(updateTicket.rejected, function (state) { state.loading = 'idle'; }) .addCase(resetTicket.fulfilled, function (state) { state.loading = 'idle'; state.error = null; }) .addCase(resetTicket.pending, function (state) { state.loading = 'pending'; }) .addCase(resetTicket.rejected, function (state) { state.loading = 'idle'; }) .addCase(doneTicket.fulfilled, function (state) { state.loading = 'idle'; state.error = null; }) .addCase(doneTicket.pending, function (state) { state.loading = 'pending'; }) .addCase(doneTicket.rejected, function (state) { state.loading = 'idle'; }) .addCase(completeTicket.fulfilled, function (state) { state.loading = 'idle'; state.error = null; }) .addCase(completeTicket.pending, function (state) { state.loading = 'pending'; }) .addCase(completeTicket.rejected, function (state) { state.loading = 'idle'; }); } }); export var resetkds = (_a = kdsSlice.actions, _a.resetkds), setKdsTerminalId = _a.setKdsTerminalId, setKdsItemTypes = _a.setKdsItemTypes, setKdsPrepStations = _a.setKdsPrepStations, setKdsPrepStationId = _a.setKdsPrepStationId, setKdsOrderType = _a.setKdsOrderType, setKdsColumns = _a.setKdsColumns, setKdsBoxes = _a.setKdsBoxes, setKdsCardWidth = _a.setKdsCardWidth, setKdsFontSize = _a.setKdsFontSize, setKdsColorScheme = _a.setKdsColorScheme, setKdsPage = _a.setKdsPage, setKdsView = _a.setKdsView, setKdsBusinessDate = _a.setKdsBusinessDate, setKdsSearch = _a.setKdsSearch, toggleKdsSummary = _a.toggleKdsSummary, toggleKdsAllDay = _a.toggleKdsAllDay, toggleKdsAllDayMods = _a.toggleKdsAllDayMods, setKdsOrder = _a.setKdsOrder, replaceKdsOrder = _a.replaceKdsOrder; export var selectKds = function (state) { return state.kds; }; export var selectKdsTerminal = function (state) { var terminalId = state.kds.terminalId; if (!terminalId || !state.config.devices) return null; var kds_terminals = state.config.devices.kds_terminals; return kds_terminals.find(function (i) { return i.kds_terminal_id === terminalId; }); }; export var selectKdsItemTypes = function (state) { return state.kds.itemTypes; }; export var selectKdsPrepStations = function (state) { return state.kds.prepStations; }; export var selectKdsPrepStationId = function (state) { return state.kds.prepStationId; }; export var selectKdsPrepStation = function (state) { var _a; var _b = state.kds, prepStations = _b.prepStations, prepStationId = _b.prepStationId; return (_a = prepStations === null || prepStations === void 0 ? void 0 : prepStations.find(function (i) { return i.prep_station_id === prepStationId; })) !== null && _a !== void 0 ? _a : null; }; export var selectKdsPrepType = function (state) { var prepStation = selectKdsPrepStation(state); return prepStation ? prepStation.prep_type : null; }; export var selectKdsOrderType = function (state) { return state.kds.orderType; }; export var selectKdsColumns = function (state) { return state.kds.columns; }; export var selectKdsBoxes = function (state) { return state.kds.boxes; }; export var selectKdsCardWidth = function (state) { return state.kds.cardWidth; }; export var selectKdsFontSize = function (state) { return state.kds.fontSize; }; export var selectKdsColorScheme = function (state) { return state.kds.colorScheme; }; export var selectKdsSummary = function (state) { return state.kds.summary; }; export var selectKdsAllDay = function (state) { return state.kds.allDay; }; export var selectKdsAllDayMods = function (state) { return state.kds.allDayMods; }; export var selectKdsPage = function (state) { return state.kds.page; }; export var selectKdsPageIndex = function (state) { return state.kds.page - 1; }; export var selectKdsView = function (state) { return state.kds.view; }; export var selectKdsBusinessDate = function (state) { return state.kds.businessDate; }; export var selectKdsOrder = function (state) { return state.kds.order; }; export var selectKdsOrders = function (state) { var _a = state.kds, orders = _a.orders, loading = _a.loading, error = _a.error; return { orders: orders, loading: loading, error: error }; }; export var selectKdsCurrentOrders = function (state) { var _a = state.kds, orders = _a.orders, loading = _a.loading, error = _a.error; var filtered = orders.filter(function (i) { if (!i.order_prep) return false; var _a = i.order_prep, fire_at = _a.fire_at, prep_status = _a.prep_status; if (!fire_at) return false; var tz = timezoneMap[i.timezone]; var fireDate = isoToDate(fire_at, tz); var currentDate = currentLocalDate(tz); return notDone(prep_status) && fireDate < currentDate; }); return { orders: filtered, loading: loading, error: error }; }; export var selectKdsCurrentCount = function (state) { var orders = selectKdsCurrentOrders(state).orders; return orders.length; }; export var selectKdsFutureOrders = function (state) { var _a = state.kds, orders = _a.orders, loading = _a.loading, error = _a.error; var filtered = orders.filter(function (i) { if (!i.order_prep) return false; var _a = i.order_prep, fire_at = _a.fire_at, prep_status = _a.prep_status; if (!fire_at) return false; var tz = timezoneMap[i.timezone]; var fireDate = isoToDate(fire_at, tz); var currentDate = currentLocalDate(tz); return notDone(prep_status) && fireDate > currentDate; }); return { orders: filtered, loading: loading, error: error }; }; export var selectKdsFutureCount = function (state) { var orders = selectKdsFutureOrders(state).orders; return orders.length; }; export var selectKdsPrepStationOrders = function (state) { var _a = state.kds, prepStations = _a.prepStations, prepStationId = _a.prepStationId, orderType = _a.orderType, orders = _a.orders; var prepStation = prepStations.find(function (i) { return i.prep_station_id === prepStationId; }); if (!prepStation) return []; return makeOrdersForPrepStation(orders, prepStation, orderType); }; export var selectKdsPrepStationAllDay = function (state) { var orders = selectKdsPrepStationOrders(state); var withMods = state.kds.allDayMods; return makeItemCounts(orders, withMods); }; export var selectKdsPrepStationAllIncomplete = function (state) { var _a = state.kds, prepStations = _a.prepStations, prepStationId = _a.prepStationId, orders = _a.orders; var prepStation = prepStations.find(function (i) { return i.prep_station_id === prepStationId; }); if (!prepStation) return []; return makeOrdersForPrepStation(orders, prepStation, 'INCOMPLETE'); }; export var selectKdsPrepStationAllIncompleteToday = function (state) { var orders = selectKdsPrepStationAllIncomplete(state); return filterOrdersToday(orders); }; export var selectKdsOrdersCounts = function (state) { var _a = state.kds.counts, current = _a.current, future = _a.future, qa = _a.qa; return { current: current, future: future, qa: qa }; }; export var kdsReducer = kdsSlice.reducer;