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

280 lines (279 loc) 13.4 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.kioskReducer = exports.selectKioskRatio = exports.selectKioskStyles = exports.selectKioskConfigScreen = exports.selectKioskConfig = exports.selectKioskApi = exports.selectKioskHasScanner = exports.selectKioskHasPrinter = exports.selectKioskTerminal = exports.selectStoreSettings = exports.selectTerminalId = exports.selectKioskDevices = exports.selectKioskBrand = exports.selectKioskStore = exports.selectKioskVersion = exports.selectKiosk = exports.setKioskStyles = exports.setKioskConfig = exports.setKioskRatio = exports.setKioskVersion = exports.incrementKioskRetries = exports.resetKioskRetries = exports.resetKiosk = exports.fetchPaymentConfigs = exports.testKioskPrinter = exports.fetchKioskConfig = exports.KioskActionType = void 0; var tslib_1 = require("tslib"); var toolkit_1 = require("@reduxjs/toolkit"); var services_1 = require("../services"); var errors_1 = require("../services/errors"); var config_1 = require("./config"); var order_1 = require("./order"); var revenueCenter_1 = require("./revenueCenter"); var types_1 = require("./types"); var initialState = { app: null, brand: null, config: null, content: null, devices: null, error: null, loading: 'idle', store: null, styles: null, ratio: 1, retries: 0, settings: null, theme: null, version: null, paymentConfigs: null }; var KioskActionType; (function (KioskActionType) { KioskActionType["FetchKiosk"] = "kiosk/getKiosk"; KioskActionType["TestKioskPrinter"] = "kiosk/testKioskPrinter"; KioskActionType["FetchPaymentConfigs"] = "kiosk/fetchPaymentConfigs"; })(KioskActionType || (exports.KioskActionType = KioskActionType = {})); var getError = function (kiosk, store, devices) { var isEmptyKiosk = kiosk === null; var isEmptyStore = store === null; var isEmptyDevices = devices === null; return isEmptyStore || isEmptyDevices ? errors_1.errorsApi.missingKioskSettings : isEmptyKiosk ? errors_1.errorsApi.unableToReachConfigs : errors_1.errorsApi.internalServerError; }; exports.fetchKioskConfig = (0, toolkit_1.createAsyncThunk)(KioskActionType.FetchKiosk, function (_a, _b) { return tslib_1.__awaiter(void 0, [_a, _b], void 0, function (_c, _d) { var posTerminalId, app, api, promises, _e, kiosk, _f, devicesList, _g, stores, store, devices, err, brand, content, settings, theme, ratio, displaySettings, err_1; var apiUrl = _c.apiUrl; var dispatch = _d.dispatch, getState = _d.getState, rejectWithValue = _d.rejectWithValue; return tslib_1.__generator(this, function (_h) { switch (_h.label) { case 0: _h.trys.push([0, 2, , 3]); posTerminalId = getState().pos.terminalId; app = posTerminalId ? { apiUrl: apiUrl, posTerminalId: posTerminalId } : { apiUrl: apiUrl }; api = new services_1.PosAPI(app); promises = [ api.getKioskConfig(), api.getSettings('DEVICES'), api.getSettings('STORE') ]; return [4 /*yield*/, Promise.all(promises)]; case 1: _e = _h.sent(), kiosk = _e[0], _f = _e[1], devicesList = _f === void 0 ? [] : _f, _g = _e[2], stores = _g === void 0 ? [] : _g; store = stores[0] || null; devices = devicesList[0] || null; if (!kiosk || !store || !devices) { err = getError(kiosk, store, devices); return [2 /*return*/, rejectWithValue(err)]; } dispatch((0, revenueCenter_1.fetchRevenueCenter)({ revenueCenterId: store.revenue_center_id })); dispatch((0, config_1.setApi)(api)); dispatch((0, order_1.setRevenueCenterId)(store.revenue_center_id)); brand = kiosk.brand, content = kiosk.content, settings = kiosk.settings, theme = kiosk.theme; ratio = settings.ratio, displaySettings = settings.displaySettings; return [2 /*return*/, { app: app, brand: brand, config: null, content: content, devices: devices, error: null, loading: 'idle', ratio: ratio, retries: 0, settings: displaySettings, store: store, styles: null, theme: theme }]; case 2: err_1 = _h.sent(); return [2 /*return*/, rejectWithValue(err_1)]; case 3: return [2 /*return*/]; } }); }); }); exports.testKioskPrinter = (0, toolkit_1.createAsyncThunk)(KioskActionType.TestKioskPrinter, function (_a, _b) { return tslib_1.__awaiter(void 0, [_a, _b], void 0, function (_c, _d) { var posTerminalId, app, api, response, err_2; var apiUrl = _c.apiUrl; var getState = _d.getState, rejectWithValue = _d.rejectWithValue; return tslib_1.__generator(this, function (_e) { switch (_e.label) { case 0: _e.trys.push([0, 2, , 3]); posTerminalId = getState().pos.terminalId; app = posTerminalId ? { apiUrl: apiUrl, posTerminalId: posTerminalId } : { apiUrl: apiUrl }; api = new services_1.PosAPI(app); return [4 /*yield*/, api.testPrint()]; case 1: response = _e.sent(); return [2 /*return*/, response]; case 2: err_2 = _e.sent(); return [2 /*return*/, rejectWithValue(errors_1.errorsApi.tempUnavailable)]; case 3: return [2 /*return*/]; } }); }); }); exports.fetchPaymentConfigs = (0, toolkit_1.createAsyncThunk)(KioskActionType.FetchPaymentConfigs, function (_1, _a) { return tslib_1.__awaiter(void 0, [_1, _a], void 0, function (_, _b) { var api, response, err_3; 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.fetchPaymentConfigs()]; case 1: response = _c.sent(); return [2 /*return*/, response]; case 2: err_3 = _c.sent(); return [2 /*return*/, rejectWithValue(errors_1.errorsApi.tempUnavailable)]; case 3: return [2 /*return*/]; } }); }); }); var kioskSlice = (0, toolkit_1.createSlice)({ name: types_1.ReducerType.Kiosk, initialState: initialState, reducers: { resetKiosk: function () { return initialState; }, resetKioskRetries: function (state) { state.retries = 0; }, incrementKioskRetries: function (state) { state.retries = state.retries + 1; }, setKioskVersion: function (state, action) { state.version = action.payload; }, setKioskRatio: function (state, action) { state.ratio = action.payload; }, setKioskConfig: function (state, action) { state.config = action.payload; }, setKioskStyles: function (state, action) { state.styles = action.payload; } }, extraReducers: function (builder) { builder .addCase(exports.fetchKioskConfig.fulfilled, function (state, action) { var _a = action.payload, app = _a.app, brand = _a.brand, config = _a.config, content = _a.content, devices = _a.devices, ratio = _a.ratio, settings = _a.settings, store = _a.store, styles = _a.styles, theme = _a.theme; state.app = app; state.brand = brand; state.config = config; state.content = content; state.devices = devices; state.error = null; state.loading = 'idle'; state.ratio = ratio; state.retries = 0; state.settings = settings; state.store = store; state.styles = styles; state.theme = theme; }) .addCase(exports.fetchKioskConfig.pending, function (state) { state.loading = 'pending'; }) .addCase(exports.fetchKioskConfig.rejected, function (state, action) { state.error = action.payload; state.loading = 'idle'; }); builder .addCase(exports.testKioskPrinter.fulfilled, function (state) { state.loading = 'idle'; }) .addCase(exports.testKioskPrinter.pending, function (state) { state.loading = 'pending'; }) .addCase(exports.testKioskPrinter.rejected, function (state, action) { state.error = action.payload; state.loading = 'idle'; }); builder .addCase(exports.fetchPaymentConfigs.fulfilled, function (state, action) { state.loading = 'idle'; state.paymentConfigs = action.payload; }) .addCase(exports.fetchPaymentConfigs.pending, function (state) { state.loading = 'pending'; }) .addCase(exports.fetchPaymentConfigs.rejected, function (state, action) { state.error = action.payload; state.loading = 'idle'; }); } }); exports.resetKiosk = (_a = kioskSlice.actions, _a.resetKiosk), exports.resetKioskRetries = _a.resetKioskRetries, exports.incrementKioskRetries = _a.incrementKioskRetries, exports.setKioskVersion = _a.setKioskVersion, exports.setKioskRatio = _a.setKioskRatio, exports.setKioskConfig = _a.setKioskConfig, exports.setKioskStyles = _a.setKioskStyles; var selectKiosk = function (state) { return state.kiosk; }; exports.selectKiosk = selectKiosk; var selectKioskVersion = function (state) { return state.kiosk.version; }; exports.selectKioskVersion = selectKioskVersion; var selectKioskStore = function (state) { return state.kiosk.store; }; exports.selectKioskStore = selectKioskStore; var selectKioskBrand = function (state) { return state.kiosk.brand; }; exports.selectKioskBrand = selectKioskBrand; var selectKioskDevices = function (state) { return state.kiosk.devices; }; exports.selectKioskDevices = selectKioskDevices; var selectTerminalId = function (state) { return state.pos.terminalId; }; exports.selectTerminalId = selectTerminalId; exports.selectStoreSettings = (0, toolkit_1.createSelector)(exports.selectKioskStore, function (store) { return tslib_1.__assign({}, store); }); exports.selectKioskTerminal = (0, toolkit_1.createSelector)([exports.selectKioskDevices, exports.selectTerminalId], function (devices, terminalId) { var terminal = devices === null || devices === void 0 ? void 0 : devices.pos_terminals.find(function (i) { return i.pos_terminal_id === terminalId; }); return terminal || null; }); exports.selectKioskHasPrinter = (0, toolkit_1.createSelector)([exports.selectKioskDevices, exports.selectTerminalId], function (devices, terminalId) { var terminal = devices === null || devices === void 0 ? void 0 : devices.pos_terminals.find(function (i) { return i.pos_terminal_id === terminalId; }); if (!terminal) return false; var print_receipt = terminal.print_receipt, printers = terminal.printers; if (print_receipt === 'never' || !printers.length) return false; return true; }); exports.selectKioskHasScanner = (0, toolkit_1.createSelector)([exports.selectKioskDevices, exports.selectTerminalId], function (devices, terminalId) { var terminal = devices === null || devices === void 0 ? void 0 : devices.pos_terminals.find(function (i) { return i.pos_terminal_id === terminalId; }); if (!terminal) return false; var pos_scanner_type = terminal.pos_scanner_type, pos_scanner = terminal.pos_scanner; if (pos_scanner_type === 'NONE') return false; if (pos_scanner_type === 'MORPHSTICK' && !pos_scanner) return false; return true; }); exports.selectKioskApi = (0, toolkit_1.createSelector)(function (state) { var app = state.kiosk.app; return app; }, function (app) { if (!app) return 'http://kiosk'; return app.apiUrl.replace('/pos-api', ''); }); exports.selectKioskConfig = (0, toolkit_1.createSelector)(function (state) { return state.kiosk.config; }, function (config) { return tslib_1.__assign({}, config); }); var selectKioskConfigScreen = function (screen) { return (0, toolkit_1.createSelector)(function (state) { var config = state.kiosk.config; return config; }, function (config) { return (config === null || config === void 0 ? void 0 : config[screen]) || null; }); }; exports.selectKioskConfigScreen = selectKioskConfigScreen; var selectKioskStyles = function (state) { return state.kiosk.styles; }; exports.selectKioskStyles = selectKioskStyles; var selectKioskRatio = function (state) { return state.kiosk.ratio; }; exports.selectKioskRatio = selectKioskRatio; exports.kioskReducer = kioskSlice.reducer;