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

268 lines (267 loc) 11.8 kB
var _a; import { __assign, __awaiter, __generator } from "tslib"; import { createSlice, createAsyncThunk, createSelector } from '@reduxjs/toolkit'; import { PosAPI } from '../services'; import { errorsApi } from '../services/errors'; import { setApi } from './config'; import { setRevenueCenterId } from './order'; import { fetchRevenueCenter } from './revenueCenter'; import { ReducerType } from './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 }; export var KioskActionType; (function (KioskActionType) { KioskActionType["FetchKiosk"] = "kiosk/getKiosk"; KioskActionType["TestKioskPrinter"] = "kiosk/testKioskPrinter"; KioskActionType["FetchPaymentConfigs"] = "kiosk/fetchPaymentConfigs"; })(KioskActionType || (KioskActionType = {})); var getError = function (kiosk, store, devices) { var isEmptyKiosk = kiosk === null; var isEmptyStore = store === null; var isEmptyDevices = devices === null; return isEmptyStore || isEmptyDevices ? errorsApi.missingKioskSettings : isEmptyKiosk ? errorsApi.unableToReachConfigs : errorsApi.internalServerError; }; export var fetchKioskConfig = createAsyncThunk(KioskActionType.FetchKiosk, function (_a, _b) { return __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 __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 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(fetchRevenueCenter({ revenueCenterId: store.revenue_center_id })); dispatch(setApi(api)); dispatch(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*/]; } }); }); }); export var testKioskPrinter = createAsyncThunk(KioskActionType.TestKioskPrinter, function (_a, _b) { return __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 __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 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(errorsApi.tempUnavailable)]; case 3: return [2 /*return*/]; } }); }); }); export var fetchPaymentConfigs = createAsyncThunk(KioskActionType.FetchPaymentConfigs, function (_1, _a) { return __awaiter(void 0, [_1, _a], void 0, function (_, _b) { var api, response, err_3; 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; return [4 /*yield*/, api.fetchPaymentConfigs()]; case 1: response = _c.sent(); return [2 /*return*/, response]; case 2: err_3 = _c.sent(); return [2 /*return*/, rejectWithValue(errorsApi.tempUnavailable)]; case 3: return [2 /*return*/]; } }); }); }); var kioskSlice = createSlice({ name: 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(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(fetchKioskConfig.pending, function (state) { state.loading = 'pending'; }) .addCase(fetchKioskConfig.rejected, function (state, action) { state.error = action.payload; state.loading = 'idle'; }); builder .addCase(testKioskPrinter.fulfilled, function (state) { state.loading = 'idle'; }) .addCase(testKioskPrinter.pending, function (state) { state.loading = 'pending'; }) .addCase(testKioskPrinter.rejected, function (state, action) { state.error = action.payload; state.loading = 'idle'; }); builder .addCase(fetchPaymentConfigs.fulfilled, function (state, action) { state.loading = 'idle'; state.paymentConfigs = action.payload; }) .addCase(fetchPaymentConfigs.pending, function (state) { state.loading = 'pending'; }) .addCase(fetchPaymentConfigs.rejected, function (state, action) { state.error = action.payload; state.loading = 'idle'; }); } }); export var resetKiosk = (_a = kioskSlice.actions, _a.resetKiosk), resetKioskRetries = _a.resetKioskRetries, incrementKioskRetries = _a.incrementKioskRetries, setKioskVersion = _a.setKioskVersion, setKioskRatio = _a.setKioskRatio, setKioskConfig = _a.setKioskConfig, setKioskStyles = _a.setKioskStyles; export var selectKiosk = function (state) { return state.kiosk; }; export var selectKioskVersion = function (state) { return state.kiosk.version; }; export var selectKioskStore = function (state) { return state.kiosk.store; }; export var selectKioskBrand = function (state) { return state.kiosk.brand; }; export var selectKioskDevices = function (state) { return state.kiosk.devices; }; export var selectTerminalId = function (state) { return state.pos.terminalId; }; export var selectStoreSettings = createSelector(selectKioskStore, function (store) { return __assign({}, store); }); export var selectKioskTerminal = createSelector([selectKioskDevices, 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; }); export var selectKioskHasPrinter = createSelector([selectKioskDevices, 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; }); export var selectKioskHasScanner = createSelector([selectKioskDevices, 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; }); export var selectKioskApi = createSelector(function (state) { var app = state.kiosk.app; return app; }, function (app) { if (!app) return 'http://kiosk'; return app.apiUrl.replace('/pos-api', ''); }); export var selectKioskConfig = createSelector(function (state) { return state.kiosk.config; }, function (config) { return __assign({}, config); }); export var selectKioskConfigScreen = function (screen) { return createSelector(function (state) { var config = state.kiosk.config; return config; }, function (config) { return (config === null || config === void 0 ? void 0 : config[screen]) || null; }); }; export var selectKioskStyles = function (state) { return state.kiosk.styles; }; export var selectKioskRatio = function (state) { return state.kiosk.ratio; }; export var kioskReducer = kioskSlice.reducer;