@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
JavaScript
;
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;