@open-tender/store 1.1.136 → 1.1.138

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/cjs/app/hooks.d.ts +1 -0
  2. package/dist/cjs/app/store.d.ts +4 -0
  3. package/dist/cjs/app/store.js +2 -1
  4. package/dist/cjs/components/IdleModal.d.ts +12 -0
  5. package/dist/cjs/components/IdleModal.js +31 -0
  6. package/dist/cjs/components/Keypad.js +3 -2
  7. package/dist/cjs/index.d.ts +1 -0
  8. package/dist/cjs/index.js +1 -0
  9. package/dist/cjs/middlewares/idleMiddleware.d.ts +2 -0
  10. package/dist/cjs/middlewares/idleMiddleware.js +27 -0
  11. package/dist/cjs/middlewares/index.d.ts +1 -0
  12. package/dist/cjs/middlewares/index.js +4 -0
  13. package/dist/cjs/slices/customer.d.ts +1 -0
  14. package/dist/cjs/slices/idle.d.ts +8 -0
  15. package/dist/cjs/slices/idle.js +27 -0
  16. package/dist/cjs/slices/index.d.ts +1 -0
  17. package/dist/cjs/slices/index.js +1 -0
  18. package/dist/cjs/slices/kiosk.d.ts +7 -0
  19. package/dist/cjs/slices/menuPages.d.ts +1 -0
  20. package/dist/cjs/slices/order.d.ts +4 -0
  21. package/dist/cjs/slices/types.d.ts +2 -1
  22. package/dist/cjs/slices/types.js +1 -0
  23. package/dist/esm/app/hooks.d.ts +1 -0
  24. package/dist/esm/app/store.d.ts +4 -0
  25. package/dist/esm/app/store.js +3 -2
  26. package/dist/esm/components/IdleModal.d.ts +12 -0
  27. package/dist/esm/components/IdleModal.js +29 -0
  28. package/dist/esm/components/Keypad.js +3 -2
  29. package/dist/esm/index.d.ts +1 -0
  30. package/dist/esm/index.js +1 -0
  31. package/dist/esm/middlewares/idleMiddleware.d.ts +2 -0
  32. package/dist/esm/middlewares/idleMiddleware.js +23 -0
  33. package/dist/esm/middlewares/index.d.ts +1 -0
  34. package/dist/esm/middlewares/index.js +1 -0
  35. package/dist/esm/slices/customer.d.ts +1 -0
  36. package/dist/esm/slices/idle.d.ts +8 -0
  37. package/dist/esm/slices/idle.js +23 -0
  38. package/dist/esm/slices/index.d.ts +1 -0
  39. package/dist/esm/slices/index.js +1 -0
  40. package/dist/esm/slices/kiosk.d.ts +7 -0
  41. package/dist/esm/slices/menuPages.d.ts +1 -0
  42. package/dist/esm/slices/order.d.ts +4 -0
  43. package/dist/esm/slices/types.d.ts +2 -1
  44. package/dist/esm/slices/types.js +1 -0
  45. package/package.json +3 -3
@@ -27,5 +27,6 @@ export declare const useAppDispatch: () => import("redux-thunk").ThunkDispatch<{
27
27
  sidebar: import("..").SidebarState;
28
28
  surcharges: import("..").SurchargesState;
29
29
  taxes: import("..").TaxesState;
30
+ idle: import("..").IdleState;
30
31
  }, undefined, import("redux").UnknownAction> & import("redux").Dispatch<import("redux").Action>;
31
32
  export declare const useAppSelector: TypedUseSelectorHook<RootState>;
@@ -26,6 +26,7 @@ export declare const appReducer: import("redux").Reducer<{
26
26
  sidebar: import("../slices").SidebarState;
27
27
  surcharges: import("../slices").SurchargesState;
28
28
  taxes: import("../slices").TaxesState;
29
+ idle: import("../slices").IdleState;
29
30
  }, import("redux").UnknownAction, Partial<{
30
31
  alerts: import("@open-tender/types").Alerts | undefined;
31
32
  arrivals: import("../slices").ArrivalsState | undefined;
@@ -53,6 +54,7 @@ export declare const appReducer: import("redux").Reducer<{
53
54
  sidebar: import("../slices").SidebarState | undefined;
54
55
  surcharges: import("../slices").SurchargesState | undefined;
55
56
  taxes: import("../slices").TaxesState | undefined;
57
+ idle: import("../slices").IdleState | undefined;
56
58
  }>>;
57
59
  export type AppState = ReturnType<typeof appReducer>;
58
60
  declare const store: import("@reduxjs/toolkit").EnhancedStore<{
@@ -82,6 +84,7 @@ declare const store: import("@reduxjs/toolkit").EnhancedStore<{
82
84
  sidebar: import("../slices").SidebarState;
83
85
  surcharges: import("../slices").SurchargesState;
84
86
  taxes: import("../slices").TaxesState;
87
+ idle: import("../slices").IdleState;
85
88
  }, Action, import("@reduxjs/toolkit").Tuple<[import("redux").StoreEnhancer<{
86
89
  dispatch: import("redux-thunk").ThunkDispatch<{
87
90
  alerts: import("@open-tender/types").Alerts;
@@ -110,6 +113,7 @@ declare const store: import("@reduxjs/toolkit").EnhancedStore<{
110
113
  sidebar: import("../slices").SidebarState;
111
114
  surcharges: import("../slices").SurchargesState;
112
115
  taxes: import("../slices").TaxesState;
116
+ idle: import("../slices").IdleState;
113
117
  }, undefined, import("redux").UnknownAction>;
114
118
  }>, import("redux").StoreEnhancer]>>;
115
119
  export type AppDispatch = typeof store.dispatch;
@@ -29,7 +29,8 @@ exports.appReducer = (0, toolkit_1.combineReducers)({
29
29
  settings: slices_1.settingsReducer,
30
30
  sidebar: slices_1.sidebarReducer,
31
31
  surcharges: slices_1.surchargesReducer,
32
- taxes: slices_1.taxesReducer
32
+ taxes: slices_1.taxesReducer,
33
+ idle: slices_1.idleReducer
33
34
  });
34
35
  var rootReducer = function (state, action) {
35
36
  if (action.type === 'clearState') {
@@ -0,0 +1,12 @@
1
+ import { Handlers, ScreenConfig } from '@open-tender/ui';
2
+ import { ReactNode } from 'react';
3
+ declare const IdleModal: ({ close, navigate, children }: {
4
+ close: () => void;
5
+ navigate: (route: string) => void;
6
+ children: (props: {
7
+ config: ScreenConfig;
8
+ modalContentConfig: ScreenConfig;
9
+ handlers: Handlers;
10
+ }) => ReactNode;
11
+ }) => ReactNode;
12
+ export default IdleModal;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var react_1 = require("react");
4
+ var hooks_1 = require("../app/hooks");
5
+ var slices_1 = require("../slices");
6
+ var WAITING_TIME_IN_SECONDS = 15;
7
+ var IdleModal = function (_a) {
8
+ var close = _a.close, navigate = _a.navigate, children = _a.children;
9
+ var dispatch = (0, hooks_1.useAppDispatch)();
10
+ var _b = (0, hooks_1.useAppSelector)(slices_1.selectKioskConfig), config = _b.idleModal, modalContentConfig = _b.modalContent;
11
+ var handleInactivity = (0, react_1.useCallback)(function () {
12
+ dispatch((0, slices_1.resetPosCheckout)());
13
+ dispatch((0, slices_1.setOrderId)(null));
14
+ dispatch((0, slices_1.resetCart)());
15
+ dispatch((0, slices_1.resetCustomerIdentify)());
16
+ dispatch((0, slices_1.resetCustomer)());
17
+ dispatch((0, slices_1.resetMenu)());
18
+ close();
19
+ navigate('/');
20
+ }, [dispatch, navigate, close]);
21
+ var handlers = (0, react_1.useMemo)(function () { return ({ close: close }); }, [close]);
22
+ (0, react_1.useEffect)(function () {
23
+ var timeout = setTimeout(handleInactivity, WAITING_TIME_IN_SECONDS * 1000);
24
+ return function () { return clearTimeout(timeout); };
25
+ // eslint-disable-next-line react-hooks/exhaustive-deps
26
+ }, []);
27
+ if (!config)
28
+ return null;
29
+ return children({ config: config, modalContentConfig: modalContentConfig, handlers: handlers });
30
+ };
31
+ exports.default = IdleModal;
@@ -7,8 +7,9 @@ var utils_1 = require("../utils");
7
7
  var Keypad = function (_a) {
8
8
  var children = _a.children, maxLength = _a.maxLength, type = _a.type, value = _a.value, handlers = _a.handlers;
9
9
  var _b = (0, hooks_1.useAppSelector)(slices_1.selectKioskConfig), keypad = _b.keypad, numpad = _b.numpad;
10
- var config = type === 'numeric' ? numpad : keypad;
11
- var handleOnKeyPress = (0, react_1.useCallback)(function (key) { return handlers.change((0, utils_1.getKeyboardValue)(key, value, maxLength)); }, [maxLength, value, handlers]);
10
+ var isDollar = type === 'dollar';
11
+ var config = type === 'numeric' || isDollar ? numpad : keypad;
12
+ var handleOnKeyPress = (0, react_1.useCallback)(function (key) { return handlers.change((0, utils_1.getKeyboardValue)(key, value, maxLength)); }, [handlers, value, maxLength]);
12
13
  var viewHandlers = (0, react_1.useMemo)(function () { return ({ keyPress: handleOnKeyPress }); }, [handleOnKeyPress]);
13
14
  if (!config)
14
15
  return null;
@@ -4,4 +4,5 @@ export * from './components';
4
4
  export * from './hooks';
5
5
  export * from './slices';
6
6
  export * from './utils';
7
+ export * from './middlewares';
7
8
  export { appReducer, tempConfig };
package/dist/cjs/index.js CHANGED
@@ -10,3 +10,4 @@ tslib_1.__exportStar(require("./components"), exports);
10
10
  tslib_1.__exportStar(require("./hooks"), exports);
11
11
  tslib_1.__exportStar(require("./slices"), exports);
12
12
  tslib_1.__exportStar(require("./utils"), exports);
13
+ tslib_1.__exportStar(require("./middlewares"), exports);
@@ -0,0 +1,2 @@
1
+ import { Middleware } from '@reduxjs/toolkit';
2
+ export declare const idleMiddleware: Middleware;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.idleMiddleware = void 0;
4
+ var slices_1 = require("../slices");
5
+ var types_1 = require("../slices/types");
6
+ var DEFAULT_PAGE_TIMEOUT = 60;
7
+ var idleMiddleware = function (store) { return function (next) { return function (action) {
8
+ var _a, _b;
9
+ var result = next(action);
10
+ if (action.type === "".concat(types_1.ReducerType.Idle, "/setIsIdle") ||
11
+ action.type === "".concat(types_1.ReducerType.Idle, "/setIdleTimerId")) {
12
+ return result;
13
+ }
14
+ var state = store.getState();
15
+ var isIdle = state.idle.isIdle;
16
+ if (isIdle)
17
+ store.dispatch((0, slices_1.setIsIdle)(false));
18
+ var prevTimerId = state.idle.timerId;
19
+ clearTimeout(prevTimerId);
20
+ var pageTimeout = (_b = (_a = state.kiosk.store) === null || _a === void 0 ? void 0 : _a.page_timeout) !== null && _b !== void 0 ? _b : DEFAULT_PAGE_TIMEOUT * 1000;
21
+ var timerId = setTimeout(function () {
22
+ store.dispatch((0, slices_1.setIsIdle)(true));
23
+ }, pageTimeout);
24
+ store.dispatch((0, slices_1.setIdleTimerId)(timerId));
25
+ return result;
26
+ }; }; };
27
+ exports.idleMiddleware = idleMiddleware;
@@ -0,0 +1 @@
1
+ export * from './idleMiddleware';
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./idleMiddleware"), exports);
@@ -62,6 +62,7 @@ export declare const selectCustomerLoyalty: ((state: {
62
62
  sidebar: import("./sidebar").SidebarState;
63
63
  surcharges: import("./surcharges").SurchargesState;
64
64
  taxes: import("./taxes").TaxesState;
65
+ idle: import("./idle").IdleState;
65
66
  }) => LoyaltyProgramSummary | null) & {
66
67
  clearCache: () => void;
67
68
  resultsCount: () => number;
@@ -0,0 +1,8 @@
1
+ import { AppState } from '../app';
2
+ export interface IdleState {
3
+ timerId: number | undefined;
4
+ isIdle: boolean;
5
+ }
6
+ export declare const resetIdleState: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"idle/resetIdleState">, setIdleTimerId: import("@reduxjs/toolkit").ActionCreatorWithPayload<any, "idle/setIdleTimerId">, setIsIdle: import("@reduxjs/toolkit").ActionCreatorWithPayload<any, "idle/setIsIdle">;
7
+ export declare const selectIdleState: (state: AppState) => IdleState;
8
+ export declare const idleReducer: import("redux").Reducer<IdleState>;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.idleReducer = exports.selectIdleState = exports.setIsIdle = exports.setIdleTimerId = exports.resetIdleState = void 0;
5
+ var toolkit_1 = require("@reduxjs/toolkit");
6
+ var types_1 = require("./types");
7
+ var initialState = {
8
+ timerId: undefined,
9
+ isIdle: false
10
+ };
11
+ var idleSlice = (0, toolkit_1.createSlice)({
12
+ name: types_1.ReducerType.Idle,
13
+ initialState: initialState,
14
+ reducers: {
15
+ resetIdleState: function () { return initialState; },
16
+ setIdleTimerId: function (state, action) {
17
+ state.timerId = action.payload;
18
+ },
19
+ setIsIdle: function (state, action) {
20
+ state.isIdle = action.payload;
21
+ }
22
+ }
23
+ });
24
+ exports.resetIdleState = (_a = idleSlice.actions, _a.resetIdleState), exports.setIdleTimerId = _a.setIdleTimerId, exports.setIsIdle = _a.setIsIdle;
25
+ var selectIdleState = function (state) { return state.idle; };
26
+ exports.selectIdleState = selectIdleState;
27
+ exports.idleReducer = idleSlice.reducer;
@@ -24,3 +24,4 @@ export * from './settings';
24
24
  export * from './sidebar';
25
25
  export * from './surcharges';
26
26
  export * from './taxes';
27
+ export * from './idle';
@@ -27,3 +27,4 @@ tslib_1.__exportStar(require("./settings"), exports);
27
27
  tslib_1.__exportStar(require("./sidebar"), exports);
28
28
  tslib_1.__exportStar(require("./surcharges"), exports);
29
29
  tslib_1.__exportStar(require("./taxes"), exports);
30
+ tslib_1.__exportStar(require("./idle"), exports);
@@ -69,6 +69,7 @@ export declare const selectStoreSettings: ((state: {
69
69
  sidebar: import("./sidebar").SidebarState;
70
70
  surcharges: import("./surcharges").SurchargesState;
71
71
  taxes: import("./taxes").TaxesState;
72
+ idle: import("./idle").IdleState;
72
73
  }) => Store) & {
73
74
  clearCache: () => void;
74
75
  resultsCount: () => number;
@@ -117,6 +118,7 @@ export declare const selectKioskTerminal: ((state: {
117
118
  sidebar: import("./sidebar").SidebarState;
118
119
  surcharges: import("./surcharges").SurchargesState;
119
120
  taxes: import("./taxes").TaxesState;
121
+ idle: import("./idle").IdleState;
120
122
  }) => import("@open-tender/types").PosTerminal | null) & {
121
123
  clearCache: () => void;
122
124
  resultsCount: () => number;
@@ -165,6 +167,7 @@ export declare const selectKioskHasPrinter: ((state: {
165
167
  sidebar: import("./sidebar").SidebarState;
166
168
  surcharges: import("./surcharges").SurchargesState;
167
169
  taxes: import("./taxes").TaxesState;
170
+ idle: import("./idle").IdleState;
168
171
  }) => boolean) & {
169
172
  clearCache: () => void;
170
173
  resultsCount: () => number;
@@ -213,6 +216,7 @@ export declare const selectKioskHasScanner: ((state: {
213
216
  sidebar: import("./sidebar").SidebarState;
214
217
  surcharges: import("./surcharges").SurchargesState;
215
218
  taxes: import("./taxes").TaxesState;
219
+ idle: import("./idle").IdleState;
216
220
  }) => boolean) & {
217
221
  clearCache: () => void;
218
222
  resultsCount: () => number;
@@ -261,6 +265,7 @@ export declare const selectKioskApi: ((state: {
261
265
  sidebar: import("./sidebar").SidebarState;
262
266
  surcharges: import("./surcharges").SurchargesState;
263
267
  taxes: import("./taxes").TaxesState;
268
+ idle: import("./idle").IdleState;
264
269
  }) => string) & {
265
270
  clearCache: () => void;
266
271
  resultsCount: () => number;
@@ -309,6 +314,7 @@ export declare const selectKioskConfig: ((state: {
309
314
  sidebar: import("./sidebar").SidebarState;
310
315
  surcharges: import("./surcharges").SurchargesState;
311
316
  taxes: import("./taxes").TaxesState;
317
+ idle: import("./idle").IdleState;
312
318
  }) => AppConfig) & {
313
319
  clearCache: () => void;
314
320
  resultsCount: () => number;
@@ -357,6 +363,7 @@ export declare const selectKioskConfigScreen: (screen: string) => ((state: {
357
363
  sidebar: import("./sidebar").SidebarState;
358
364
  surcharges: import("./surcharges").SurchargesState;
359
365
  taxes: import("./taxes").TaxesState;
366
+ idle: import("./idle").IdleState;
360
367
  }) => import("@open-tender/ui").ScreenConfig | null) & {
361
368
  clearCache: () => void;
362
369
  resultsCount: () => number;
@@ -47,6 +47,7 @@ export declare const selectMenuPagesFiltered: ((state: {
47
47
  sidebar: import("./sidebar").SidebarState;
48
48
  surcharges: import("./surcharges").SurchargesState;
49
49
  taxes: import("./taxes").TaxesState;
50
+ idle: import("./idle").IdleState;
50
51
  }) => {
51
52
  order_type: import("@open-tender/types").FullOrderType;
52
53
  name: string;
@@ -90,6 +90,7 @@ export declare const selectCartIds: ((state: {
90
90
  sidebar: import("./sidebar").SidebarState;
91
91
  surcharges: import("./surcharges").SurchargesState;
92
92
  taxes: import("./taxes").TaxesState;
93
+ idle: import("./idle").IdleState;
93
94
  }) => number[]) & {
94
95
  clearCache: () => void;
95
96
  resultsCount: () => number;
@@ -138,6 +139,7 @@ export declare const selectCartQuantity: ((state: {
138
139
  sidebar: import("./sidebar").SidebarState;
139
140
  surcharges: import("./surcharges").SurchargesState;
140
141
  taxes: import("./taxes").TaxesState;
142
+ idle: import("./idle").IdleState;
141
143
  }) => number) & {
142
144
  clearCache: () => void;
143
145
  resultsCount: () => number;
@@ -186,6 +188,7 @@ export declare const selectCartTotal: ((state: {
186
188
  sidebar: import("./sidebar").SidebarState;
187
189
  surcharges: import("./surcharges").SurchargesState;
188
190
  taxes: import("./taxes").TaxesState;
191
+ idle: import("./idle").IdleState;
189
192
  }) => number) & {
190
193
  clearCache: () => void;
191
194
  resultsCount: () => number;
@@ -234,6 +237,7 @@ export declare const selectCartTotals: ((state: {
234
237
  sidebar: import("./sidebar").SidebarState;
235
238
  surcharges: import("./surcharges").SurchargesState;
236
239
  taxes: import("./taxes").TaxesState;
240
+ idle: import("./idle").IdleState;
237
241
  }) => {
238
242
  count: number;
239
243
  total: number;
@@ -26,5 +26,6 @@ export declare enum ReducerType {
26
26
  Settings = "settings",
27
27
  Sidebar = "sidebar",
28
28
  Surcharges = "surcharges",
29
- Taxes = "taxes"
29
+ Taxes = "taxes",
30
+ Idle = "idle"
30
31
  }
@@ -31,4 +31,5 @@ var ReducerType;
31
31
  ReducerType["Sidebar"] = "sidebar";
32
32
  ReducerType["Surcharges"] = "surcharges";
33
33
  ReducerType["Taxes"] = "taxes";
34
+ ReducerType["Idle"] = "idle";
34
35
  })(ReducerType || (exports.ReducerType = ReducerType = {}));
@@ -27,5 +27,6 @@ export declare const useAppDispatch: () => import("redux-thunk").ThunkDispatch<{
27
27
  sidebar: import("..").SidebarState;
28
28
  surcharges: import("..").SurchargesState;
29
29
  taxes: import("..").TaxesState;
30
+ idle: import("..").IdleState;
30
31
  }, undefined, import("redux").UnknownAction> & import("redux").Dispatch<import("redux").Action>;
31
32
  export declare const useAppSelector: TypedUseSelectorHook<RootState>;
@@ -26,6 +26,7 @@ export declare const appReducer: import("redux").Reducer<{
26
26
  sidebar: import("../slices").SidebarState;
27
27
  surcharges: import("../slices").SurchargesState;
28
28
  taxes: import("../slices").TaxesState;
29
+ idle: import("../slices").IdleState;
29
30
  }, import("redux").UnknownAction, Partial<{
30
31
  alerts: import("@open-tender/types").Alerts | undefined;
31
32
  arrivals: import("../slices").ArrivalsState | undefined;
@@ -53,6 +54,7 @@ export declare const appReducer: import("redux").Reducer<{
53
54
  sidebar: import("../slices").SidebarState | undefined;
54
55
  surcharges: import("../slices").SurchargesState | undefined;
55
56
  taxes: import("../slices").TaxesState | undefined;
57
+ idle: import("../slices").IdleState | undefined;
56
58
  }>>;
57
59
  export type AppState = ReturnType<typeof appReducer>;
58
60
  declare const store: import("@reduxjs/toolkit").EnhancedStore<{
@@ -82,6 +84,7 @@ declare const store: import("@reduxjs/toolkit").EnhancedStore<{
82
84
  sidebar: import("../slices").SidebarState;
83
85
  surcharges: import("../slices").SurchargesState;
84
86
  taxes: import("../slices").TaxesState;
87
+ idle: import("../slices").IdleState;
85
88
  }, Action, import("@reduxjs/toolkit").Tuple<[import("redux").StoreEnhancer<{
86
89
  dispatch: import("redux-thunk").ThunkDispatch<{
87
90
  alerts: import("@open-tender/types").Alerts;
@@ -110,6 +113,7 @@ declare const store: import("@reduxjs/toolkit").EnhancedStore<{
110
113
  sidebar: import("../slices").SidebarState;
111
114
  surcharges: import("../slices").SurchargesState;
112
115
  taxes: import("../slices").TaxesState;
116
+ idle: import("../slices").IdleState;
113
117
  }, undefined, import("redux").UnknownAction>;
114
118
  }>, import("redux").StoreEnhancer]>>;
115
119
  export type AppDispatch = typeof store.dispatch;
@@ -1,5 +1,5 @@
1
1
  import { combineReducers, configureStore } from '@reduxjs/toolkit';
2
- import { alertsReducer, arrivalsReducer, cartSummaryReducer, checkoutReducer, configReducer, customerReducer, customerIdentifyReducer, dealsReducer, discountsReducer, errorAlertsReducer, kdsReducer, kioskReducer, menuReducer, menuPagesReducer, modalReducer, notificationsReducer, offlineAuthsReducer, orderReducer, posReducer, punchesReducer, refundReducer, sendReceiptReducer, settingsReducer, sidebarReducer, surchargesReducer, taxesReducer } from '../slices';
2
+ import { alertsReducer, arrivalsReducer, cartSummaryReducer, checkoutReducer, configReducer, customerReducer, customerIdentifyReducer, dealsReducer, discountsReducer, errorAlertsReducer, kdsReducer, kioskReducer, menuReducer, menuPagesReducer, modalReducer, notificationsReducer, offlineAuthsReducer, orderReducer, posReducer, punchesReducer, refundReducer, sendReceiptReducer, settingsReducer, sidebarReducer, surchargesReducer, taxesReducer, idleReducer } from '../slices';
3
3
  export var appReducer = combineReducers({
4
4
  alerts: alertsReducer,
5
5
  arrivals: arrivalsReducer,
@@ -26,7 +26,8 @@ export var appReducer = combineReducers({
26
26
  settings: settingsReducer,
27
27
  sidebar: sidebarReducer,
28
28
  surcharges: surchargesReducer,
29
- taxes: taxesReducer
29
+ taxes: taxesReducer,
30
+ idle: idleReducer
30
31
  });
31
32
  var rootReducer = function (state, action) {
32
33
  if (action.type === 'clearState') {
@@ -0,0 +1,12 @@
1
+ import { Handlers, ScreenConfig } from '@open-tender/ui';
2
+ import { ReactNode } from 'react';
3
+ declare const IdleModal: ({ close, navigate, children }: {
4
+ close: () => void;
5
+ navigate: (route: string) => void;
6
+ children: (props: {
7
+ config: ScreenConfig;
8
+ modalContentConfig: ScreenConfig;
9
+ handlers: Handlers;
10
+ }) => ReactNode;
11
+ }) => ReactNode;
12
+ export default IdleModal;
@@ -0,0 +1,29 @@
1
+ import { useCallback, useEffect, useMemo } from 'react';
2
+ import { useAppDispatch, useAppSelector } from '../app/hooks';
3
+ import { resetCart, resetCustomer, resetCustomerIdentify, resetMenu, resetPosCheckout, selectKioskConfig, setOrderId } from '../slices';
4
+ var WAITING_TIME_IN_SECONDS = 15;
5
+ var IdleModal = function (_a) {
6
+ var close = _a.close, navigate = _a.navigate, children = _a.children;
7
+ var dispatch = useAppDispatch();
8
+ var _b = useAppSelector(selectKioskConfig), config = _b.idleModal, modalContentConfig = _b.modalContent;
9
+ var handleInactivity = useCallback(function () {
10
+ dispatch(resetPosCheckout());
11
+ dispatch(setOrderId(null));
12
+ dispatch(resetCart());
13
+ dispatch(resetCustomerIdentify());
14
+ dispatch(resetCustomer());
15
+ dispatch(resetMenu());
16
+ close();
17
+ navigate('/');
18
+ }, [dispatch, navigate, close]);
19
+ var handlers = useMemo(function () { return ({ close: close }); }, [close]);
20
+ useEffect(function () {
21
+ var timeout = setTimeout(handleInactivity, WAITING_TIME_IN_SECONDS * 1000);
22
+ return function () { return clearTimeout(timeout); };
23
+ // eslint-disable-next-line react-hooks/exhaustive-deps
24
+ }, []);
25
+ if (!config)
26
+ return null;
27
+ return children({ config: config, modalContentConfig: modalContentConfig, handlers: handlers });
28
+ };
29
+ export default IdleModal;
@@ -5,8 +5,9 @@ import { getKeyboardValue } from '../utils';
5
5
  var Keypad = function (_a) {
6
6
  var children = _a.children, maxLength = _a.maxLength, type = _a.type, value = _a.value, handlers = _a.handlers;
7
7
  var _b = useAppSelector(selectKioskConfig), keypad = _b.keypad, numpad = _b.numpad;
8
- var config = type === 'numeric' ? numpad : keypad;
9
- var handleOnKeyPress = useCallback(function (key) { return handlers.change(getKeyboardValue(key, value, maxLength)); }, [maxLength, value, handlers]);
8
+ var isDollar = type === 'dollar';
9
+ var config = type === 'numeric' || isDollar ? numpad : keypad;
10
+ var handleOnKeyPress = useCallback(function (key) { return handlers.change(getKeyboardValue(key, value, maxLength)); }, [handlers, value, maxLength]);
10
11
  var viewHandlers = useMemo(function () { return ({ keyPress: handleOnKeyPress }); }, [handleOnKeyPress]);
11
12
  if (!config)
12
13
  return null;
@@ -4,4 +4,5 @@ export * from './components';
4
4
  export * from './hooks';
5
5
  export * from './slices';
6
6
  export * from './utils';
7
+ export * from './middlewares';
7
8
  export { appReducer, tempConfig };
package/dist/esm/index.js CHANGED
@@ -4,4 +4,5 @@ export * from './components';
4
4
  export * from './hooks';
5
5
  export * from './slices';
6
6
  export * from './utils';
7
+ export * from './middlewares';
7
8
  export { appReducer, tempConfig };
@@ -0,0 +1,2 @@
1
+ import { Middleware } from '@reduxjs/toolkit';
2
+ export declare const idleMiddleware: Middleware;
@@ -0,0 +1,23 @@
1
+ import { setIdleTimerId, setIsIdle } from '../slices';
2
+ import { ReducerType } from '../slices/types';
3
+ var DEFAULT_PAGE_TIMEOUT = 60;
4
+ export var idleMiddleware = function (store) { return function (next) { return function (action) {
5
+ var _a, _b;
6
+ var result = next(action);
7
+ if (action.type === "".concat(ReducerType.Idle, "/setIsIdle") ||
8
+ action.type === "".concat(ReducerType.Idle, "/setIdleTimerId")) {
9
+ return result;
10
+ }
11
+ var state = store.getState();
12
+ var isIdle = state.idle.isIdle;
13
+ if (isIdle)
14
+ store.dispatch(setIsIdle(false));
15
+ var prevTimerId = state.idle.timerId;
16
+ clearTimeout(prevTimerId);
17
+ var pageTimeout = (_b = (_a = state.kiosk.store) === null || _a === void 0 ? void 0 : _a.page_timeout) !== null && _b !== void 0 ? _b : DEFAULT_PAGE_TIMEOUT * 1000;
18
+ var timerId = setTimeout(function () {
19
+ store.dispatch(setIsIdle(true));
20
+ }, pageTimeout);
21
+ store.dispatch(setIdleTimerId(timerId));
22
+ return result;
23
+ }; }; };
@@ -0,0 +1 @@
1
+ export * from './idleMiddleware';
@@ -0,0 +1 @@
1
+ export * from './idleMiddleware';
@@ -62,6 +62,7 @@ export declare const selectCustomerLoyalty: ((state: {
62
62
  sidebar: import("./sidebar").SidebarState;
63
63
  surcharges: import("./surcharges").SurchargesState;
64
64
  taxes: import("./taxes").TaxesState;
65
+ idle: import("./idle").IdleState;
65
66
  }) => LoyaltyProgramSummary | null) & {
66
67
  clearCache: () => void;
67
68
  resultsCount: () => number;
@@ -0,0 +1,8 @@
1
+ import { AppState } from '../app';
2
+ export interface IdleState {
3
+ timerId: number | undefined;
4
+ isIdle: boolean;
5
+ }
6
+ export declare const resetIdleState: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"idle/resetIdleState">, setIdleTimerId: import("@reduxjs/toolkit").ActionCreatorWithPayload<any, "idle/setIdleTimerId">, setIsIdle: import("@reduxjs/toolkit").ActionCreatorWithPayload<any, "idle/setIsIdle">;
7
+ export declare const selectIdleState: (state: AppState) => IdleState;
8
+ export declare const idleReducer: import("redux").Reducer<IdleState>;
@@ -0,0 +1,23 @@
1
+ var _a;
2
+ import { createSlice } from '@reduxjs/toolkit';
3
+ import { ReducerType } from './types';
4
+ var initialState = {
5
+ timerId: undefined,
6
+ isIdle: false
7
+ };
8
+ var idleSlice = createSlice({
9
+ name: ReducerType.Idle,
10
+ initialState: initialState,
11
+ reducers: {
12
+ resetIdleState: function () { return initialState; },
13
+ setIdleTimerId: function (state, action) {
14
+ state.timerId = action.payload;
15
+ },
16
+ setIsIdle: function (state, action) {
17
+ state.isIdle = action.payload;
18
+ }
19
+ }
20
+ });
21
+ export var resetIdleState = (_a = idleSlice.actions, _a.resetIdleState), setIdleTimerId = _a.setIdleTimerId, setIsIdle = _a.setIsIdle;
22
+ export var selectIdleState = function (state) { return state.idle; };
23
+ export var idleReducer = idleSlice.reducer;
@@ -24,3 +24,4 @@ export * from './settings';
24
24
  export * from './sidebar';
25
25
  export * from './surcharges';
26
26
  export * from './taxes';
27
+ export * from './idle';
@@ -24,3 +24,4 @@ export * from './settings';
24
24
  export * from './sidebar';
25
25
  export * from './surcharges';
26
26
  export * from './taxes';
27
+ export * from './idle';
@@ -69,6 +69,7 @@ export declare const selectStoreSettings: ((state: {
69
69
  sidebar: import("./sidebar").SidebarState;
70
70
  surcharges: import("./surcharges").SurchargesState;
71
71
  taxes: import("./taxes").TaxesState;
72
+ idle: import("./idle").IdleState;
72
73
  }) => Store) & {
73
74
  clearCache: () => void;
74
75
  resultsCount: () => number;
@@ -117,6 +118,7 @@ export declare const selectKioskTerminal: ((state: {
117
118
  sidebar: import("./sidebar").SidebarState;
118
119
  surcharges: import("./surcharges").SurchargesState;
119
120
  taxes: import("./taxes").TaxesState;
121
+ idle: import("./idle").IdleState;
120
122
  }) => import("@open-tender/types").PosTerminal | null) & {
121
123
  clearCache: () => void;
122
124
  resultsCount: () => number;
@@ -165,6 +167,7 @@ export declare const selectKioskHasPrinter: ((state: {
165
167
  sidebar: import("./sidebar").SidebarState;
166
168
  surcharges: import("./surcharges").SurchargesState;
167
169
  taxes: import("./taxes").TaxesState;
170
+ idle: import("./idle").IdleState;
168
171
  }) => boolean) & {
169
172
  clearCache: () => void;
170
173
  resultsCount: () => number;
@@ -213,6 +216,7 @@ export declare const selectKioskHasScanner: ((state: {
213
216
  sidebar: import("./sidebar").SidebarState;
214
217
  surcharges: import("./surcharges").SurchargesState;
215
218
  taxes: import("./taxes").TaxesState;
219
+ idle: import("./idle").IdleState;
216
220
  }) => boolean) & {
217
221
  clearCache: () => void;
218
222
  resultsCount: () => number;
@@ -261,6 +265,7 @@ export declare const selectKioskApi: ((state: {
261
265
  sidebar: import("./sidebar").SidebarState;
262
266
  surcharges: import("./surcharges").SurchargesState;
263
267
  taxes: import("./taxes").TaxesState;
268
+ idle: import("./idle").IdleState;
264
269
  }) => string) & {
265
270
  clearCache: () => void;
266
271
  resultsCount: () => number;
@@ -309,6 +314,7 @@ export declare const selectKioskConfig: ((state: {
309
314
  sidebar: import("./sidebar").SidebarState;
310
315
  surcharges: import("./surcharges").SurchargesState;
311
316
  taxes: import("./taxes").TaxesState;
317
+ idle: import("./idle").IdleState;
312
318
  }) => AppConfig) & {
313
319
  clearCache: () => void;
314
320
  resultsCount: () => number;
@@ -357,6 +363,7 @@ export declare const selectKioskConfigScreen: (screen: string) => ((state: {
357
363
  sidebar: import("./sidebar").SidebarState;
358
364
  surcharges: import("./surcharges").SurchargesState;
359
365
  taxes: import("./taxes").TaxesState;
366
+ idle: import("./idle").IdleState;
360
367
  }) => import("@open-tender/ui").ScreenConfig | null) & {
361
368
  clearCache: () => void;
362
369
  resultsCount: () => number;
@@ -47,6 +47,7 @@ export declare const selectMenuPagesFiltered: ((state: {
47
47
  sidebar: import("./sidebar").SidebarState;
48
48
  surcharges: import("./surcharges").SurchargesState;
49
49
  taxes: import("./taxes").TaxesState;
50
+ idle: import("./idle").IdleState;
50
51
  }) => {
51
52
  order_type: import("@open-tender/types").FullOrderType;
52
53
  name: string;
@@ -90,6 +90,7 @@ export declare const selectCartIds: ((state: {
90
90
  sidebar: import("./sidebar").SidebarState;
91
91
  surcharges: import("./surcharges").SurchargesState;
92
92
  taxes: import("./taxes").TaxesState;
93
+ idle: import("./idle").IdleState;
93
94
  }) => number[]) & {
94
95
  clearCache: () => void;
95
96
  resultsCount: () => number;
@@ -138,6 +139,7 @@ export declare const selectCartQuantity: ((state: {
138
139
  sidebar: import("./sidebar").SidebarState;
139
140
  surcharges: import("./surcharges").SurchargesState;
140
141
  taxes: import("./taxes").TaxesState;
142
+ idle: import("./idle").IdleState;
141
143
  }) => number) & {
142
144
  clearCache: () => void;
143
145
  resultsCount: () => number;
@@ -186,6 +188,7 @@ export declare const selectCartTotal: ((state: {
186
188
  sidebar: import("./sidebar").SidebarState;
187
189
  surcharges: import("./surcharges").SurchargesState;
188
190
  taxes: import("./taxes").TaxesState;
191
+ idle: import("./idle").IdleState;
189
192
  }) => number) & {
190
193
  clearCache: () => void;
191
194
  resultsCount: () => number;
@@ -234,6 +237,7 @@ export declare const selectCartTotals: ((state: {
234
237
  sidebar: import("./sidebar").SidebarState;
235
238
  surcharges: import("./surcharges").SurchargesState;
236
239
  taxes: import("./taxes").TaxesState;
240
+ idle: import("./idle").IdleState;
237
241
  }) => {
238
242
  count: number;
239
243
  total: number;
@@ -26,5 +26,6 @@ export declare enum ReducerType {
26
26
  Settings = "settings",
27
27
  Sidebar = "sidebar",
28
28
  Surcharges = "surcharges",
29
- Taxes = "taxes"
29
+ Taxes = "taxes",
30
+ Idle = "idle"
30
31
  }
@@ -28,4 +28,5 @@ export var ReducerType;
28
28
  ReducerType["Sidebar"] = "sidebar";
29
29
  ReducerType["Surcharges"] = "surcharges";
30
30
  ReducerType["Taxes"] = "taxes";
31
+ ReducerType["Idle"] = "idle";
31
32
  })(ReducerType || (ReducerType = {}));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@open-tender/store",
3
- "version": "1.1.136",
3
+ "version": "1.1.138",
4
4
  "description": "A library of hooks, reducers, utility functions, and types for use with Open Tender applications that utilize our in-store POS API",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "module": "./dist/esm/index.js",
@@ -61,8 +61,8 @@
61
61
  },
62
62
  "peerDependencies": {
63
63
  "@emotion/react": "^11.11.1",
64
- "@open-tender/types": "^0.4.66",
65
- "@open-tender/ui": "^0.3.98",
64
+ "@open-tender/types": "^0.4.67",
65
+ "@open-tender/ui": "^0.3.100",
66
66
  "@open-tender/utils": "^0.4.39",
67
67
  "@reduxjs/toolkit": "^2.0.1",
68
68
  "date-fns": "2.30.0",