@pisell/private-materials 6.12.311 → 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.
Files changed (48) hide show
  1. package/build/lowcode/assets-daily.json +11 -11
  2. package/build/lowcode/assets-dev.json +2 -2
  3. package/build/lowcode/assets-prod.json +11 -11
  4. package/build/lowcode/meta.js +1 -1
  5. package/build/lowcode/render/default/view.css +1 -1
  6. package/build/lowcode/render/default/view.js +1 -1
  7. package/build/lowcode/view.css +1 -1
  8. package/build/lowcode/view.js +1 -1
  9. package/es/components/HDLKiosk/slices/customization/Screen/index.less +1 -5
  10. package/es/components/HDLKiosk/slices/payment/Screen/index.js +88 -39
  11. package/es/components/HDLKiosk/slices/payment/view.js +5 -2
  12. package/es/components/bigSale/components/BookingFloatingPanel/useBookingPanelController.js +1 -0
  13. package/es/components/bigSale/components/ProductList/index.js +1 -0
  14. package/es/components/bigSale/components/TimeBar/index.js +1 -0
  15. package/es/components/bigSale/dialog.js +1 -0
  16. package/es/components/bigSale/hooks/useBigSaleContext.js +1 -0
  17. package/es/components/bigSale/hooks/useSelectFloorMapResourceForBigSale.js +1 -0
  18. package/es/components/bigSale/index.js +1 -0
  19. package/es/components/bigSale/templates/Kiosk/index.js +1 -0
  20. package/es/components/sharedSecondaryBigSale/SharedSecondaryBigSaleReceiver.js +1 -0
  21. package/es/index.js +2 -0
  22. package/es/plus/multiCurrencySettlement/index.js +1 -1
  23. package/es/plus/pisellReservation/data/bookingToReservationTables.js +1 -1
  24. package/es/plus/pisellReservation/floorMap/floorPlanApi.js +1 -1
  25. package/es/plus/pisellReservation/floorMap/reservationMock.js +1 -1
  26. package/es/plus/pisellReservation/index.js +17 -0
  27. package/es/plus/saasDevice/devicePasscodes/model.js +4 -4
  28. package/es/plus/saleDetail/Base.js +1 -0
  29. package/es/plus/saleDetail/components/Client/hooks/useClientSelectorProps.js +1 -0
  30. package/es/plus/saleDetail/components/DetailActions/PrintAction.js +1 -0
  31. package/es/plus/saleDetail/components/DetailActions/index.js +1 -0
  32. package/es/plus/saleDetail/components/SummaryFinancialSections/index.js +1 -0
  33. package/es/plus/saleDetail/index.js +1 -0
  34. package/es/plus/saleDetail/tmpl/B/components/Dish/index.js +1 -0
  35. package/es/plus/saleDetail/tmpl/B/index.js +1 -0
  36. package/es/plus/salesSdk/index.js +54 -0
  37. package/es/plus/salesSdk/utils/addProductWithFlowDebounced.js +1 -1
  38. package/es/plus/salesSdk/utils/bookingDate.js +1 -1
  39. package/es/plus/salesSdk/utils/enrichCartLineHolderDisplay.js +1 -1
  40. package/es/plus/walletPassGallery/components/timelineSection/index.js +4 -4
  41. package/es/pro/Login2.0/AuthModal.d.ts +1 -1
  42. package/es/pro/Login2.0/index.d.ts +2 -2
  43. package/es/pro/Login2.0/shared/types.d.ts +1 -1
  44. package/lib/components/HDLKiosk/slices/customization/Screen/index.less +1 -5
  45. package/lib/components/HDLKiosk/slices/payment/Screen/index.js +88 -39
  46. package/lib/components/HDLKiosk/slices/payment/view.js +5 -2
  47. package/package.json +3 -3
  48. package/es/private-materials/lowcode/authmodal/meta.d.ts +0 -1
@@ -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
- /** 与 PaymentModal 一致:EFTPOS/信用卡使用 credit,其余自定义方式使用 custom。 */
31
- function PaymentMethodIcon({ code, type }) {
32
- const isCard = code === "EFTPOS" || type === "credit-card" || type === "eftpos";
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: isCard ? "pisell2-credit" : "pisell2-custom",
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$paymentFeedbac;
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$paymentFeedbac = model.paymentFeedback) === null || _model$paymentFeedbac === void 0 ? void 0 : _model$paymentFeedbac.key) === dismissedFeedbackKey ? void 0 : model.paymentFeedback;
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": method.name,
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
- type: method.type
212
- }), /* @__PURE__ */ react.default.createElement("span", null, /* @__PURE__ */ react.default.createElement("strong", null, method.name)), /* @__PURE__ */ react.default.createElement(NextIcon, null));
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.311",
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,9 +73,9 @@
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/materials": "6.12.79",
77
76
  "@pisell/date-picker": "3.0.12",
78
- "@pisell/icon": "0.0.11"
77
+ "@pisell/icon": "0.0.11",
78
+ "@pisell/materials": "6.12.79"
79
79
  },
80
80
  "peerDependencies": {
81
81
  "react": "^18.0.0",
@@ -1 +0,0 @@
1
- export { };