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

215 lines (214 loc) 9.77 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.posReducer = exports.selectPosColorScheme = exports.selectPosFontSize = exports.selectPosRefund = exports.selectPosOrder = exports.selectIsOffline = exports.selectManager = exports.selectCashier = exports.selectPosNotes = exports.selectPosName = exports.selectMenuPage = exports.selectLastOrderId = exports.selectPosTerminal = exports.selectPos = exports.setPosRefund = exports.setPosOrder = exports.setPosColorScheme = exports.setPosFontSize = exports.setManager = exports.setCashier = exports.setPosNotes = exports.setPosName = exports.setMenuPage = exports.setLastOrderId = exports.setPosTerminalId = exports.resetPos = exports.printPosOrder = exports.updateOfflineStatus = exports.fetchOfflineStatus = exports.PosActionType = void 0; var tslib_1 = require("tslib"); var utils_1 = require("@open-tender/utils"); var toolkit_1 = require("@reduxjs/toolkit"); var alerts_1 = require("./alerts"); var config_1 = require("./config"); var types_1 = require("./types"); var initialState = { terminalId: null, cashier: null, manager: null, isOffline: false, lastOrderId: null, page: null, name: '', notes: '', fontSize: 'medium', colorScheme: 'dark', order: null, refund: null, loading: 'idle', error: null }; var PosActionType; (function (PosActionType) { PosActionType["FetchOfflineStatus"] = "pos/fetchOfflineStatus"; PosActionType["UpdateOfflineStatus"] = "pos/updateOfflineStatus"; PosActionType["PrintPosOrder"] = "pos/printPosOrder"; })(PosActionType || (exports.PosActionType = PosActionType = {})); exports.fetchOfflineStatus = (0, toolkit_1.createAsyncThunk)(PosActionType.FetchOfflineStatus, function (_1, _a) { return tslib_1.__awaiter(void 0, [_1, _a], void 0, function (_, _b) { var api, response, err_1; var getState = _b.getState, rejectWithValue = _b.rejectWithValue; return tslib_1.__generator(this, function (_c) { switch (_c.label) { case 0: _c.trys.push([0, 2, , 3]); api = getState().config.api; return [4 /*yield*/, api.getInternalSettings()]; case 1: response = _c.sent(); return [2 /*return*/, response.is_offline]; case 2: err_1 = _c.sent(); return [2 /*return*/, rejectWithValue(err_1)]; case 3: return [2 /*return*/]; } }); }); }); exports.updateOfflineStatus = (0, toolkit_1.createAsyncThunk)(PosActionType.UpdateOfflineStatus, function (is_offline_1, _a) { return tslib_1.__awaiter(void 0, [is_offline_1, _a], void 0, function (is_offline, _b) { var api, response, err_2; var getState = _b.getState, rejectWithValue = _b.rejectWithValue; return tslib_1.__generator(this, function (_c) { switch (_c.label) { case 0: _c.trys.push([0, 2, , 3]); api = getState().config.api; return [4 /*yield*/, api.postInternalSettings({ is_offline: is_offline })]; case 1: response = _c.sent(); return [2 /*return*/, response.is_offline]; case 2: err_2 = _c.sent(); return [2 /*return*/, rejectWithValue(err_2)]; case 3: return [2 /*return*/]; } }); }); }); exports.printPosOrder = (0, toolkit_1.createAsyncThunk)(PosActionType.PrintPosOrder, function (orderId_1, _a) { return tslib_1.__awaiter(void 0, [orderId_1, _a], void 0, function (orderId, _b) { var api, err_3, detail; var getState = _b.getState, dispatch = _b.dispatch; return tslib_1.__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: _c.sent(); return [3 /*break*/, 3]; case 2: err_3 = _c.sent(); detail = err_3.detail; dispatch((0, alerts_1.addAlert)(detail)); return [3 /*break*/, 3]; case 3: return [2 /*return*/]; } }); }); }); var posSlice = (0, toolkit_1.createSlice)({ name: types_1.ReducerType.Pos, initialState: initialState, reducers: { resetPos: function () { return initialState; }, setPosTerminalId: function (state, action) { state.terminalId = action.payload; }, setLastOrderId: function (state, action) { state.lastOrderId = action.payload; state.page = null; state.name = ''; state.notes = ''; }, setMenuPage: function (state, action) { state.page = action.payload; }, setPosName: function (state, action) { state.name = action.payload; }, setPosNotes: function (state, action) { state.notes = action.payload; }, setCashier: function (state, action) { state.cashier = action.payload; }, setManager: function (state, action) { state.manager = action.payload; }, setPosFontSize: function (state, action) { state.fontSize = action.payload; }, setPosColorScheme: function (state, action) { state.colorScheme = action.payload; }, setPosOrder: function (state, action) { state.order = action.payload; }, setPosRefund: function (state, action) { state.refund = action.payload; } }, extraReducers: function (builder) { builder .addCase(exports.fetchOfflineStatus.fulfilled, function (state, action) { state.isOffline = action.payload; state.loading = 'idle'; state.error = null; }) .addCase(exports.fetchOfflineStatus.pending, function (state) { state.loading = 'pending'; }) .addCase(exports.fetchOfflineStatus.rejected, function (state, action) { state.error = action.payload; state.loading = 'idle'; }) .addCase(exports.updateOfflineStatus.fulfilled, function (state, action) { state.isOffline = action.payload; state.loading = 'idle'; state.error = null; }) .addCase(exports.updateOfflineStatus.pending, function (state) { state.loading = 'pending'; }) .addCase(exports.updateOfflineStatus.rejected, function (state, action) { state.loading = 'idle'; state.error = action.payload; }) .addCase(exports.printPosOrder.fulfilled, function (state) { state.loading = 'idle'; }) .addCase(exports.printPosOrder.pending, function (state) { state.loading = 'pending'; }) .addCase(exports.printPosOrder.rejected, function (state) { state.loading = 'idle'; }); } }); exports.resetPos = (_a = posSlice.actions, _a.resetPos), exports.setPosTerminalId = _a.setPosTerminalId, exports.setLastOrderId = _a.setLastOrderId, exports.setMenuPage = _a.setMenuPage, exports.setPosName = _a.setPosName, exports.setPosNotes = _a.setPosNotes, exports.setCashier = _a.setCashier, exports.setManager = _a.setManager, exports.setPosFontSize = _a.setPosFontSize, exports.setPosColorScheme = _a.setPosColorScheme, exports.setPosOrder = _a.setPosOrder, exports.setPosRefund = _a.setPosRefund; var selectPos = function (state) { return state.pos; }; exports.selectPos = selectPos; var selectPosTerminal = function (state) { var terminalId = state.pos.terminalId; if (!terminalId || !state.config.devices) return null; var pos_terminals = state.config.devices.pos_terminals; return pos_terminals.find(function (i) { return i.pos_terminal_id === terminalId; }); }; exports.selectPosTerminal = selectPosTerminal; var selectLastOrderId = function (state) { return state.pos.lastOrderId; }; exports.selectLastOrderId = selectLastOrderId; var selectMenuPage = function (state) { return state.pos.page; }; exports.selectMenuPage = selectMenuPage; var selectPosName = function (state) { return state.pos.name; }; exports.selectPosName = selectPosName; var selectPosNotes = function (state) { return state.pos.notes; }; exports.selectPosNotes = selectPosNotes; var selectCashier = function (state) { var cashier = state.pos.cashier; if (!cashier) return { cashier: null, isExpired: false }; var tz = (0, config_1.selectTimezone)(); var businessDate = (0, utils_1.currentLocalDateStr)(tz); var isExpired = businessDate !== cashier.businessDate; if (isExpired) return { cashier: null, isExpired: true }; return { cashier: cashier, isExpired: false }; }; exports.selectCashier = selectCashier; var selectManager = function (state) { return state.pos.manager; }; exports.selectManager = selectManager; var selectIsOffline = function (state) { return state.pos.isOffline; }; exports.selectIsOffline = selectIsOffline; var selectPosOrder = function (state) { return state.pos.order; }; exports.selectPosOrder = selectPosOrder; var selectPosRefund = function (state) { return state.pos.refund; }; exports.selectPosRefund = selectPosRefund; var selectPosFontSize = function (state) { return state.pos.fontSize; }; exports.selectPosFontSize = selectPosFontSize; var selectPosColorScheme = function (state) { return state.pos.colorScheme; }; exports.selectPosColorScheme = selectPosColorScheme; exports.posReducer = posSlice.reducer;