@open-tender/store 1.1.2 → 1.1.4

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 (34) hide show
  1. package/dist/.DS_Store +0 -0
  2. package/dist/cjs/hooks/index.d.ts +5 -1
  3. package/dist/cjs/hooks/index.js +9 -1
  4. package/dist/cjs/hooks/useChipDNATender/index.d.ts +2 -0
  5. package/dist/cjs/hooks/useChipDNATender/index.js +5 -0
  6. package/dist/cjs/hooks/useChipDNATender/useChipDNATender.d.ts +8 -0
  7. package/dist/cjs/hooks/useChipDNATender/useChipDNATender.js +108 -0
  8. package/dist/cjs/hooks/useChipDNATender/useChipDNATender.utils.d.ts +4 -0
  9. package/dist/cjs/hooks/useChipDNATender/useChipDNATender.utils.js +37 -0
  10. package/dist/cjs/hooks/useCustomerRewards.d.ts +14 -0
  11. package/dist/cjs/hooks/useCustomerRewards.js +45 -0
  12. package/dist/cjs/hooks/useOrder.d.ts +24 -0
  13. package/dist/cjs/hooks/useOrder.js +52 -0
  14. package/dist/cjs/hooks/useOrderValidate.d.ts +2 -0
  15. package/dist/cjs/hooks/useOrderValidate.js +22 -0
  16. package/dist/cjs/slices/kiosk.d.ts +112 -0
  17. package/dist/cjs/slices/kiosk.js +24 -1
  18. package/dist/esm/hooks/index.d.ts +5 -1
  19. package/dist/esm/hooks/index.js +5 -1
  20. package/dist/esm/hooks/useChipDNATender/index.d.ts +2 -0
  21. package/dist/esm/hooks/useChipDNATender/index.js +2 -0
  22. package/dist/esm/hooks/useChipDNATender/useChipDNATender.d.ts +8 -0
  23. package/dist/esm/hooks/useChipDNATender/useChipDNATender.js +106 -0
  24. package/dist/esm/hooks/useChipDNATender/useChipDNATender.utils.d.ts +4 -0
  25. package/dist/esm/hooks/useChipDNATender/useChipDNATender.utils.js +33 -0
  26. package/dist/esm/hooks/useCustomerRewards.d.ts +14 -0
  27. package/dist/esm/hooks/useCustomerRewards.js +43 -0
  28. package/dist/esm/hooks/useOrder.d.ts +24 -0
  29. package/dist/esm/hooks/useOrder.js +50 -0
  30. package/dist/esm/hooks/useOrderValidate.d.ts +2 -0
  31. package/dist/esm/hooks/useOrderValidate.js +20 -0
  32. package/dist/esm/slices/kiosk.d.ts +112 -0
  33. package/dist/esm/slices/kiosk.js +23 -0
  34. package/package.json +6 -4
package/dist/.DS_Store CHANGED
Binary file
@@ -1,9 +1,13 @@
1
1
  import useBarcode from './useBarcode';
2
2
  import useCardSwipe from './useCardSwipe';
3
+ import useChipDNATender from './useChipDNATender';
4
+ import useCustomerRewards from './useCustomerRewards';
3
5
  import useEmployee from './useEmployee';
4
6
  import useGiftCardBalance from './useGiftCardBalance';
5
7
  import { useKioskImageUrl } from './useKioskImageUrl';
8
+ import useOrder from './useOrder';
9
+ import useOrderValidate from './useOrderValidate';
6
10
  import usePrevious from './usePrevious';
7
11
  import usePunch from './usePunch';
8
12
  import useRefund from './useRefund';
9
- export { useBarcode, useCardSwipe, useEmployee, useGiftCardBalance, useKioskImageUrl, usePrevious, usePunch, useRefund };
13
+ export { useBarcode, useCardSwipe, useChipDNATender, useCustomerRewards, useEmployee, useGiftCardBalance, useKioskImageUrl, useOrder, useOrderValidate, usePrevious, usePunch, useRefund };
@@ -1,17 +1,25 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useRefund = exports.usePunch = exports.usePrevious = exports.useKioskImageUrl = exports.useGiftCardBalance = exports.useEmployee = exports.useCardSwipe = exports.useBarcode = void 0;
3
+ exports.useRefund = exports.usePunch = exports.usePrevious = exports.useOrderValidate = exports.useOrder = exports.useKioskImageUrl = exports.useGiftCardBalance = exports.useEmployee = exports.useCustomerRewards = exports.useChipDNATender = exports.useCardSwipe = exports.useBarcode = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var useBarcode_1 = tslib_1.__importDefault(require("./useBarcode"));
6
6
  exports.useBarcode = useBarcode_1.default;
7
7
  var useCardSwipe_1 = tslib_1.__importDefault(require("./useCardSwipe"));
8
8
  exports.useCardSwipe = useCardSwipe_1.default;
9
+ var useChipDNATender_1 = tslib_1.__importDefault(require("./useChipDNATender"));
10
+ exports.useChipDNATender = useChipDNATender_1.default;
11
+ var useCustomerRewards_1 = tslib_1.__importDefault(require("./useCustomerRewards"));
12
+ exports.useCustomerRewards = useCustomerRewards_1.default;
9
13
  var useEmployee_1 = tslib_1.__importDefault(require("./useEmployee"));
10
14
  exports.useEmployee = useEmployee_1.default;
11
15
  var useGiftCardBalance_1 = tslib_1.__importDefault(require("./useGiftCardBalance"));
12
16
  exports.useGiftCardBalance = useGiftCardBalance_1.default;
13
17
  var useKioskImageUrl_1 = require("./useKioskImageUrl");
14
18
  Object.defineProperty(exports, "useKioskImageUrl", { enumerable: true, get: function () { return useKioskImageUrl_1.useKioskImageUrl; } });
19
+ var useOrder_1 = tslib_1.__importDefault(require("./useOrder"));
20
+ exports.useOrder = useOrder_1.default;
21
+ var useOrderValidate_1 = tslib_1.__importDefault(require("./useOrderValidate"));
22
+ exports.useOrderValidate = useOrderValidate_1.default;
15
23
  var usePrevious_1 = tslib_1.__importDefault(require("./usePrevious"));
16
24
  exports.usePrevious = usePrevious_1.default;
17
25
  var usePunch_1 = tslib_1.__importDefault(require("./usePunch"));
@@ -0,0 +1,2 @@
1
+ import useChipDNATender from './useChipDNATender';
2
+ export default useChipDNATender;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var tslib_1 = require("tslib");
4
+ var useChipDNATender_1 = tslib_1.__importDefault(require("./useChipDNATender"));
5
+ exports.default = useChipDNATender_1.default;
@@ -0,0 +1,8 @@
1
+ declare const useChipDNATender: (amount: string | null) => {
2
+ message: string;
3
+ success: string | null;
4
+ canceled: string | null;
5
+ error: string | null;
6
+ cancel: () => Promise<void>;
7
+ };
8
+ export default useChipDNATender;
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var tslib_1 = require("tslib");
4
+ var react_1 = require("react");
5
+ var utils_1 = require("@open-tender/utils");
6
+ var hooks_1 = require("../../app/hooks");
7
+ var slices_1 = require("../../slices");
8
+ var useChipDNATender_utils_1 = require("./useChipDNATender.utils");
9
+ // JC Amex card token: 440abfc9cc7518f1ad76e2be56f19fe4
10
+ var useChipDNATender = function (amount) {
11
+ var dispatch = (0, hooks_1.useAppDispatch)();
12
+ var orderId = (0, hooks_1.useAppSelector)(slices_1.selectOrder).orderId;
13
+ var api = (0, hooks_1.useAppSelector)(slices_1.selectApi);
14
+ var _a = (0, react_1.useState)(false), reading = _a[0], setReading = _a[1];
15
+ var _b = (0, react_1.useState)('Pending...'), message = _b[0], setMessage = _b[1];
16
+ var _c = (0, react_1.useState)(null), success = _c[0], setSuccess = _c[1];
17
+ var _d = (0, react_1.useState)(null), canceled = _d[0], setCanceled = _d[1];
18
+ var _e = (0, react_1.useState)(null), error = _e[0], setError = _e[1];
19
+ (0, react_1.useEffect)(function () {
20
+ var readChipDNA = function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
21
+ var data, response, reader_1, card_token_1, card_msg_1, err_1, error_1, detail;
22
+ return tslib_1.__generator(this, function (_a) {
23
+ switch (_a.label) {
24
+ case 0:
25
+ setReading(true);
26
+ _a.label = 1;
27
+ case 1:
28
+ _a.trys.push([1, 3, , 4]);
29
+ if (!amount)
30
+ return [2 /*return*/];
31
+ data = { tender_type: 'CREDIT', amount: amount };
32
+ if (!orderId)
33
+ return [2 /*return*/];
34
+ return [4 /*yield*/, api.postChipDNATender(orderId, data)];
35
+ case 2:
36
+ response = _a.sent();
37
+ reader_1 = response.getReader();
38
+ card_token_1 = null;
39
+ card_msg_1 = null;
40
+ reader_1.read().then(function processText(_a) {
41
+ var done = _a.done, value = _a.value;
42
+ // done - true if the stream has already given you all its data.
43
+ // value - some data. Always undefined when done is true.
44
+ if (done) {
45
+ if (card_token_1 || card_msg_1 === 'Tender Created') {
46
+ setSuccess('Card authorized!');
47
+ }
48
+ else if (card_msg_1 === 'Transaction Declined') {
49
+ setError('Transaction DECLINED. Please try again.');
50
+ }
51
+ else if (card_msg_1 !== 'Transaction Canceled') {
52
+ setError('Card read error. Please try again.');
53
+ }
54
+ dispatch((0, slices_1.completeChipDNA)(card_token_1));
55
+ return;
56
+ }
57
+ var _b = (0, useChipDNATender_utils_1.processMessage)(value), msg = _b.msg, token = _b.token;
58
+ if (msg)
59
+ setMessage(msg);
60
+ card_token_1 = token;
61
+ card_msg_1 = msg;
62
+ // console.log('card_msg', card_msg)
63
+ // console.log('card_token', card_token)
64
+ return reader_1.read().then(processText);
65
+ });
66
+ return [3 /*break*/, 4];
67
+ case 3:
68
+ err_1 = _a.sent();
69
+ error_1 = (0, utils_1.handleRespError)(err_1);
70
+ detail = error_1.detail;
71
+ setError(detail || 'Unknown payment error. Please contact support.');
72
+ return [3 /*break*/, 4];
73
+ case 4: return [2 /*return*/];
74
+ }
75
+ });
76
+ }); };
77
+ if (!reading && amount && amount !== '0.00')
78
+ readChipDNA();
79
+ }, [api, dispatch, reading, orderId, amount]);
80
+ var cancel = function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
81
+ var err_2, detail;
82
+ return tslib_1.__generator(this, function (_a) {
83
+ switch (_a.label) {
84
+ case 0:
85
+ _a.trys.push([0, 2, , 3]);
86
+ return [4 /*yield*/, api.postChipDNACancel()];
87
+ case 1:
88
+ _a.sent();
89
+ setCanceled('EMV transaction canceled');
90
+ return [3 /*break*/, 3];
91
+ case 2:
92
+ err_2 = _a.sent();
93
+ detail = (0, utils_1.handleRespError)(err_2).detail;
94
+ setError(detail || 'Unknown cancellation error. Please contact support.');
95
+ return [3 /*break*/, 3];
96
+ case 3: return [2 /*return*/];
97
+ }
98
+ });
99
+ }); };
100
+ return {
101
+ message: message,
102
+ success: success,
103
+ canceled: canceled,
104
+ error: error,
105
+ cancel: cancel
106
+ };
107
+ };
108
+ exports.default = useChipDNATender;
@@ -0,0 +1,4 @@
1
+ export declare const processMessage: (value?: BufferSource) => {
2
+ msg: string | null;
3
+ token: any;
4
+ };
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.processMessage = void 0;
4
+ var utils_1 = require("@open-tender/utils");
5
+ var makeMessage = function (event) {
6
+ if (!event)
7
+ return null;
8
+ return event
9
+ .replace('event: ', '')
10
+ .split('_')
11
+ .map(function (s) { return (0, utils_1.capitalize)(s); })
12
+ .join(' ');
13
+ };
14
+ var parseToken = function (data) {
15
+ if (!data)
16
+ return null;
17
+ try {
18
+ var tender = JSON.parse(data.replace('data: ', ''));
19
+ var token = (tender.credit_card || {}).token;
20
+ return token || null;
21
+ }
22
+ catch (err) {
23
+ return null;
24
+ }
25
+ };
26
+ var processMessage = function (value) {
27
+ var decoded = new TextDecoder('utf-8').decode(value);
28
+ var lines = decoded.split('\n');
29
+ var events = lines.filter(function (i) { return i.startsWith('event:'); });
30
+ var event = events[events.length - 1];
31
+ var msg = makeMessage(event);
32
+ var datas = lines.filter(function (i) { return i.startsWith('data:'); });
33
+ var data = datas[datas.length - 1];
34
+ var token = parseToken(data);
35
+ return { msg: msg, token: token };
36
+ };
37
+ exports.processMessage = processMessage;
@@ -0,0 +1,14 @@
1
+ import { CustomerIdentify, Discounts, OrderCart } from '@open-tender/types';
2
+ declare const useCustomerRewards: () => {
3
+ customer: CustomerIdentify | null;
4
+ hasDeals: boolean;
5
+ hasRewards: boolean;
6
+ hasPoints: boolean;
7
+ deals: Discounts;
8
+ rewards: Discounts;
9
+ items: OrderCart;
10
+ points: number;
11
+ pointsApplied: number;
12
+ pointsRemaining: number;
13
+ };
14
+ export default useCustomerRewards;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var tslib_1 = require("tslib");
4
+ var hooks_1 = require("../app/hooks");
5
+ var slices_1 = require("../slices");
6
+ var useCustomerRewards = function () {
7
+ var customer = (0, hooks_1.useAppSelector)(slices_1.selectCustomerIdentified);
8
+ var _a = (0, hooks_1.useAppSelector)(slices_1.selectCustomer), rewards = _a.rewards, deals = _a.deals;
9
+ var _b = (0, hooks_1.useAppSelector)(slices_1.selectPosCheckout) || {}, check = _b.check, _c = _b.points, checkPoints = _c === void 0 ? [] : _c;
10
+ var _d = (check || {}).cart, cart = _d === void 0 ? [] : _d;
11
+ if (!customer) {
12
+ return {
13
+ customer: null,
14
+ hasDeals: false,
15
+ hasRewards: false,
16
+ hasPoints: false,
17
+ deals: [],
18
+ rewards: [],
19
+ items: [],
20
+ points: 0,
21
+ pointsApplied: 0,
22
+ pointsRemaining: 0
23
+ };
24
+ }
25
+ // const rewards = customer.rewards
26
+ var points = parseInt(customer.points);
27
+ var items = cart
28
+ .map(function (i, index) { return (tslib_1.__assign(tslib_1.__assign({}, i), { points: i.points ? tslib_1.__assign(tslib_1.__assign({}, i.points), { index: index }) : null })); })
29
+ .filter(function (i) { return i.points && i.points.per < points; });
30
+ var pointsApplied = checkPoints.reduce(function (t, i) { return (t += i.points); }, 0);
31
+ var pointsRemaining = points - pointsApplied;
32
+ return {
33
+ customer: customer,
34
+ hasDeals: deals.length > 0,
35
+ hasRewards: rewards.length > 0,
36
+ hasPoints: items.length > 0,
37
+ deals: deals,
38
+ rewards: rewards,
39
+ items: items,
40
+ points: points,
41
+ pointsApplied: pointsApplied,
42
+ pointsRemaining: pointsRemaining
43
+ };
44
+ };
45
+ exports.default = useCustomerRewards;
@@ -0,0 +1,24 @@
1
+ import { Order } from '@open-tender/types';
2
+ declare const useOrder: (order: Order, callback?: () => void) => {
3
+ isInPrepQueue: boolean;
4
+ isUpcoming: boolean;
5
+ itemImages: {
6
+ title: string;
7
+ imageUrl: string;
8
+ }[];
9
+ itemNames: string;
10
+ status: import("@open-tender/types").OrderStatus;
11
+ orderId: number | null;
12
+ orderPrep: import("@open-tender/types").OrderPrep | null;
13
+ orderType: import("@open-tender/types").OrderType;
14
+ orderTypeName: string | undefined;
15
+ reorder: () => void;
16
+ requestedAt: string;
17
+ revenueCenter: import("@open-tender/types").OrderRevenueCenter;
18
+ serviceType: import("@open-tender/types").ServiceType;
19
+ subtitle: string;
20
+ orderNo: string;
21
+ title: string;
22
+ total: `${number}.${number}`;
23
+ };
24
+ export default useOrder;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var utils_1 = require("@open-tender/utils");
4
+ var hooks_1 = require("../app/hooks");
5
+ var slices_1 = require("../slices");
6
+ var useOrder = function (order, callback) {
7
+ var dispatch = (0, hooks_1.useAppDispatch)();
8
+ var orderId = order.order_id, status = order.status, serviceType = order.service_type, orderType = order.order_type, revenueCenter = order.revenue_center, requested_at = order.requested_at, timezone = order.timezone, cart = order.cart, totals = order.totals, orderPrep = order.order_prep;
9
+ var _a = (orderPrep || {}).is_in_prep_queue, isInPrepQueue = _a === void 0 ? false : _a;
10
+ var orderTypeName = (0, utils_1.makeOrderTypeName)(orderType, serviceType);
11
+ var tz = utils_1.timezoneMap[timezone];
12
+ var requestedAt = (0, utils_1.isoToDateStr)(requested_at, tz, 'MMMM d, yyyy @ h:mma');
13
+ var isUpcoming = (0, utils_1.isoToDate)(requested_at) > new Date();
14
+ var itemImages = cart
15
+ .map(function (i) {
16
+ return i.images
17
+ .filter(function (m) { return m.type === 'SMALL_IMAGE' && m.url; })
18
+ .map(function (image) { return ({ title: i.name, imageUrl: image.url }); });
19
+ })
20
+ .flat();
21
+ var itemNames = cart.map(function (i) { return i.name; }).join(', ');
22
+ var total = totals.total;
23
+ var orderNo = "Order #".concat(orderId);
24
+ var title = "".concat(orderTypeName, " from ").concat(revenueCenter.name);
25
+ var subtitle = "".concat(requestedAt, " | ").concat((0, utils_1.formatDollars)(total));
26
+ var reorder = function () {
27
+ // const { revenue_center_id: revenueCenterId } = revenueCenter
28
+ dispatch((0, slices_1.setOrderServiceType)({ orderType: 'OLO', serviceType: 'WALKIN' }));
29
+ if (callback)
30
+ callback();
31
+ };
32
+ return {
33
+ isInPrepQueue: isInPrepQueue,
34
+ isUpcoming: isUpcoming,
35
+ itemImages: itemImages,
36
+ itemNames: itemNames,
37
+ status: status,
38
+ orderId: orderId,
39
+ orderPrep: orderPrep,
40
+ orderType: orderType,
41
+ orderTypeName: orderTypeName,
42
+ reorder: reorder,
43
+ requestedAt: requestedAt,
44
+ revenueCenter: revenueCenter,
45
+ serviceType: serviceType,
46
+ subtitle: subtitle,
47
+ orderNo: orderNo,
48
+ title: title,
49
+ total: total
50
+ };
51
+ };
52
+ exports.default = useOrder;
@@ -0,0 +1,2 @@
1
+ declare const useOrderValidate: () => void;
2
+ export default useOrderValidate;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var tslib_1 = require("tslib");
4
+ var react_1 = require("react");
5
+ var react_fast_compare_1 = tslib_1.__importDefault(require("react-fast-compare"));
6
+ var slices_1 = require("../slices");
7
+ var hooks_1 = require("../app/hooks");
8
+ var usePrevious_1 = tslib_1.__importDefault(require("./usePrevious"));
9
+ var useOrderValidate = function () {
10
+ var dispatch = (0, hooks_1.useAppDispatch)();
11
+ var checkout = (0, hooks_1.useAppSelector)(slices_1.selectPosCheckout);
12
+ var order = (0, hooks_1.useAppSelector)(slices_1.selectOrder);
13
+ var preparedOrder = (0, slices_1.prepareOrder)(order, checkout);
14
+ var ordeCheckout = tslib_1.__rest(preparedOrder || {}, []);
15
+ var prevOrderCheckout = (0, usePrevious_1.default)(ordeCheckout);
16
+ (0, react_1.useEffect)(function () {
17
+ if (preparedOrder && !(0, react_fast_compare_1.default)(prevOrderCheckout, ordeCheckout)) {
18
+ dispatch((0, slices_1.validatePosOrder)());
19
+ }
20
+ }, [dispatch, preparedOrder, prevOrderCheckout, ordeCheckout]);
21
+ };
22
+ exports.default = useOrderValidate;
@@ -40,6 +40,118 @@ export declare const selectKiosk: (state: AppState) => KioskState;
40
40
  export declare const selectKioskVersion: (state: AppState) => string | null | undefined;
41
41
  export declare const selectKioskStore: (state: AppState) => Store | null;
42
42
  export declare const selectKioskBrand: (state: AppState) => KioskBrand | null;
43
+ export declare const selectKioskTerminal: ((state: {
44
+ alerts: import("@open-tender/types").Alerts;
45
+ arrivals: import("./arrivals").ArrivalsState;
46
+ cartSummary: import("./cartSummary").CartSummaryState;
47
+ checkout: import("./checkout").CheckoutState;
48
+ config: import("./config").ConfigState;
49
+ customer: import("./customer").CustomerState;
50
+ customerIdentify: import("./customerIdentify").CustomerIdentifyState;
51
+ deals: import("./deals").DealsState;
52
+ discounts: import("./discounts").DiscountsState;
53
+ errorAlerts: import("./errorAlerts").ErrorAlertsState;
54
+ kds: import("./kds").KdsState;
55
+ kiosk: KioskState;
56
+ menu: import("./menu").MenuState;
57
+ menuPages: import("./menuPages").MenuPagesState;
58
+ modal: import("./modal").ModalState;
59
+ notifications: import("@open-tender/types").Notifications;
60
+ offlineAuths: import("./offlineAuths").OfflineAuthsState;
61
+ order: import("./order").OrderState;
62
+ pos: import("./pos").PosState;
63
+ punches: import("./punches").PunchesState;
64
+ refund: import("./refund").RefundState;
65
+ settings: import("./settings").SettingsState;
66
+ sidebar: import("./sidebar").SidebarState;
67
+ surcharges: import("./surcharges").SurchargesState;
68
+ taxes: import("./taxes").TaxesState;
69
+ }) => import("@open-tender/types").PosTerminal | null) & {
70
+ clearCache: () => void;
71
+ resultsCount: () => number;
72
+ resetResultsCount: () => void;
73
+ } & {
74
+ resultFunc: (resultFuncArgs_0: {
75
+ devices: Devices | null;
76
+ terminalId: number | null;
77
+ }) => import("@open-tender/types").PosTerminal | null;
78
+ memoizedResultFunc: ((resultFuncArgs_0: {
79
+ devices: Devices | null;
80
+ terminalId: number | null;
81
+ }) => import("@open-tender/types").PosTerminal | null) & {
82
+ clearCache: () => void;
83
+ resultsCount: () => number;
84
+ resetResultsCount: () => void;
85
+ };
86
+ lastResult: () => import("@open-tender/types").PosTerminal | null;
87
+ dependencies: [(state: AppState) => {
88
+ devices: Devices | null;
89
+ terminalId: number | null;
90
+ }];
91
+ recomputations: () => number;
92
+ resetRecomputations: () => void;
93
+ dependencyRecomputations: () => number;
94
+ resetDependencyRecomputations: () => void;
95
+ } & {
96
+ argsMemoize: typeof import("reselect").weakMapMemoize;
97
+ memoize: typeof import("reselect").weakMapMemoize;
98
+ };
99
+ export declare const selectKioskShowPrint: ((state: {
100
+ alerts: import("@open-tender/types").Alerts;
101
+ arrivals: import("./arrivals").ArrivalsState;
102
+ cartSummary: import("./cartSummary").CartSummaryState;
103
+ checkout: import("./checkout").CheckoutState;
104
+ config: import("./config").ConfigState;
105
+ customer: import("./customer").CustomerState;
106
+ customerIdentify: import("./customerIdentify").CustomerIdentifyState;
107
+ deals: import("./deals").DealsState;
108
+ discounts: import("./discounts").DiscountsState;
109
+ errorAlerts: import("./errorAlerts").ErrorAlertsState;
110
+ kds: import("./kds").KdsState;
111
+ kiosk: KioskState;
112
+ menu: import("./menu").MenuState;
113
+ menuPages: import("./menuPages").MenuPagesState;
114
+ modal: import("./modal").ModalState;
115
+ notifications: import("@open-tender/types").Notifications;
116
+ offlineAuths: import("./offlineAuths").OfflineAuthsState;
117
+ order: import("./order").OrderState;
118
+ pos: import("./pos").PosState;
119
+ punches: import("./punches").PunchesState;
120
+ refund: import("./refund").RefundState;
121
+ settings: import("./settings").SettingsState;
122
+ sidebar: import("./sidebar").SidebarState;
123
+ surcharges: import("./surcharges").SurchargesState;
124
+ taxes: import("./taxes").TaxesState;
125
+ }) => boolean) & {
126
+ clearCache: () => void;
127
+ resultsCount: () => number;
128
+ resetResultsCount: () => void;
129
+ } & {
130
+ resultFunc: (resultFuncArgs_0: {
131
+ devices: Devices | null;
132
+ terminalId: number | null;
133
+ }) => boolean;
134
+ memoizedResultFunc: ((resultFuncArgs_0: {
135
+ devices: Devices | null;
136
+ terminalId: number | null;
137
+ }) => boolean) & {
138
+ clearCache: () => void;
139
+ resultsCount: () => number;
140
+ resetResultsCount: () => void;
141
+ };
142
+ lastResult: () => boolean;
143
+ dependencies: [(state: AppState) => {
144
+ devices: Devices | null;
145
+ terminalId: number | null;
146
+ }];
147
+ recomputations: () => number;
148
+ resetRecomputations: () => void;
149
+ dependencyRecomputations: () => number;
150
+ resetDependencyRecomputations: () => void;
151
+ } & {
152
+ argsMemoize: typeof import("reselect").weakMapMemoize;
153
+ memoize: typeof import("reselect").weakMapMemoize;
154
+ };
43
155
  export declare const selectKioskApi: ((state: {
44
156
  alerts: import("@open-tender/types").Alerts;
45
157
  arrivals: import("./arrivals").ArrivalsState;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  var _a;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.kioskReducer = exports.selectKioskRatio = exports.selectKioskStyles = exports.selectKioskConfigScreen = exports.selectKioskConfig = exports.selectKioskApi = exports.selectKioskBrand = exports.selectKioskStore = exports.selectKioskVersion = exports.selectKiosk = exports.setKioskStyles = exports.setKioskConfig = exports.setKioskRatio = exports.setKioskVersion = exports.incrementKioskRetries = exports.resetKioskRetries = exports.resetKiosk = exports.fetchKioskConfig = exports.KioskActionType = void 0;
4
+ exports.kioskReducer = exports.selectKioskRatio = exports.selectKioskStyles = exports.selectKioskConfigScreen = exports.selectKioskConfig = exports.selectKioskApi = exports.selectKioskShowPrint = exports.selectKioskTerminal = exports.selectKioskBrand = exports.selectKioskStore = exports.selectKioskVersion = exports.selectKiosk = exports.setKioskStyles = exports.setKioskConfig = exports.setKioskRatio = exports.setKioskVersion = exports.incrementKioskRetries = exports.resetKioskRetries = exports.resetKiosk = exports.fetchKioskConfig = exports.KioskActionType = void 0;
5
5
  var tslib_1 = require("tslib");
6
6
  var toolkit_1 = require("@reduxjs/toolkit");
7
7
  var services_1 = require("../services");
@@ -141,6 +141,29 @@ var selectKioskStore = function (state) { return state.kiosk.store; };
141
141
  exports.selectKioskStore = selectKioskStore;
142
142
  var selectKioskBrand = function (state) { return state.kiosk.brand; };
143
143
  exports.selectKioskBrand = selectKioskBrand;
144
+ exports.selectKioskTerminal = (0, toolkit_1.createSelector)(function (state) {
145
+ var devices = state.kiosk.devices;
146
+ var terminalId = state.pos.terminalId;
147
+ return { devices: devices, terminalId: terminalId };
148
+ }, function (_a) {
149
+ var devices = _a.devices, terminalId = _a.terminalId;
150
+ var terminal = devices === null || devices === void 0 ? void 0 : devices.pos_terminals.find(function (i) { return i.pos_terminal_id === terminalId; });
151
+ return terminal || null;
152
+ });
153
+ exports.selectKioskShowPrint = (0, toolkit_1.createSelector)(function (state) {
154
+ var devices = state.kiosk.devices;
155
+ var terminalId = state.pos.terminalId;
156
+ return { devices: devices, terminalId: terminalId };
157
+ }, function (_a) {
158
+ var devices = _a.devices, terminalId = _a.terminalId;
159
+ var terminal = devices === null || devices === void 0 ? void 0 : devices.pos_terminals.find(function (i) { return i.pos_terminal_id === terminalId; });
160
+ if (!terminal)
161
+ return false;
162
+ var print_receipt = terminal.print_receipt, printers = terminal.printers;
163
+ if (print_receipt === 'never' || !printers.length)
164
+ return false;
165
+ return true;
166
+ });
144
167
  exports.selectKioskApi = (0, toolkit_1.createSelector)(function (state) {
145
168
  var app = state.kiosk.app;
146
169
  return app;
@@ -1,9 +1,13 @@
1
1
  import useBarcode from './useBarcode';
2
2
  import useCardSwipe from './useCardSwipe';
3
+ import useChipDNATender from './useChipDNATender';
4
+ import useCustomerRewards from './useCustomerRewards';
3
5
  import useEmployee from './useEmployee';
4
6
  import useGiftCardBalance from './useGiftCardBalance';
5
7
  import { useKioskImageUrl } from './useKioskImageUrl';
8
+ import useOrder from './useOrder';
9
+ import useOrderValidate from './useOrderValidate';
6
10
  import usePrevious from './usePrevious';
7
11
  import usePunch from './usePunch';
8
12
  import useRefund from './useRefund';
9
- export { useBarcode, useCardSwipe, useEmployee, useGiftCardBalance, useKioskImageUrl, usePrevious, usePunch, useRefund };
13
+ export { useBarcode, useCardSwipe, useChipDNATender, useCustomerRewards, useEmployee, useGiftCardBalance, useKioskImageUrl, useOrder, useOrderValidate, usePrevious, usePunch, useRefund };
@@ -1,9 +1,13 @@
1
1
  import useBarcode from './useBarcode';
2
2
  import useCardSwipe from './useCardSwipe';
3
+ import useChipDNATender from './useChipDNATender';
4
+ import useCustomerRewards from './useCustomerRewards';
3
5
  import useEmployee from './useEmployee';
4
6
  import useGiftCardBalance from './useGiftCardBalance';
5
7
  import { useKioskImageUrl } from './useKioskImageUrl';
8
+ import useOrder from './useOrder';
9
+ import useOrderValidate from './useOrderValidate';
6
10
  import usePrevious from './usePrevious';
7
11
  import usePunch from './usePunch';
8
12
  import useRefund from './useRefund';
9
- export { useBarcode, useCardSwipe, useEmployee, useGiftCardBalance, useKioskImageUrl, usePrevious, usePunch, useRefund };
13
+ export { useBarcode, useCardSwipe, useChipDNATender, useCustomerRewards, useEmployee, useGiftCardBalance, useKioskImageUrl, useOrder, useOrderValidate, usePrevious, usePunch, useRefund };
@@ -0,0 +1,2 @@
1
+ import useChipDNATender from './useChipDNATender';
2
+ export default useChipDNATender;
@@ -0,0 +1,2 @@
1
+ import useChipDNATender from './useChipDNATender';
2
+ export default useChipDNATender;
@@ -0,0 +1,8 @@
1
+ declare const useChipDNATender: (amount: string | null) => {
2
+ message: string;
3
+ success: string | null;
4
+ canceled: string | null;
5
+ error: string | null;
6
+ cancel: () => Promise<void>;
7
+ };
8
+ export default useChipDNATender;
@@ -0,0 +1,106 @@
1
+ import { __awaiter, __generator } from "tslib";
2
+ import { useEffect, useState } from 'react';
3
+ import { handleRespError } from '@open-tender/utils';
4
+ import { useAppDispatch, useAppSelector } from '../../app/hooks';
5
+ import { completeChipDNA, selectApi, selectOrder } from '../../slices';
6
+ import { processMessage } from './useChipDNATender.utils';
7
+ // JC Amex card token: 440abfc9cc7518f1ad76e2be56f19fe4
8
+ var useChipDNATender = function (amount) {
9
+ var dispatch = useAppDispatch();
10
+ var orderId = useAppSelector(selectOrder).orderId;
11
+ var api = useAppSelector(selectApi);
12
+ var _a = useState(false), reading = _a[0], setReading = _a[1];
13
+ var _b = useState('Pending...'), message = _b[0], setMessage = _b[1];
14
+ var _c = useState(null), success = _c[0], setSuccess = _c[1];
15
+ var _d = useState(null), canceled = _d[0], setCanceled = _d[1];
16
+ var _e = useState(null), error = _e[0], setError = _e[1];
17
+ useEffect(function () {
18
+ var readChipDNA = function () { return __awaiter(void 0, void 0, void 0, function () {
19
+ var data, response, reader_1, card_token_1, card_msg_1, err_1, error_1, detail;
20
+ return __generator(this, function (_a) {
21
+ switch (_a.label) {
22
+ case 0:
23
+ setReading(true);
24
+ _a.label = 1;
25
+ case 1:
26
+ _a.trys.push([1, 3, , 4]);
27
+ if (!amount)
28
+ return [2 /*return*/];
29
+ data = { tender_type: 'CREDIT', amount: amount };
30
+ if (!orderId)
31
+ return [2 /*return*/];
32
+ return [4 /*yield*/, api.postChipDNATender(orderId, data)];
33
+ case 2:
34
+ response = _a.sent();
35
+ reader_1 = response.getReader();
36
+ card_token_1 = null;
37
+ card_msg_1 = null;
38
+ reader_1.read().then(function processText(_a) {
39
+ var done = _a.done, value = _a.value;
40
+ // done - true if the stream has already given you all its data.
41
+ // value - some data. Always undefined when done is true.
42
+ if (done) {
43
+ if (card_token_1 || card_msg_1 === 'Tender Created') {
44
+ setSuccess('Card authorized!');
45
+ }
46
+ else if (card_msg_1 === 'Transaction Declined') {
47
+ setError('Transaction DECLINED. Please try again.');
48
+ }
49
+ else if (card_msg_1 !== 'Transaction Canceled') {
50
+ setError('Card read error. Please try again.');
51
+ }
52
+ dispatch(completeChipDNA(card_token_1));
53
+ return;
54
+ }
55
+ var _b = processMessage(value), msg = _b.msg, token = _b.token;
56
+ if (msg)
57
+ setMessage(msg);
58
+ card_token_1 = token;
59
+ card_msg_1 = msg;
60
+ // console.log('card_msg', card_msg)
61
+ // console.log('card_token', card_token)
62
+ return reader_1.read().then(processText);
63
+ });
64
+ return [3 /*break*/, 4];
65
+ case 3:
66
+ err_1 = _a.sent();
67
+ error_1 = handleRespError(err_1);
68
+ detail = error_1.detail;
69
+ setError(detail || 'Unknown payment error. Please contact support.');
70
+ return [3 /*break*/, 4];
71
+ case 4: return [2 /*return*/];
72
+ }
73
+ });
74
+ }); };
75
+ if (!reading && amount && amount !== '0.00')
76
+ readChipDNA();
77
+ }, [api, dispatch, reading, orderId, amount]);
78
+ var cancel = function () { return __awaiter(void 0, void 0, void 0, function () {
79
+ var err_2, detail;
80
+ return __generator(this, function (_a) {
81
+ switch (_a.label) {
82
+ case 0:
83
+ _a.trys.push([0, 2, , 3]);
84
+ return [4 /*yield*/, api.postChipDNACancel()];
85
+ case 1:
86
+ _a.sent();
87
+ setCanceled('EMV transaction canceled');
88
+ return [3 /*break*/, 3];
89
+ case 2:
90
+ err_2 = _a.sent();
91
+ detail = handleRespError(err_2).detail;
92
+ setError(detail || 'Unknown cancellation error. Please contact support.');
93
+ return [3 /*break*/, 3];
94
+ case 3: return [2 /*return*/];
95
+ }
96
+ });
97
+ }); };
98
+ return {
99
+ message: message,
100
+ success: success,
101
+ canceled: canceled,
102
+ error: error,
103
+ cancel: cancel
104
+ };
105
+ };
106
+ export default useChipDNATender;
@@ -0,0 +1,4 @@
1
+ export declare const processMessage: (value?: BufferSource) => {
2
+ msg: string | null;
3
+ token: any;
4
+ };
@@ -0,0 +1,33 @@
1
+ import { capitalize } from '@open-tender/utils';
2
+ var makeMessage = function (event) {
3
+ if (!event)
4
+ return null;
5
+ return event
6
+ .replace('event: ', '')
7
+ .split('_')
8
+ .map(function (s) { return capitalize(s); })
9
+ .join(' ');
10
+ };
11
+ var parseToken = function (data) {
12
+ if (!data)
13
+ return null;
14
+ try {
15
+ var tender = JSON.parse(data.replace('data: ', ''));
16
+ var token = (tender.credit_card || {}).token;
17
+ return token || null;
18
+ }
19
+ catch (err) {
20
+ return null;
21
+ }
22
+ };
23
+ export var processMessage = function (value) {
24
+ var decoded = new TextDecoder('utf-8').decode(value);
25
+ var lines = decoded.split('\n');
26
+ var events = lines.filter(function (i) { return i.startsWith('event:'); });
27
+ var event = events[events.length - 1];
28
+ var msg = makeMessage(event);
29
+ var datas = lines.filter(function (i) { return i.startsWith('data:'); });
30
+ var data = datas[datas.length - 1];
31
+ var token = parseToken(data);
32
+ return { msg: msg, token: token };
33
+ };
@@ -0,0 +1,14 @@
1
+ import { CustomerIdentify, Discounts, OrderCart } from '@open-tender/types';
2
+ declare const useCustomerRewards: () => {
3
+ customer: CustomerIdentify | null;
4
+ hasDeals: boolean;
5
+ hasRewards: boolean;
6
+ hasPoints: boolean;
7
+ deals: Discounts;
8
+ rewards: Discounts;
9
+ items: OrderCart;
10
+ points: number;
11
+ pointsApplied: number;
12
+ pointsRemaining: number;
13
+ };
14
+ export default useCustomerRewards;
@@ -0,0 +1,43 @@
1
+ import { __assign } from "tslib";
2
+ import { useAppSelector } from '../app/hooks';
3
+ import { selectCustomer, selectCustomerIdentified, selectPosCheckout } from '../slices';
4
+ var useCustomerRewards = function () {
5
+ var customer = useAppSelector(selectCustomerIdentified);
6
+ var _a = useAppSelector(selectCustomer), rewards = _a.rewards, deals = _a.deals;
7
+ var _b = useAppSelector(selectPosCheckout) || {}, check = _b.check, _c = _b.points, checkPoints = _c === void 0 ? [] : _c;
8
+ var _d = (check || {}).cart, cart = _d === void 0 ? [] : _d;
9
+ if (!customer) {
10
+ return {
11
+ customer: null,
12
+ hasDeals: false,
13
+ hasRewards: false,
14
+ hasPoints: false,
15
+ deals: [],
16
+ rewards: [],
17
+ items: [],
18
+ points: 0,
19
+ pointsApplied: 0,
20
+ pointsRemaining: 0
21
+ };
22
+ }
23
+ // const rewards = customer.rewards
24
+ var points = parseInt(customer.points);
25
+ var items = cart
26
+ .map(function (i, index) { return (__assign(__assign({}, i), { points: i.points ? __assign(__assign({}, i.points), { index: index }) : null })); })
27
+ .filter(function (i) { return i.points && i.points.per < points; });
28
+ var pointsApplied = checkPoints.reduce(function (t, i) { return (t += i.points); }, 0);
29
+ var pointsRemaining = points - pointsApplied;
30
+ return {
31
+ customer: customer,
32
+ hasDeals: deals.length > 0,
33
+ hasRewards: rewards.length > 0,
34
+ hasPoints: items.length > 0,
35
+ deals: deals,
36
+ rewards: rewards,
37
+ items: items,
38
+ points: points,
39
+ pointsApplied: pointsApplied,
40
+ pointsRemaining: pointsRemaining
41
+ };
42
+ };
43
+ export default useCustomerRewards;
@@ -0,0 +1,24 @@
1
+ import { Order } from '@open-tender/types';
2
+ declare const useOrder: (order: Order, callback?: () => void) => {
3
+ isInPrepQueue: boolean;
4
+ isUpcoming: boolean;
5
+ itemImages: {
6
+ title: string;
7
+ imageUrl: string;
8
+ }[];
9
+ itemNames: string;
10
+ status: import("@open-tender/types").OrderStatus;
11
+ orderId: number | null;
12
+ orderPrep: import("@open-tender/types").OrderPrep | null;
13
+ orderType: import("@open-tender/types").OrderType;
14
+ orderTypeName: string | undefined;
15
+ reorder: () => void;
16
+ requestedAt: string;
17
+ revenueCenter: import("@open-tender/types").OrderRevenueCenter;
18
+ serviceType: import("@open-tender/types").ServiceType;
19
+ subtitle: string;
20
+ orderNo: string;
21
+ title: string;
22
+ total: `${number}.${number}`;
23
+ };
24
+ export default useOrder;
@@ -0,0 +1,50 @@
1
+ import { formatDollars, isoToDate, isoToDateStr, makeOrderTypeName, timezoneMap } from '@open-tender/utils';
2
+ import { useAppDispatch } from '../app/hooks';
3
+ import { setOrderServiceType } from '../slices';
4
+ var useOrder = function (order, callback) {
5
+ var dispatch = useAppDispatch();
6
+ var orderId = order.order_id, status = order.status, serviceType = order.service_type, orderType = order.order_type, revenueCenter = order.revenue_center, requested_at = order.requested_at, timezone = order.timezone, cart = order.cart, totals = order.totals, orderPrep = order.order_prep;
7
+ var _a = (orderPrep || {}).is_in_prep_queue, isInPrepQueue = _a === void 0 ? false : _a;
8
+ var orderTypeName = makeOrderTypeName(orderType, serviceType);
9
+ var tz = timezoneMap[timezone];
10
+ var requestedAt = isoToDateStr(requested_at, tz, 'MMMM d, yyyy @ h:mma');
11
+ var isUpcoming = isoToDate(requested_at) > new Date();
12
+ var itemImages = cart
13
+ .map(function (i) {
14
+ return i.images
15
+ .filter(function (m) { return m.type === 'SMALL_IMAGE' && m.url; })
16
+ .map(function (image) { return ({ title: i.name, imageUrl: image.url }); });
17
+ })
18
+ .flat();
19
+ var itemNames = cart.map(function (i) { return i.name; }).join(', ');
20
+ var total = totals.total;
21
+ var orderNo = "Order #".concat(orderId);
22
+ var title = "".concat(orderTypeName, " from ").concat(revenueCenter.name);
23
+ var subtitle = "".concat(requestedAt, " | ").concat(formatDollars(total));
24
+ var reorder = function () {
25
+ // const { revenue_center_id: revenueCenterId } = revenueCenter
26
+ dispatch(setOrderServiceType({ orderType: 'OLO', serviceType: 'WALKIN' }));
27
+ if (callback)
28
+ callback();
29
+ };
30
+ return {
31
+ isInPrepQueue: isInPrepQueue,
32
+ isUpcoming: isUpcoming,
33
+ itemImages: itemImages,
34
+ itemNames: itemNames,
35
+ status: status,
36
+ orderId: orderId,
37
+ orderPrep: orderPrep,
38
+ orderType: orderType,
39
+ orderTypeName: orderTypeName,
40
+ reorder: reorder,
41
+ requestedAt: requestedAt,
42
+ revenueCenter: revenueCenter,
43
+ serviceType: serviceType,
44
+ subtitle: subtitle,
45
+ orderNo: orderNo,
46
+ title: title,
47
+ total: total
48
+ };
49
+ };
50
+ export default useOrder;
@@ -0,0 +1,2 @@
1
+ declare const useOrderValidate: () => void;
2
+ export default useOrderValidate;
@@ -0,0 +1,20 @@
1
+ import { __rest } from "tslib";
2
+ import { useEffect } from 'react';
3
+ import isEqual from 'react-fast-compare';
4
+ import { prepareOrder, selectOrder, selectPosCheckout, validatePosOrder } from '../slices';
5
+ import { useAppDispatch, useAppSelector } from '../app/hooks';
6
+ import usePrevious from './usePrevious';
7
+ var useOrderValidate = function () {
8
+ var dispatch = useAppDispatch();
9
+ var checkout = useAppSelector(selectPosCheckout);
10
+ var order = useAppSelector(selectOrder);
11
+ var preparedOrder = prepareOrder(order, checkout);
12
+ var ordeCheckout = __rest(preparedOrder || {}, []);
13
+ var prevOrderCheckout = usePrevious(ordeCheckout);
14
+ useEffect(function () {
15
+ if (preparedOrder && !isEqual(prevOrderCheckout, ordeCheckout)) {
16
+ dispatch(validatePosOrder());
17
+ }
18
+ }, [dispatch, preparedOrder, prevOrderCheckout, ordeCheckout]);
19
+ };
20
+ export default useOrderValidate;
@@ -40,6 +40,118 @@ export declare const selectKiosk: (state: AppState) => KioskState;
40
40
  export declare const selectKioskVersion: (state: AppState) => string | null | undefined;
41
41
  export declare const selectKioskStore: (state: AppState) => Store | null;
42
42
  export declare const selectKioskBrand: (state: AppState) => KioskBrand | null;
43
+ export declare const selectKioskTerminal: ((state: {
44
+ alerts: import("@open-tender/types").Alerts;
45
+ arrivals: import("./arrivals").ArrivalsState;
46
+ cartSummary: import("./cartSummary").CartSummaryState;
47
+ checkout: import("./checkout").CheckoutState;
48
+ config: import("./config").ConfigState;
49
+ customer: import("./customer").CustomerState;
50
+ customerIdentify: import("./customerIdentify").CustomerIdentifyState;
51
+ deals: import("./deals").DealsState;
52
+ discounts: import("./discounts").DiscountsState;
53
+ errorAlerts: import("./errorAlerts").ErrorAlertsState;
54
+ kds: import("./kds").KdsState;
55
+ kiosk: KioskState;
56
+ menu: import("./menu").MenuState;
57
+ menuPages: import("./menuPages").MenuPagesState;
58
+ modal: import("./modal").ModalState;
59
+ notifications: import("@open-tender/types").Notifications;
60
+ offlineAuths: import("./offlineAuths").OfflineAuthsState;
61
+ order: import("./order").OrderState;
62
+ pos: import("./pos").PosState;
63
+ punches: import("./punches").PunchesState;
64
+ refund: import("./refund").RefundState;
65
+ settings: import("./settings").SettingsState;
66
+ sidebar: import("./sidebar").SidebarState;
67
+ surcharges: import("./surcharges").SurchargesState;
68
+ taxes: import("./taxes").TaxesState;
69
+ }) => import("@open-tender/types").PosTerminal | null) & {
70
+ clearCache: () => void;
71
+ resultsCount: () => number;
72
+ resetResultsCount: () => void;
73
+ } & {
74
+ resultFunc: (resultFuncArgs_0: {
75
+ devices: Devices | null;
76
+ terminalId: number | null;
77
+ }) => import("@open-tender/types").PosTerminal | null;
78
+ memoizedResultFunc: ((resultFuncArgs_0: {
79
+ devices: Devices | null;
80
+ terminalId: number | null;
81
+ }) => import("@open-tender/types").PosTerminal | null) & {
82
+ clearCache: () => void;
83
+ resultsCount: () => number;
84
+ resetResultsCount: () => void;
85
+ };
86
+ lastResult: () => import("@open-tender/types").PosTerminal | null;
87
+ dependencies: [(state: AppState) => {
88
+ devices: Devices | null;
89
+ terminalId: number | null;
90
+ }];
91
+ recomputations: () => number;
92
+ resetRecomputations: () => void;
93
+ dependencyRecomputations: () => number;
94
+ resetDependencyRecomputations: () => void;
95
+ } & {
96
+ argsMemoize: typeof import("reselect").weakMapMemoize;
97
+ memoize: typeof import("reselect").weakMapMemoize;
98
+ };
99
+ export declare const selectKioskShowPrint: ((state: {
100
+ alerts: import("@open-tender/types").Alerts;
101
+ arrivals: import("./arrivals").ArrivalsState;
102
+ cartSummary: import("./cartSummary").CartSummaryState;
103
+ checkout: import("./checkout").CheckoutState;
104
+ config: import("./config").ConfigState;
105
+ customer: import("./customer").CustomerState;
106
+ customerIdentify: import("./customerIdentify").CustomerIdentifyState;
107
+ deals: import("./deals").DealsState;
108
+ discounts: import("./discounts").DiscountsState;
109
+ errorAlerts: import("./errorAlerts").ErrorAlertsState;
110
+ kds: import("./kds").KdsState;
111
+ kiosk: KioskState;
112
+ menu: import("./menu").MenuState;
113
+ menuPages: import("./menuPages").MenuPagesState;
114
+ modal: import("./modal").ModalState;
115
+ notifications: import("@open-tender/types").Notifications;
116
+ offlineAuths: import("./offlineAuths").OfflineAuthsState;
117
+ order: import("./order").OrderState;
118
+ pos: import("./pos").PosState;
119
+ punches: import("./punches").PunchesState;
120
+ refund: import("./refund").RefundState;
121
+ settings: import("./settings").SettingsState;
122
+ sidebar: import("./sidebar").SidebarState;
123
+ surcharges: import("./surcharges").SurchargesState;
124
+ taxes: import("./taxes").TaxesState;
125
+ }) => boolean) & {
126
+ clearCache: () => void;
127
+ resultsCount: () => number;
128
+ resetResultsCount: () => void;
129
+ } & {
130
+ resultFunc: (resultFuncArgs_0: {
131
+ devices: Devices | null;
132
+ terminalId: number | null;
133
+ }) => boolean;
134
+ memoizedResultFunc: ((resultFuncArgs_0: {
135
+ devices: Devices | null;
136
+ terminalId: number | null;
137
+ }) => boolean) & {
138
+ clearCache: () => void;
139
+ resultsCount: () => number;
140
+ resetResultsCount: () => void;
141
+ };
142
+ lastResult: () => boolean;
143
+ dependencies: [(state: AppState) => {
144
+ devices: Devices | null;
145
+ terminalId: number | null;
146
+ }];
147
+ recomputations: () => number;
148
+ resetRecomputations: () => void;
149
+ dependencyRecomputations: () => number;
150
+ resetDependencyRecomputations: () => void;
151
+ } & {
152
+ argsMemoize: typeof import("reselect").weakMapMemoize;
153
+ memoize: typeof import("reselect").weakMapMemoize;
154
+ };
43
155
  export declare const selectKioskApi: ((state: {
44
156
  alerts: import("@open-tender/types").Alerts;
45
157
  arrivals: import("./arrivals").ArrivalsState;
@@ -134,6 +134,29 @@ export var selectKiosk = function (state) { return state.kiosk; };
134
134
  export var selectKioskVersion = function (state) { return state.kiosk.version; };
135
135
  export var selectKioskStore = function (state) { return state.kiosk.store; };
136
136
  export var selectKioskBrand = function (state) { return state.kiosk.brand; };
137
+ export var selectKioskTerminal = createSelector(function (state) {
138
+ var devices = state.kiosk.devices;
139
+ var terminalId = state.pos.terminalId;
140
+ return { devices: devices, terminalId: terminalId };
141
+ }, function (_a) {
142
+ var devices = _a.devices, terminalId = _a.terminalId;
143
+ var terminal = devices === null || devices === void 0 ? void 0 : devices.pos_terminals.find(function (i) { return i.pos_terminal_id === terminalId; });
144
+ return terminal || null;
145
+ });
146
+ export var selectKioskShowPrint = createSelector(function (state) {
147
+ var devices = state.kiosk.devices;
148
+ var terminalId = state.pos.terminalId;
149
+ return { devices: devices, terminalId: terminalId };
150
+ }, function (_a) {
151
+ var devices = _a.devices, terminalId = _a.terminalId;
152
+ var terminal = devices === null || devices === void 0 ? void 0 : devices.pos_terminals.find(function (i) { return i.pos_terminal_id === terminalId; });
153
+ if (!terminal)
154
+ return false;
155
+ var print_receipt = terminal.print_receipt, printers = terminal.printers;
156
+ if (print_receipt === 'never' || !printers.length)
157
+ return false;
158
+ return true;
159
+ });
137
160
  export var selectKioskApi = createSelector(function (state) {
138
161
  var app = state.kiosk.app;
139
162
  return app;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@open-tender/store",
3
- "version": "1.1.2",
3
+ "version": "1.1.4",
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",
@@ -58,9 +58,9 @@
58
58
  },
59
59
  "peerDependencies": {
60
60
  "@emotion/react": "^11.11.1",
61
- "@open-tender/types": "^0.4.41",
61
+ "@open-tender/types": "^0.4.43",
62
62
  "@open-tender/ui": "^0.2.1",
63
- "@open-tender/utils": "^0.4.20",
63
+ "@open-tender/utils": "^0.4.23",
64
64
  "@reduxjs/toolkit": "^2.0.1",
65
65
  "date-fns": "2.30.0",
66
66
  "date-fns-tz": "^2.0.0",
@@ -69,5 +69,7 @@
69
69
  "react-dom": "^18.2.0",
70
70
  "uuid": "^9.0.1"
71
71
  },
72
- "dependencies": {}
72
+ "dependencies": {
73
+ "react-fast-compare": "^3.2.2"
74
+ }
73
75
  }