@pisell/private-materials 6.12.312 → 6.12.313
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.
- package/build/lowcode/assets-daily.json +11 -11
- package/build/lowcode/assets-dev.json +2 -2
- package/build/lowcode/assets-prod.json +11 -11
- package/build/lowcode/meta.js +1 -1
- package/build/lowcode/render/default/view.js +1 -1
- package/build/lowcode/view.js +1 -1
- package/es/components/HDLKiosk/slices/payment/Screen/index.js +88 -39
- package/es/components/HDLKiosk/slices/payment/view.js +5 -2
- package/es/plus/saasDevice/devicePasscodes/model.js +4 -4
- package/es/plus/walletPassGallery/components/timelineSection/index.js +4 -4
- package/lib/components/HDLKiosk/slices/payment/Screen/index.js +88 -39
- package/lib/components/HDLKiosk/slices/payment/view.js +5 -2
- package/package.json +2 -2
|
@@ -25,23 +25,52 @@ function ConfirmOrderIcon() {
|
|
|
25
25
|
"aria-hidden": "true"
|
|
26
26
|
}, /* @__PURE__ */ React.createElement("path", { d: "m5 12 4 4L19 6" }));
|
|
27
27
|
}
|
|
28
|
-
/**
|
|
29
|
-
function PaymentMethodIcon({ code, type }) {
|
|
30
|
-
const
|
|
28
|
+
/** 名称含 cash 时优先展示纸币,否则按卡支付、现金配置和自定义支付区分。 */
|
|
29
|
+
function PaymentMethodIcon({ code, name, type, eftpos, cash }) {
|
|
30
|
+
const nameContainsCash = /cash/i.test(name);
|
|
31
|
+
const isCash = nameContainsCash || cash;
|
|
32
|
+
const isCard = !nameContainsCash && (eftpos || code === "EFTPOS" || type === "credit-card" || type === "eftpos");
|
|
31
33
|
return /* @__PURE__ */ React.createElement("span", {
|
|
32
34
|
className: "hdl-payment-method__icon",
|
|
33
|
-
style: { background: isCard ? "#FE8279" : "#D277E4" },
|
|
35
|
+
style: { background: isCard ? "#FE8279" : isCash ? "#D69B28" : "#D277E4" },
|
|
34
36
|
"aria-hidden": "true"
|
|
35
|
-
}, /* @__PURE__ */ React.createElement(Iconfont, {
|
|
36
|
-
type:
|
|
37
|
+
}, isCard ? /* @__PURE__ */ React.createElement(Iconfont, {
|
|
38
|
+
type: "pisell2-credit-card-02",
|
|
37
39
|
style: {
|
|
38
40
|
fontSize: "46px",
|
|
39
41
|
color: "#fff"
|
|
40
42
|
}
|
|
41
|
-
})
|
|
43
|
+
}) : /* @__PURE__ */ React.createElement("svg", {
|
|
44
|
+
viewBox: "0 0 32 32",
|
|
45
|
+
width: "48",
|
|
46
|
+
height: "48",
|
|
47
|
+
fill: "none",
|
|
48
|
+
stroke: "#fff",
|
|
49
|
+
strokeWidth: "1.8",
|
|
50
|
+
strokeLinecap: "round",
|
|
51
|
+
strokeLinejoin: "round",
|
|
52
|
+
focusable: "false"
|
|
53
|
+
}, isCash ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("rect", {
|
|
54
|
+
x: "3",
|
|
55
|
+
y: "6",
|
|
56
|
+
width: "26",
|
|
57
|
+
height: "17",
|
|
58
|
+
rx: "3"
|
|
59
|
+
}), /* @__PURE__ */ React.createElement("path", { d: "M7 26h18M3 11a5 5 0 0 0 5-5m16 0a5 5 0 0 0 5 5M3 18a5 5 0 0 1 5 5m16 0a5 5 0 0 1 5-5" }), /* @__PURE__ */ React.createElement("ellipse", {
|
|
60
|
+
cx: "16",
|
|
61
|
+
cy: "14.5",
|
|
62
|
+
rx: "3.5",
|
|
63
|
+
ry: "4.5"
|
|
64
|
+
})) : /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("rect", {
|
|
65
|
+
x: "7",
|
|
66
|
+
y: "4",
|
|
67
|
+
width: "14",
|
|
68
|
+
height: "9",
|
|
69
|
+
rx: "2"
|
|
70
|
+
}), /* @__PURE__ */ React.createElement("path", { d: "M11 8.5h6M14 13v3M8 16h16l4 7v4a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-4l4-7ZM4 23h24M13 25.5h6M10 19.5h2m3 0h2m3 0h2" }))));
|
|
42
71
|
}
|
|
43
72
|
function CheckoutScreen({ model, orderBar, send }) {
|
|
44
|
-
var _model$
|
|
73
|
+
var _model$paymentFeedbac2, _model$paymentFeedbac4, _model$paymentFeedbac5;
|
|
45
74
|
const sendRef = useRef(send);
|
|
46
75
|
sendRef.current = send;
|
|
47
76
|
const goBack = useCallback(() => {
|
|
@@ -53,6 +82,47 @@ function CheckoutScreen({ model, orderBar, send }) {
|
|
|
53
82
|
const canReturnToCart = Boolean(orderBar && orderBar.cartLineCount > 0) && model.canLeavePayment;
|
|
54
83
|
const [restartOrderOpen, setRestartOrderOpen] = useState(false);
|
|
55
84
|
const [dismissedFeedbackKey, setDismissedFeedbackKey] = useState();
|
|
85
|
+
const automaticPaymentHandled = useRef(false);
|
|
86
|
+
const confirmNoPayment = useCallback(() => {
|
|
87
|
+
var _model$paymentFeedbac;
|
|
88
|
+
automaticPaymentHandled.current = true;
|
|
89
|
+
setDismissedFeedbackKey((_model$paymentFeedbac = model.paymentFeedback) === null || _model$paymentFeedbac === void 0 ? void 0 : _model$paymentFeedbac.key);
|
|
90
|
+
sendRef.current({
|
|
91
|
+
kind: "command",
|
|
92
|
+
command: "checkout.completeNoPayment"
|
|
93
|
+
});
|
|
94
|
+
}, [(_model$paymentFeedbac2 = model.paymentFeedback) === null || _model$paymentFeedbac2 === void 0 ? void 0 : _model$paymentFeedbac2.key]);
|
|
95
|
+
const selectPayment = useCallback((method) => {
|
|
96
|
+
var _model$paymentFeedbac3;
|
|
97
|
+
automaticPaymentHandled.current = true;
|
|
98
|
+
setDismissedFeedbackKey((_model$paymentFeedbac3 = model.paymentFeedback) === null || _model$paymentFeedbac3 === void 0 ? void 0 : _model$paymentFeedbac3.key);
|
|
99
|
+
sendRef.current({
|
|
100
|
+
kind: "command",
|
|
101
|
+
command: method.eftpos ? "checkout.payEftpos" : "checkout.requestStaffPaymentApproval",
|
|
102
|
+
input: { paymentMethodId: method.id }
|
|
103
|
+
});
|
|
104
|
+
}, [(_model$paymentFeedbac4 = model.paymentFeedback) === null || _model$paymentFeedbac4 === void 0 ? void 0 : _model$paymentFeedbac4.key]);
|
|
105
|
+
useEffect(() => {
|
|
106
|
+
if (model.paymentFeedback) automaticPaymentHandled.current = true;
|
|
107
|
+
if (automaticPaymentHandled.current || model.busy || model.resetting || model.paymentResult || model.paymentResultPending || restartOrderOpen || !model.totalText) return;
|
|
108
|
+
let startPayment;
|
|
109
|
+
if (model.noPaymentRequired) {
|
|
110
|
+
if (model.canCompleteNoPayment) startPayment = confirmNoPayment;
|
|
111
|
+
} else if (model.canSelectPayment && !model.paymentMethodsLoading && !model.paymentMethodsErrorReference && model.paymentMethods.length === 1) startPayment = () => selectPayment(model.paymentMethods[0]);
|
|
112
|
+
if (!startPayment) return;
|
|
113
|
+
let cancelled = false;
|
|
114
|
+
Promise.resolve().then(() => {
|
|
115
|
+
if (!cancelled && !automaticPaymentHandled.current) startPayment();
|
|
116
|
+
});
|
|
117
|
+
return () => {
|
|
118
|
+
cancelled = true;
|
|
119
|
+
};
|
|
120
|
+
}, [
|
|
121
|
+
model,
|
|
122
|
+
restartOrderOpen,
|
|
123
|
+
confirmNoPayment,
|
|
124
|
+
selectPayment
|
|
125
|
+
]);
|
|
56
126
|
const [returnCountdown, setReturnCountdown] = useState(10);
|
|
57
127
|
const resetOrder = useCallback((source) => sendRef.current({
|
|
58
128
|
kind: "session",
|
|
@@ -148,11 +218,7 @@ function CheckoutScreen({ model, orderBar, send }) {
|
|
|
148
218
|
role: "status"
|
|
149
219
|
}, /* @__PURE__ */ React.createElement("span", { className: "hdl-operation-overlay__spinner" }), /* @__PURE__ */ React.createElement("strong", null, locales.getText("pisell2.hdl-kiosk.payment-processing"))));
|
|
150
220
|
const paymentDisabled = !model.canSelectPayment || !model.totalText;
|
|
151
|
-
const visibleFeedback = ((_model$
|
|
152
|
-
const dismissCurrentFeedback = () => {
|
|
153
|
-
var _model$paymentFeedbac2;
|
|
154
|
-
return setDismissedFeedbackKey((_model$paymentFeedbac2 = model.paymentFeedback) === null || _model$paymentFeedbac2 === void 0 ? void 0 : _model$paymentFeedbac2.key);
|
|
155
|
-
};
|
|
221
|
+
const visibleFeedback = ((_model$paymentFeedbac5 = model.paymentFeedback) === null || _model$paymentFeedbac5 === void 0 ? void 0 : _model$paymentFeedbac5.key) === dismissedFeedbackKey ? void 0 : model.paymentFeedback;
|
|
156
222
|
return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("section", {
|
|
157
223
|
className: "hdl-checkout-screen",
|
|
158
224
|
"aria-labelledby": "hdl-payment-method-title"
|
|
@@ -167,13 +233,7 @@ function CheckoutScreen({ model, orderBar, send }) {
|
|
|
167
233
|
className: "hdl-payment-method hdl-no-payment-confirm",
|
|
168
234
|
"aria-busy": model.busy,
|
|
169
235
|
disabled: !model.canCompleteNoPayment,
|
|
170
|
-
onClick:
|
|
171
|
-
dismissCurrentFeedback();
|
|
172
|
-
send({
|
|
173
|
-
kind: "command",
|
|
174
|
-
command: "checkout.completeNoPayment"
|
|
175
|
-
});
|
|
176
|
-
}
|
|
236
|
+
onClick: confirmNoPayment
|
|
177
237
|
}, /* @__PURE__ */ React.createElement("span", { className: "hdl-no-payment-confirm__icon" }, /* @__PURE__ */ React.createElement(ConfirmOrderIcon, null)), /* @__PURE__ */ React.createElement("strong", null, locales.getText(model.busy ? "pisell2.hdl-kiosk.no-payment-confirming" : "pisell2.hdl-kiosk.no-payment-confirm")), /* @__PURE__ */ React.createElement(NextIcon, null)) : /* @__PURE__ */ React.createElement(React.Fragment, null, model.paymentMethodsLoading ? /* @__PURE__ */ React.createElement("p", {
|
|
178
238
|
className: "hdl-payment-methods__notice",
|
|
179
239
|
role: "status"
|
|
@@ -182,32 +242,21 @@ function CheckoutScreen({ model, orderBar, send }) {
|
|
|
182
242
|
role: model.paymentMethodsErrorReference ? "alert" : "status"
|
|
183
243
|
}, locales.getText("pisell2.hdl-kiosk.payment-methods-unavailable")) : null, model.paymentMethods.map((method) => {
|
|
184
244
|
const eftpos = method.eftpos;
|
|
245
|
+
const displayName = method.name.replace(/-Linkly/g, "");
|
|
185
246
|
return /* @__PURE__ */ React.createElement("button", {
|
|
186
247
|
key: method.id,
|
|
187
248
|
type: "button",
|
|
188
249
|
className: `hdl-payment-method hdl-payment-method--${eftpos ? "card" : "cash"}`,
|
|
189
|
-
"aria-label":
|
|
250
|
+
"aria-label": displayName,
|
|
190
251
|
disabled: paymentDisabled,
|
|
191
|
-
onClick: () =>
|
|
192
|
-
dismissCurrentFeedback();
|
|
193
|
-
if (eftpos) {
|
|
194
|
-
send({
|
|
195
|
-
kind: "command",
|
|
196
|
-
command: "checkout.payEftpos",
|
|
197
|
-
input: { paymentMethodId: method.id }
|
|
198
|
-
});
|
|
199
|
-
return;
|
|
200
|
-
}
|
|
201
|
-
send({
|
|
202
|
-
kind: "command",
|
|
203
|
-
command: "checkout.requestStaffPaymentApproval",
|
|
204
|
-
input: { paymentMethodId: method.id }
|
|
205
|
-
});
|
|
206
|
-
}
|
|
252
|
+
onClick: () => selectPayment(method)
|
|
207
253
|
}, /* @__PURE__ */ React.createElement(PaymentMethodIcon, {
|
|
208
254
|
code: method.code,
|
|
209
|
-
|
|
210
|
-
|
|
255
|
+
name: method.name,
|
|
256
|
+
type: method.type,
|
|
257
|
+
eftpos: method.eftpos,
|
|
258
|
+
cash: method.cash
|
|
259
|
+
}), /* @__PURE__ */ React.createElement("span", null, /* @__PURE__ */ React.createElement("strong", null, displayName)), /* @__PURE__ */ React.createElement(NextIcon, null));
|
|
211
260
|
}))), /* @__PURE__ */ React.createElement("div", { className: "hdl-payment-restart-section" }, /* @__PURE__ */ React.createElement(RestartOrderButton, {
|
|
212
261
|
disabled: !model.canRestartOrder,
|
|
213
262
|
title: model.restartOrderBlockedReason,
|
|
@@ -71,10 +71,13 @@ function createCheckoutScreenModel(snapshot, sales, payment, completed = false,
|
|
|
71
71
|
busy: snapshot.status === "running",
|
|
72
72
|
noPaymentRequired,
|
|
73
73
|
canCompleteNoPayment: noPaymentRequired && interactionAvailable,
|
|
74
|
-
paymentMethods: payment.methods
|
|
74
|
+
paymentMethods: payment.methods.map((method) => {
|
|
75
|
+
var _method$metadata, _method$metadata2;
|
|
76
|
+
return _objectSpread2(_objectSpread2({}, method), {}, { cash: method.type === "custom" && (((_method$metadata = method.metadata) === null || _method$metadata === void 0 ? void 0 : _method$metadata.order_open_cash_drawer) === 1 || ((_method$metadata2 = method.metadata) === null || _method$metadata2 === void 0 ? void 0 : _method$metadata2.order_open_cash_drawer) === "1") });
|
|
77
|
+
}),
|
|
75
78
|
paymentMethodsLoading: payment.loading,
|
|
76
79
|
paymentMethodsErrorReference: payment.errorReference,
|
|
77
|
-
canSelectPayment: interactionAvailable,
|
|
80
|
+
canSelectPayment: interactionAvailable && sales.summary.status === "ready",
|
|
78
81
|
canLeavePayment: interactionAvailable,
|
|
79
82
|
canRestartOrder: interactionAvailable,
|
|
80
83
|
restartOrderBlockedReason: paymentSafeToChange ? void 0 : locales.getText("pisell2.hdl-kiosk.restart-order-payment-blocked"),
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { _objectSpread2 } from "../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/objectSpread2.js";
|
|
2
2
|
import dayjs from "dayjs";
|
|
3
|
-
import
|
|
4
|
-
import
|
|
3
|
+
import timezonePlugin from "dayjs/plugin/timezone";
|
|
4
|
+
import utcPlugin from "dayjs/plugin/utc";
|
|
5
5
|
//#region src/plus/saasDevice/devicePasscodes/model.ts
|
|
6
|
-
dayjs.extend(
|
|
7
|
-
dayjs.extend(
|
|
6
|
+
dayjs.extend(utcPlugin);
|
|
7
|
+
dayjs.extend(timezonePlugin);
|
|
8
8
|
const INITIAL_DEVICE_PASSCODE_STATE = {
|
|
9
9
|
deviceIds: [],
|
|
10
10
|
devicesById: {}
|
|
@@ -6,12 +6,12 @@ import React, { useCallback, useEffect, useMemo, useRef } from "react";
|
|
|
6
6
|
import { locales } from "@pisell/utils";
|
|
7
7
|
import { Button, PisellEmpty, PisellModal, PisellStatisticList, Skeleton, Timeline, usePisellConfig } from "@pisell/materials";
|
|
8
8
|
import { useRequest } from "ahooks";
|
|
9
|
-
import
|
|
10
|
-
import
|
|
9
|
+
import timezonePlugin from "dayjs/plugin/timezone";
|
|
10
|
+
import utcPlugin from "dayjs/plugin/utc";
|
|
11
11
|
import "./index.less";
|
|
12
12
|
//#region src/plus/walletPassGallery/components/timelineSection/index.tsx
|
|
13
|
-
dayjs.extend(
|
|
14
|
-
dayjs.extend(
|
|
13
|
+
dayjs.extend(timezonePlugin);
|
|
14
|
+
dayjs.extend(utcPlugin);
|
|
15
15
|
const stateTimeUnix = 1723255863;
|
|
16
16
|
const POLL_INTERVAL = 2e3;
|
|
17
17
|
const POLL_MAX_TIMES = 5;
|
|
@@ -27,23 +27,52 @@ function ConfirmOrderIcon() {
|
|
|
27
27
|
"aria-hidden": "true"
|
|
28
28
|
}, /* @__PURE__ */ react.default.createElement("path", { d: "m5 12 4 4L19 6" }));
|
|
29
29
|
}
|
|
30
|
-
/**
|
|
31
|
-
function PaymentMethodIcon({ code, type }) {
|
|
32
|
-
const
|
|
30
|
+
/** 名称含 cash 时优先展示纸币,否则按卡支付、现金配置和自定义支付区分。 */
|
|
31
|
+
function PaymentMethodIcon({ code, name, type, eftpos, cash }) {
|
|
32
|
+
const nameContainsCash = /cash/i.test(name);
|
|
33
|
+
const isCash = nameContainsCash || cash;
|
|
34
|
+
const isCard = !nameContainsCash && (eftpos || code === "EFTPOS" || type === "credit-card" || type === "eftpos");
|
|
33
35
|
return /* @__PURE__ */ react.default.createElement("span", {
|
|
34
36
|
className: "hdl-payment-method__icon",
|
|
35
|
-
style: { background: isCard ? "#FE8279" : "#D277E4" },
|
|
37
|
+
style: { background: isCard ? "#FE8279" : isCash ? "#D69B28" : "#D277E4" },
|
|
36
38
|
"aria-hidden": "true"
|
|
37
|
-
}, /* @__PURE__ */ react.default.createElement(_pisell_materials.Iconfont, {
|
|
38
|
-
type:
|
|
39
|
+
}, isCard ? /* @__PURE__ */ react.default.createElement(_pisell_materials.Iconfont, {
|
|
40
|
+
type: "pisell2-credit-card-02",
|
|
39
41
|
style: {
|
|
40
42
|
fontSize: "46px",
|
|
41
43
|
color: "#fff"
|
|
42
44
|
}
|
|
43
|
-
})
|
|
45
|
+
}) : /* @__PURE__ */ react.default.createElement("svg", {
|
|
46
|
+
viewBox: "0 0 32 32",
|
|
47
|
+
width: "48",
|
|
48
|
+
height: "48",
|
|
49
|
+
fill: "none",
|
|
50
|
+
stroke: "#fff",
|
|
51
|
+
strokeWidth: "1.8",
|
|
52
|
+
strokeLinecap: "round",
|
|
53
|
+
strokeLinejoin: "round",
|
|
54
|
+
focusable: "false"
|
|
55
|
+
}, isCash ? /* @__PURE__ */ react.default.createElement(react.default.Fragment, null, /* @__PURE__ */ react.default.createElement("rect", {
|
|
56
|
+
x: "3",
|
|
57
|
+
y: "6",
|
|
58
|
+
width: "26",
|
|
59
|
+
height: "17",
|
|
60
|
+
rx: "3"
|
|
61
|
+
}), /* @__PURE__ */ react.default.createElement("path", { d: "M7 26h18M3 11a5 5 0 0 0 5-5m16 0a5 5 0 0 0 5 5M3 18a5 5 0 0 1 5 5m16 0a5 5 0 0 1 5-5" }), /* @__PURE__ */ react.default.createElement("ellipse", {
|
|
62
|
+
cx: "16",
|
|
63
|
+
cy: "14.5",
|
|
64
|
+
rx: "3.5",
|
|
65
|
+
ry: "4.5"
|
|
66
|
+
})) : /* @__PURE__ */ react.default.createElement(react.default.Fragment, null, /* @__PURE__ */ react.default.createElement("rect", {
|
|
67
|
+
x: "7",
|
|
68
|
+
y: "4",
|
|
69
|
+
width: "14",
|
|
70
|
+
height: "9",
|
|
71
|
+
rx: "2"
|
|
72
|
+
}), /* @__PURE__ */ react.default.createElement("path", { d: "M11 8.5h6M14 13v3M8 16h16l4 7v4a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-4l4-7ZM4 23h24M13 25.5h6M10 19.5h2m3 0h2m3 0h2" }))));
|
|
44
73
|
}
|
|
45
74
|
function CheckoutScreen({ model, orderBar, send }) {
|
|
46
|
-
var _model$
|
|
75
|
+
var _model$paymentFeedbac2, _model$paymentFeedbac4, _model$paymentFeedbac5;
|
|
47
76
|
const sendRef = (0, react.useRef)(send);
|
|
48
77
|
sendRef.current = send;
|
|
49
78
|
const goBack = (0, react.useCallback)(() => {
|
|
@@ -55,6 +84,47 @@ function CheckoutScreen({ model, orderBar, send }) {
|
|
|
55
84
|
const canReturnToCart = Boolean(orderBar && orderBar.cartLineCount > 0) && model.canLeavePayment;
|
|
56
85
|
const [restartOrderOpen, setRestartOrderOpen] = (0, react.useState)(false);
|
|
57
86
|
const [dismissedFeedbackKey, setDismissedFeedbackKey] = (0, react.useState)();
|
|
87
|
+
const automaticPaymentHandled = (0, react.useRef)(false);
|
|
88
|
+
const confirmNoPayment = (0, react.useCallback)(() => {
|
|
89
|
+
var _model$paymentFeedbac;
|
|
90
|
+
automaticPaymentHandled.current = true;
|
|
91
|
+
setDismissedFeedbackKey((_model$paymentFeedbac = model.paymentFeedback) === null || _model$paymentFeedbac === void 0 ? void 0 : _model$paymentFeedbac.key);
|
|
92
|
+
sendRef.current({
|
|
93
|
+
kind: "command",
|
|
94
|
+
command: "checkout.completeNoPayment"
|
|
95
|
+
});
|
|
96
|
+
}, [(_model$paymentFeedbac2 = model.paymentFeedback) === null || _model$paymentFeedbac2 === void 0 ? void 0 : _model$paymentFeedbac2.key]);
|
|
97
|
+
const selectPayment = (0, react.useCallback)((method) => {
|
|
98
|
+
var _model$paymentFeedbac3;
|
|
99
|
+
automaticPaymentHandled.current = true;
|
|
100
|
+
setDismissedFeedbackKey((_model$paymentFeedbac3 = model.paymentFeedback) === null || _model$paymentFeedbac3 === void 0 ? void 0 : _model$paymentFeedbac3.key);
|
|
101
|
+
sendRef.current({
|
|
102
|
+
kind: "command",
|
|
103
|
+
command: method.eftpos ? "checkout.payEftpos" : "checkout.requestStaffPaymentApproval",
|
|
104
|
+
input: { paymentMethodId: method.id }
|
|
105
|
+
});
|
|
106
|
+
}, [(_model$paymentFeedbac4 = model.paymentFeedback) === null || _model$paymentFeedbac4 === void 0 ? void 0 : _model$paymentFeedbac4.key]);
|
|
107
|
+
(0, react.useEffect)(() => {
|
|
108
|
+
if (model.paymentFeedback) automaticPaymentHandled.current = true;
|
|
109
|
+
if (automaticPaymentHandled.current || model.busy || model.resetting || model.paymentResult || model.paymentResultPending || restartOrderOpen || !model.totalText) return;
|
|
110
|
+
let startPayment;
|
|
111
|
+
if (model.noPaymentRequired) {
|
|
112
|
+
if (model.canCompleteNoPayment) startPayment = confirmNoPayment;
|
|
113
|
+
} else if (model.canSelectPayment && !model.paymentMethodsLoading && !model.paymentMethodsErrorReference && model.paymentMethods.length === 1) startPayment = () => selectPayment(model.paymentMethods[0]);
|
|
114
|
+
if (!startPayment) return;
|
|
115
|
+
let cancelled = false;
|
|
116
|
+
Promise.resolve().then(() => {
|
|
117
|
+
if (!cancelled && !automaticPaymentHandled.current) startPayment();
|
|
118
|
+
});
|
|
119
|
+
return () => {
|
|
120
|
+
cancelled = true;
|
|
121
|
+
};
|
|
122
|
+
}, [
|
|
123
|
+
model,
|
|
124
|
+
restartOrderOpen,
|
|
125
|
+
confirmNoPayment,
|
|
126
|
+
selectPayment
|
|
127
|
+
]);
|
|
58
128
|
const [returnCountdown, setReturnCountdown] = (0, react.useState)(10);
|
|
59
129
|
const resetOrder = (0, react.useCallback)((source) => sendRef.current({
|
|
60
130
|
kind: "session",
|
|
@@ -150,11 +220,7 @@ function CheckoutScreen({ model, orderBar, send }) {
|
|
|
150
220
|
role: "status"
|
|
151
221
|
}, /* @__PURE__ */ react.default.createElement("span", { className: "hdl-operation-overlay__spinner" }), /* @__PURE__ */ react.default.createElement("strong", null, _pisell_utils.locales.getText("pisell2.hdl-kiosk.payment-processing"))));
|
|
152
222
|
const paymentDisabled = !model.canSelectPayment || !model.totalText;
|
|
153
|
-
const visibleFeedback = ((_model$
|
|
154
|
-
const dismissCurrentFeedback = () => {
|
|
155
|
-
var _model$paymentFeedbac2;
|
|
156
|
-
return setDismissedFeedbackKey((_model$paymentFeedbac2 = model.paymentFeedback) === null || _model$paymentFeedbac2 === void 0 ? void 0 : _model$paymentFeedbac2.key);
|
|
157
|
-
};
|
|
223
|
+
const visibleFeedback = ((_model$paymentFeedbac5 = model.paymentFeedback) === null || _model$paymentFeedbac5 === void 0 ? void 0 : _model$paymentFeedbac5.key) === dismissedFeedbackKey ? void 0 : model.paymentFeedback;
|
|
158
224
|
return /* @__PURE__ */ react.default.createElement(react.default.Fragment, null, /* @__PURE__ */ react.default.createElement("section", {
|
|
159
225
|
className: "hdl-checkout-screen",
|
|
160
226
|
"aria-labelledby": "hdl-payment-method-title"
|
|
@@ -169,13 +235,7 @@ function CheckoutScreen({ model, orderBar, send }) {
|
|
|
169
235
|
className: "hdl-payment-method hdl-no-payment-confirm",
|
|
170
236
|
"aria-busy": model.busy,
|
|
171
237
|
disabled: !model.canCompleteNoPayment,
|
|
172
|
-
onClick:
|
|
173
|
-
dismissCurrentFeedback();
|
|
174
|
-
send({
|
|
175
|
-
kind: "command",
|
|
176
|
-
command: "checkout.completeNoPayment"
|
|
177
|
-
});
|
|
178
|
-
}
|
|
238
|
+
onClick: confirmNoPayment
|
|
179
239
|
}, /* @__PURE__ */ react.default.createElement("span", { className: "hdl-no-payment-confirm__icon" }, /* @__PURE__ */ react.default.createElement(ConfirmOrderIcon, null)), /* @__PURE__ */ react.default.createElement("strong", null, _pisell_utils.locales.getText(model.busy ? "pisell2.hdl-kiosk.no-payment-confirming" : "pisell2.hdl-kiosk.no-payment-confirm")), /* @__PURE__ */ react.default.createElement(NextIcon, null)) : /* @__PURE__ */ react.default.createElement(react.default.Fragment, null, model.paymentMethodsLoading ? /* @__PURE__ */ react.default.createElement("p", {
|
|
180
240
|
className: "hdl-payment-methods__notice",
|
|
181
241
|
role: "status"
|
|
@@ -184,32 +244,21 @@ function CheckoutScreen({ model, orderBar, send }) {
|
|
|
184
244
|
role: model.paymentMethodsErrorReference ? "alert" : "status"
|
|
185
245
|
}, _pisell_utils.locales.getText("pisell2.hdl-kiosk.payment-methods-unavailable")) : null, model.paymentMethods.map((method) => {
|
|
186
246
|
const eftpos = method.eftpos;
|
|
247
|
+
const displayName = method.name.replace(/-Linkly/g, "");
|
|
187
248
|
return /* @__PURE__ */ react.default.createElement("button", {
|
|
188
249
|
key: method.id,
|
|
189
250
|
type: "button",
|
|
190
251
|
className: `hdl-payment-method hdl-payment-method--${eftpos ? "card" : "cash"}`,
|
|
191
|
-
"aria-label":
|
|
252
|
+
"aria-label": displayName,
|
|
192
253
|
disabled: paymentDisabled,
|
|
193
|
-
onClick: () =>
|
|
194
|
-
dismissCurrentFeedback();
|
|
195
|
-
if (eftpos) {
|
|
196
|
-
send({
|
|
197
|
-
kind: "command",
|
|
198
|
-
command: "checkout.payEftpos",
|
|
199
|
-
input: { paymentMethodId: method.id }
|
|
200
|
-
});
|
|
201
|
-
return;
|
|
202
|
-
}
|
|
203
|
-
send({
|
|
204
|
-
kind: "command",
|
|
205
|
-
command: "checkout.requestStaffPaymentApproval",
|
|
206
|
-
input: { paymentMethodId: method.id }
|
|
207
|
-
});
|
|
208
|
-
}
|
|
254
|
+
onClick: () => selectPayment(method)
|
|
209
255
|
}, /* @__PURE__ */ react.default.createElement(PaymentMethodIcon, {
|
|
210
256
|
code: method.code,
|
|
211
|
-
|
|
212
|
-
|
|
257
|
+
name: method.name,
|
|
258
|
+
type: method.type,
|
|
259
|
+
eftpos: method.eftpos,
|
|
260
|
+
cash: method.cash
|
|
261
|
+
}), /* @__PURE__ */ react.default.createElement("span", null, /* @__PURE__ */ react.default.createElement("strong", null, displayName)), /* @__PURE__ */ react.default.createElement(NextIcon, null));
|
|
213
262
|
}))), /* @__PURE__ */ react.default.createElement("div", { className: "hdl-payment-restart-section" }, /* @__PURE__ */ react.default.createElement(require_index$3.RestartOrderButton, {
|
|
214
263
|
disabled: !model.canRestartOrder,
|
|
215
264
|
title: model.restartOrderBlockedReason,
|
|
@@ -73,10 +73,13 @@ function createCheckoutScreenModel(snapshot, sales, payment, completed = false,
|
|
|
73
73
|
busy: snapshot.status === "running",
|
|
74
74
|
noPaymentRequired,
|
|
75
75
|
canCompleteNoPayment: noPaymentRequired && interactionAvailable,
|
|
76
|
-
paymentMethods: payment.methods
|
|
76
|
+
paymentMethods: payment.methods.map((method) => {
|
|
77
|
+
var _method$metadata, _method$metadata2;
|
|
78
|
+
return require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, method), {}, { cash: method.type === "custom" && (((_method$metadata = method.metadata) === null || _method$metadata === void 0 ? void 0 : _method$metadata.order_open_cash_drawer) === 1 || ((_method$metadata2 = method.metadata) === null || _method$metadata2 === void 0 ? void 0 : _method$metadata2.order_open_cash_drawer) === "1") });
|
|
79
|
+
}),
|
|
77
80
|
paymentMethodsLoading: payment.loading,
|
|
78
81
|
paymentMethodsErrorReference: payment.errorReference,
|
|
79
|
-
canSelectPayment: interactionAvailable,
|
|
82
|
+
canSelectPayment: interactionAvailable && sales.summary.status === "ready",
|
|
80
83
|
canLeavePayment: interactionAvailable,
|
|
81
84
|
canRestartOrder: interactionAvailable,
|
|
82
85
|
restartOrderBlockedReason: paymentSafeToChange ? void 0 : _pisell_utils.locales.getText("pisell2.hdl-kiosk.restart-order-payment-blocked"),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pisell/private-materials",
|
|
3
|
-
"version": "6.12.
|
|
3
|
+
"version": "6.12.313",
|
|
4
4
|
"main": "./lib/index.js",
|
|
5
5
|
"module": "./es/index.js",
|
|
6
6
|
"types": "./lib/index.d.ts",
|
|
@@ -73,8 +73,8 @@
|
|
|
73
73
|
"use-sync-external-store": "^1.6.0",
|
|
74
74
|
"@pisell/pi-payment-sdk": "0.0.3",
|
|
75
75
|
"@pisell/utils": "3.0.7",
|
|
76
|
-
"@pisell/icon": "0.0.11",
|
|
77
76
|
"@pisell/date-picker": "3.0.12",
|
|
77
|
+
"@pisell/icon": "0.0.11",
|
|
78
78
|
"@pisell/materials": "6.12.79"
|
|
79
79
|
},
|
|
80
80
|
"peerDependencies": {
|