@pisell/private-materials 6.12.364 → 6.12.366
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 +2 -2
- package/build/lowcode/view.js +2 -2
- package/es/components/bigSale/templates/Kiosk/index.js +52 -30
- package/es/components/scanOrder/utils/toShoppingCartProducts.identity.test.cjs +79 -0
- package/es/components/scanOrder/utils/toShoppingCartProducts.js +7 -3
- package/es/plus/saasDevice/devicePasscodes/model.js +4 -4
- package/es/plus/salesSdk/types.d.ts +2 -0
- package/es/plus/walletPassGallery/components/timelineSection/index.js +4 -4
- package/lib/components/bigSale/templates/Kiosk/index.js +52 -30
- package/lib/components/scanOrder/utils/toShoppingCartProducts.identity.test.cjs +79 -0
- package/lib/components/scanOrder/utils/toShoppingCartProducts.js +7 -3
- package/lib/plus/salesSdk/types.d.ts +2 -0
- package/package.json +3 -3
|
@@ -34,6 +34,7 @@ import { resolveKioskDeferredSubmission } from "./deferredCheckout.js";
|
|
|
34
34
|
import React, { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
35
35
|
import { Alert, Button, Modal, Spin } from "antd";
|
|
36
36
|
import { locales } from "@pisell/utils";
|
|
37
|
+
import { useToast } from "@pisell/materials";
|
|
37
38
|
import { ArrowLeftOutlined, CheckCircleFilled, PercentageOutlined } from "@ant-design/icons";
|
|
38
39
|
import "./index.less";
|
|
39
40
|
//#region src/components/bigSale/templates/Kiosk/index.tsx
|
|
@@ -231,6 +232,7 @@ function createKioskLoginContinuationHandler(options) {
|
|
|
231
232
|
function KioskBigSaleTemplate({ isActive = true, osKey, productListPreferencesChannel, context, mode, variant, kioskShellLayout = "single-screen", productLoadParams, businessCode, productDisplayConfig, productCatalogSessionKey, orderId, saleDetailModuleConfig, locale, onOrderComplete }) {
|
|
232
233
|
var _context$sales$bookin, _engineContext$appHel, _utils$getApp, _engineContext$appHel2;
|
|
233
234
|
locales.init(locales_default, locale || "en");
|
|
235
|
+
const Toast = useToast();
|
|
234
236
|
const engineContext = useEngineContext();
|
|
235
237
|
const enginePlatform = usePlatform();
|
|
236
238
|
const businessAvailability = useSalesSdkBusinessAvailability();
|
|
@@ -642,8 +644,24 @@ function KioskBigSaleTemplate({ isActive = true, osKey, productListPreferencesCh
|
|
|
642
644
|
}));
|
|
643
645
|
setView("failure");
|
|
644
646
|
};
|
|
647
|
+
const ensureRequiredProducts = function() {
|
|
648
|
+
var _ref5 = _asyncToGenerator(function* () {
|
|
649
|
+
const bookingTicket = context.sales.bookingTicket;
|
|
650
|
+
try {
|
|
651
|
+
if (bookingTicket === null || bookingTicket === void 0 ? void 0 : bookingTicket.validateRequiredProducts) yield bookingTicket.validateRequiredProducts();
|
|
652
|
+
return true;
|
|
653
|
+
} catch (error) {
|
|
654
|
+
Toast.info(error instanceof Error ? error.message : String(error));
|
|
655
|
+
setNavigableView("cart");
|
|
656
|
+
return false;
|
|
657
|
+
}
|
|
658
|
+
});
|
|
659
|
+
return function ensureRequiredProducts() {
|
|
660
|
+
return _ref5.apply(this, arguments);
|
|
661
|
+
};
|
|
662
|
+
}();
|
|
645
663
|
const performCheckout = function() {
|
|
646
|
-
var
|
|
664
|
+
var _ref23 = _asyncToGenerator(function* () {
|
|
647
665
|
if (checkoutOpeningRef.current || !shouldUseFulfillmentCheckout && isPickupTimingPending || cartItemCount === 0) return;
|
|
648
666
|
checkoutOpeningRef.current = true;
|
|
649
667
|
const openingScope = fulfillmentCheckout.captureScope();
|
|
@@ -652,18 +670,22 @@ function KioskBigSaleTemplate({ isActive = true, osKey, productListPreferencesCh
|
|
|
652
670
|
return isActiveRef.current && currentScope.handle === openingScope.handle && currentScope.scopeKey === openingScope.scopeKey && currentScope.identity === openingScope.identity;
|
|
653
671
|
};
|
|
654
672
|
const checkoutSubmitOptions = _objectSpread2(_objectSpread2({}, KIOSK_CHECKOUT_SUBMIT_OPTIONS), {}, { beforeSubmit: function() {
|
|
655
|
-
var
|
|
673
|
+
var _ref6 = _asyncToGenerator(function* () {
|
|
674
|
+
if (!isCurrentCheckoutRequest() || !(yield ensureRequiredProducts())) return false;
|
|
656
675
|
return isCurrentCheckoutRequest() && (yield businessAvailability.beginCheckout());
|
|
657
676
|
});
|
|
658
677
|
return function beforeSubmit() {
|
|
659
|
-
return
|
|
678
|
+
return _ref6.apply(this, arguments);
|
|
660
679
|
};
|
|
661
680
|
}() });
|
|
662
681
|
let deferredAttempt = false;
|
|
663
682
|
setIsCheckoutLoading(true);
|
|
664
683
|
try {
|
|
665
|
-
var
|
|
684
|
+
var _ref7, _context$sales$bookin6, _context$sales$bookin7, _context$sales$bookin8, _ref15, _context$sales$bookin13, _context$sales$bookin14, _context$sales$bookin15, _ref16, _ref17, _result$payload$payme, _result$payload, _result$data6;
|
|
666
685
|
if (!(yield businessAvailability.ensureCanShop())) return;
|
|
686
|
+
yield context.cart.waitForCartConsistency();
|
|
687
|
+
if (!isCurrentCheckoutRequest() || !(yield ensureRequiredProducts())) return;
|
|
688
|
+
if (!isCurrentCheckoutRequest()) return;
|
|
667
689
|
yield new Promise((resolve) => setTimeout(resolve, 0));
|
|
668
690
|
setPickupTimingError(void 0);
|
|
669
691
|
try {
|
|
@@ -687,7 +709,7 @@ function KioskBigSaleTemplate({ isActive = true, osKey, productListPreferencesCh
|
|
|
687
709
|
}
|
|
688
710
|
if (context.sales.contactInfo && !(yield context.sales.contactInfo.ensureComplete())) return;
|
|
689
711
|
if (!isCurrentCheckoutRequest()) return;
|
|
690
|
-
const liveTempOrder = (
|
|
712
|
+
const liveTempOrder = (_ref7 = (_context$sales$bookin6 = (_context$sales$bookin7 = context.sales.bookingTicket) === null || _context$sales$bookin7 === void 0 || (_context$sales$bookin8 = _context$sales$bookin7.getTempOrder) === null || _context$sales$bookin8 === void 0 ? void 0 : _context$sales$bookin8.call(_context$sales$bookin7)) !== null && _context$sales$bookin6 !== void 0 ? _context$sales$bookin6 : context.sales.tempOrder) !== null && _ref7 !== void 0 ? _ref7 : null;
|
|
691
713
|
if (businessAvailability.enabled && !businessAvailability.requirePaymentOnSubmit) {
|
|
692
714
|
deferredAttempt = true;
|
|
693
715
|
setSubmissionError(null);
|
|
@@ -696,8 +718,8 @@ function KioskBigSaleTemplate({ isActive = true, osKey, productListPreferencesCh
|
|
|
696
718
|
if (!isCurrentCheckoutRequest()) return;
|
|
697
719
|
const submitted = resolveKioskDeferredSubmission(result, liveTempOrder);
|
|
698
720
|
if (!submitted) {
|
|
699
|
-
var
|
|
700
|
-
throw new Error(String((
|
|
721
|
+
var _ref8, _ref9, _result$message, _result$data;
|
|
722
|
+
throw new Error(String((_ref8 = (_ref9 = (_result$message = result === null || result === void 0 ? void 0 : result.message) !== null && _result$message !== void 0 ? _result$message : result === null || result === void 0 ? void 0 : result.msg) !== null && _ref9 !== void 0 ? _ref9 : result === null || result === void 0 || (_result$data = result.data) === null || _result$data === void 0 ? void 0 : _result$data.message) !== null && _ref8 !== void 0 ? _ref8 : locales.getText("pisell2.big-sale.kiosk.submit-failure")));
|
|
701
723
|
}
|
|
702
724
|
if (platform === "pc" || platform === "h5" || shouldUseConsumerPayment) {
|
|
703
725
|
var _utils$history, _app$history3;
|
|
@@ -726,12 +748,12 @@ function KioskBigSaleTemplate({ isActive = true, osKey, productListPreferencesCh
|
|
|
726
748
|
return;
|
|
727
749
|
}
|
|
728
750
|
if (shouldUseConsumerPayment && context.sales.enableMultiCurrencySettlement && isVirtualSettlementTempOrder(liveTempOrder)) {
|
|
729
|
-
var
|
|
751
|
+
var _ref12, _ref13, _ref14, _result$data$total_am, _result$data3, _result$data4, _liveTempOrder$summar, _context$summary$summ, _context$sales$bookin11, _context$sales$bookin12, _utils$history2, _app$history4;
|
|
730
752
|
yield context.cart.waitForCartConsistency();
|
|
731
753
|
const result = yield context.cart.submit(void 0, checkoutSubmitOptions);
|
|
732
754
|
if (!isSalesOrderSubmitSuccess(result)) {
|
|
733
|
-
var
|
|
734
|
-
showCheckoutFailure(String((
|
|
755
|
+
var _ref10, _ref11, _result$message2, _result$data2;
|
|
756
|
+
showCheckoutFailure(String((_ref10 = (_ref11 = (_result$message2 = result === null || result === void 0 ? void 0 : result.message) !== null && _result$message2 !== void 0 ? _result$message2 : result === null || result === void 0 ? void 0 : result.msg) !== null && _ref11 !== void 0 ? _ref11 : result === null || result === void 0 || (_result$data2 = result.data) === null || _result$data2 === void 0 ? void 0 : _result$data2.message) !== null && _ref10 !== void 0 ? _ref10 : locales.getText("pisell2.big-sale.kiosk.payment-failure-description")));
|
|
735
757
|
return;
|
|
736
758
|
}
|
|
737
759
|
const orderId = resolveSaleDetailOrderIdFromSalesResult(context.sales, result);
|
|
@@ -739,7 +761,7 @@ function KioskBigSaleTemplate({ isActive = true, osKey, productListPreferencesCh
|
|
|
739
761
|
showCheckoutFailure(String(locales.getText("pisell2.big-sale.kiosk.payment-failure-description")));
|
|
740
762
|
return;
|
|
741
763
|
}
|
|
742
|
-
const totalAmount = (
|
|
764
|
+
const totalAmount = (_ref12 = (_ref13 = (_ref14 = (_result$data$total_am = result === null || result === void 0 || (_result$data3 = result.data) === null || _result$data3 === void 0 ? void 0 : _result$data3.total_amount) !== null && _result$data$total_am !== void 0 ? _result$data$total_am : result === null || result === void 0 || (_result$data4 = result.data) === null || _result$data4 === void 0 ? void 0 : _result$data4.expect_amount) !== null && _ref14 !== void 0 ? _ref14 : liveTempOrder === null || liveTempOrder === void 0 || (_liveTempOrder$summar = liveTempOrder.summary) === null || _liveTempOrder$summar === void 0 ? void 0 : _liveTempOrder$summar.total_amount) !== null && _ref13 !== void 0 ? _ref13 : (_context$summary$summ = context.summary.summary) === null || _context$summary$summ === void 0 ? void 0 : _context$summary$summ.total_amount) !== null && _ref12 !== void 0 ? _ref12 : 0;
|
|
743
765
|
yield context.sales.clearCartAndReset();
|
|
744
766
|
(_context$sales$bookin11 = context.sales.bookingTicket) === null || _context$sales$bookin11 === void 0 || (_context$sales$bookin12 = _context$sales$bookin11.clearSessionStorageOrderSnapshot) === null || _context$sales$bookin12 === void 0 || _context$sales$bookin12.call(_context$sales$bookin11);
|
|
745
767
|
persistKioskSessionView(context.sales.bookingTicket, "catalog");
|
|
@@ -750,8 +772,8 @@ function KioskBigSaleTemplate({ isActive = true, osKey, productListPreferencesCh
|
|
|
750
772
|
return;
|
|
751
773
|
}
|
|
752
774
|
yield context.cart.waitForCartConsistency();
|
|
753
|
-
const currentTempOrder = (
|
|
754
|
-
const currentSummary = (
|
|
775
|
+
const currentTempOrder = (_ref15 = (_context$sales$bookin13 = (_context$sales$bookin14 = context.sales.bookingTicket) === null || _context$sales$bookin14 === void 0 || (_context$sales$bookin15 = _context$sales$bookin14.getTempOrder) === null || _context$sales$bookin15 === void 0 ? void 0 : _context$sales$bookin15.call(_context$sales$bookin14)) !== null && _context$sales$bookin13 !== void 0 ? _context$sales$bookin13 : context.sales.tempOrder) !== null && _ref15 !== void 0 ? _ref15 : null;
|
|
776
|
+
const currentSummary = (_ref16 = (_ref17 = context.summary.summary) !== null && _ref17 !== void 0 ? _ref17 : currentTempOrder === null || currentTempOrder === void 0 ? void 0 : currentTempOrder.summary) !== null && _ref16 !== void 0 ? _ref16 : null;
|
|
755
777
|
const shouldCompleteNoPaymentInPage = isKioskPlatformZeroAmountCheckout(platform, currentSummary);
|
|
756
778
|
if (shouldUseConsumerPayment && !shouldCompleteNoPaymentInPage && typeof utils.action !== "function") throw new Error("[KioskBigSale] appHelper.utils.action is not available.");
|
|
757
779
|
if (shouldSubmitKioskOrderBeforeCheckout({
|
|
@@ -759,7 +781,7 @@ function KioskBigSaleTemplate({ isActive = true, osKey, productListPreferencesCh
|
|
|
759
781
|
summary: currentSummary,
|
|
760
782
|
shouldUseConsumerPayment
|
|
761
783
|
})) {
|
|
762
|
-
var _context$sales$bookin16, _context$sales$bookin17,
|
|
784
|
+
var _context$sales$bookin16, _context$sales$bookin17, _ref20, _context$sales$bookin18, _context$sales$bookin19, _context$sales$bookin20;
|
|
763
785
|
const walletAssetsState = (_context$sales$bookin16 = context.sales.bookingTicket) === null || _context$sales$bookin16 === void 0 || (_context$sales$bookin17 = _context$sales$bookin16.getWalletAssetsState) === null || _context$sales$bookin17 === void 0 ? void 0 : _context$sales$bookin17.call(_context$sales$bookin16);
|
|
764
786
|
const deferredWalletPaymentPlan = resolveKioskDeferredWalletPaymentPlan({
|
|
765
787
|
platform,
|
|
@@ -772,8 +794,8 @@ function KioskBigSaleTemplate({ isActive = true, osKey, productListPreferencesCh
|
|
|
772
794
|
if (shouldCompleteNoPaymentInPage) publishKioskCollaborationPreviewStatus(app, "checkout");
|
|
773
795
|
const result = yield context.cart.submit(submitParams, checkoutSubmitOptions);
|
|
774
796
|
if (!isSalesOrderSubmitSuccess(result)) {
|
|
775
|
-
var
|
|
776
|
-
showCheckoutFailure(String((
|
|
797
|
+
var _ref18, _ref19, _result$message3, _result$data5;
|
|
798
|
+
showCheckoutFailure(String((_ref18 = (_ref19 = (_result$message3 = result === null || result === void 0 ? void 0 : result.message) !== null && _result$message3 !== void 0 ? _result$message3 : result === null || result === void 0 ? void 0 : result.msg) !== null && _ref19 !== void 0 ? _ref19 : result === null || result === void 0 || (_result$data5 = result.data) === null || _result$data5 === void 0 ? void 0 : _result$data5.message) !== null && _ref18 !== void 0 ? _ref18 : locales.getText("pisell2.big-sale.kiosk.payment-failure-description")));
|
|
777
799
|
return;
|
|
778
800
|
}
|
|
779
801
|
const orderId = resolveSaleDetailOrderIdFromSalesResult(context.sales, result);
|
|
@@ -781,10 +803,10 @@ function KioskBigSaleTemplate({ isActive = true, osKey, productListPreferencesCh
|
|
|
781
803
|
showCheckoutFailure(String(locales.getText("pisell2.big-sale.kiosk.payment-failure-description")));
|
|
782
804
|
return;
|
|
783
805
|
}
|
|
784
|
-
const tempOrder = (
|
|
806
|
+
const tempOrder = (_ref20 = (_context$sales$bookin18 = (_context$sales$bookin19 = context.sales.bookingTicket) === null || _context$sales$bookin19 === void 0 || (_context$sales$bookin20 = _context$sales$bookin19.getTempOrder) === null || _context$sales$bookin20 === void 0 ? void 0 : _context$sales$bookin20.call(_context$sales$bookin19)) !== null && _context$sales$bookin18 !== void 0 ? _context$sales$bookin18 : context.sales.tempOrder) !== null && _ref20 !== void 0 ? _ref20 : null;
|
|
785
807
|
const totalAmount = resolveKioskSubmittedPayableAmount(result, tempOrder === null || tempOrder === void 0 ? void 0 : tempOrder.summary, context.summary.summary);
|
|
786
808
|
if (shouldCompleteNoPaymentInPage) {
|
|
787
|
-
var
|
|
809
|
+
var _ref21;
|
|
788
810
|
const validation = validateKioskNoPaymentSubmitResult({
|
|
789
811
|
result,
|
|
790
812
|
orderId,
|
|
@@ -796,7 +818,7 @@ function KioskBigSaleTemplate({ isActive = true, osKey, productListPreferencesCh
|
|
|
796
818
|
return;
|
|
797
819
|
}
|
|
798
820
|
setPaymentResult(resolveKioskNoPaymentResultViewModel({
|
|
799
|
-
summary: (
|
|
821
|
+
summary: (_ref21 = tempOrder === null || tempOrder === void 0 ? void 0 : tempOrder.summary) !== null && _ref21 !== void 0 ? _ref21 : currentSummary,
|
|
800
822
|
currencySymbol: (tempOrder === null || tempOrder === void 0 ? void 0 : tempOrder.currency_symbol) || "$"
|
|
801
823
|
}));
|
|
802
824
|
persistKioskSessionView(context.sales.bookingTicket, "catalog");
|
|
@@ -868,8 +890,8 @@ function KioskBigSaleTemplate({ isActive = true, osKey, productListPreferencesCh
|
|
|
868
890
|
if (nextPaymentResult.status !== "failed") persistKioskSessionView(context.sales.bookingTicket, "catalog");
|
|
869
891
|
setView(nextPaymentResult.status === "failed" ? "failure" : "success");
|
|
870
892
|
} else if ((result === null || result === void 0 ? void 0 : result.type) === "error" || (result === null || result === void 0 ? void 0 : result.status) === "failed") {
|
|
871
|
-
var
|
|
872
|
-
showCheckoutFailure((
|
|
893
|
+
var _ref22, _result$error, _result$payload2;
|
|
894
|
+
showCheckoutFailure((_ref22 = (_result$error = result === null || result === void 0 ? void 0 : result.error) !== null && _result$error !== void 0 ? _result$error : result === null || result === void 0 || (_result$payload2 = result.payload) === null || _result$payload2 === void 0 ? void 0 : _result$payload2.message) !== null && _ref22 !== void 0 ? _ref22 : locales.getText("pisell2.big-sale.kiosk.payment-failure-description"));
|
|
873
895
|
}
|
|
874
896
|
if (shouldCloseDialogAfterCheckout(result)) {
|
|
875
897
|
var _result$data7;
|
|
@@ -901,7 +923,7 @@ function KioskBigSaleTemplate({ isActive = true, osKey, productListPreferencesCh
|
|
|
901
923
|
}
|
|
902
924
|
});
|
|
903
925
|
return function performCheckout() {
|
|
904
|
-
return
|
|
926
|
+
return _ref23.apply(this, arguments);
|
|
905
927
|
};
|
|
906
928
|
}();
|
|
907
929
|
const hasSelectedCustomerVoucher = () => {
|
|
@@ -910,22 +932,22 @@ function KioskBigSaleTemplate({ isActive = true, osKey, productListPreferencesCh
|
|
|
910
932
|
return (runtimeDiscountList.length > 0 ? runtimeDiscountList : context.cart.discountList || []).some((discount) => isCustomerVoucher(discount) && Boolean(discount === null || discount === void 0 ? void 0 : discount.isSelected));
|
|
911
933
|
};
|
|
912
934
|
const hasAppliedWalletAsset = () => {
|
|
913
|
-
var _context$sales$bookin23, _context$sales$bookin24, _walletAssetsState$se, _walletAssetsState$se2, _walletAssetsState$se3, _walletAssetsState$se4, _walletAssetsState$co, _walletAssetsState$co2,
|
|
935
|
+
var _context$sales$bookin23, _context$sales$bookin24, _walletAssetsState$se, _walletAssetsState$se2, _walletAssetsState$se3, _walletAssetsState$se4, _walletAssetsState$co, _walletAssetsState$co2, _ref24, _context$sales$bookin25, _context$sales$bookin26, _context$sales$bookin27;
|
|
914
936
|
const walletAssetsState = (_context$sales$bookin23 = context.sales.bookingTicket) === null || _context$sales$bookin23 === void 0 || (_context$sales$bookin24 = _context$sales$bookin23.getWalletAssetsState) === null || _context$sales$bookin24 === void 0 ? void 0 : _context$sales$bookin24.call(_context$sales$bookin23);
|
|
915
937
|
if (((_walletAssetsState$se = walletAssetsState === null || walletAssetsState === void 0 || (_walletAssetsState$se2 = walletAssetsState.selectedIds) === null || _walletAssetsState$se2 === void 0 ? void 0 : _walletAssetsState$se2.length) !== null && _walletAssetsState$se !== void 0 ? _walletAssetsState$se : 0) > 0 || ((_walletAssetsState$se3 = walletAssetsState === null || walletAssetsState === void 0 || (_walletAssetsState$se4 = walletAssetsState.selectedItems) === null || _walletAssetsState$se4 === void 0 ? void 0 : _walletAssetsState$se4.length) !== null && _walletAssetsState$se3 !== void 0 ? _walletAssetsState$se3 : 0) > 0 || ((_walletAssetsState$co = walletAssetsState === null || walletAssetsState === void 0 || (_walletAssetsState$co2 = walletAssetsState.committedIds) === null || _walletAssetsState$co2 === void 0 ? void 0 : _walletAssetsState$co2.length) !== null && _walletAssetsState$co !== void 0 ? _walletAssetsState$co : 0) > 0) return true;
|
|
916
|
-
const tempOrder = (
|
|
938
|
+
const tempOrder = (_ref24 = (_context$sales$bookin25 = (_context$sales$bookin26 = context.sales.bookingTicket) === null || _context$sales$bookin26 === void 0 || (_context$sales$bookin27 = _context$sales$bookin26.getTempOrder) === null || _context$sales$bookin27 === void 0 ? void 0 : _context$sales$bookin27.call(_context$sales$bookin26)) !== null && _context$sales$bookin25 !== void 0 ? _context$sales$bookin25 : context.sales.tempOrder) !== null && _ref24 !== void 0 ? _ref24 : null;
|
|
917
939
|
return ((tempOrder === null || tempOrder === void 0 ? void 0 : tempOrder.payments) || []).some((payment) => {
|
|
918
940
|
const voucherId = payment === null || payment === void 0 ? void 0 : payment.voucher_id;
|
|
919
941
|
return voucherId !== void 0 && voucherId !== null && String(voucherId).trim() !== "" && Number(voucherId) !== 0;
|
|
920
942
|
});
|
|
921
943
|
};
|
|
922
944
|
const continueCheckout = () => {
|
|
923
|
-
var
|
|
945
|
+
var _ref25, _context$sales$bookin28, _context$sales$bookin29, _context$sales$bookin30;
|
|
924
946
|
if (businessAvailability.enabled && !businessAvailability.requirePaymentOnSubmit) {
|
|
925
947
|
performCheckout();
|
|
926
948
|
return;
|
|
927
949
|
}
|
|
928
|
-
const liveTempOrder = (
|
|
950
|
+
const liveTempOrder = (_ref25 = (_context$sales$bookin28 = (_context$sales$bookin29 = context.sales.bookingTicket) === null || _context$sales$bookin29 === void 0 || (_context$sales$bookin30 = _context$sales$bookin29.getTempOrder) === null || _context$sales$bookin30 === void 0 ? void 0 : _context$sales$bookin30.call(_context$sales$bookin29)) !== null && _context$sales$bookin28 !== void 0 ? _context$sales$bookin28 : context.sales.tempOrder) !== null && _ref25 !== void 0 ? _ref25 : null;
|
|
929
951
|
if (context.sales.enableMultiCurrencySettlement && isVirtualSettlementTempOrder(liveTempOrder)) {
|
|
930
952
|
performCheckout();
|
|
931
953
|
return;
|
|
@@ -939,7 +961,7 @@ function KioskBigSaleTemplate({ isActive = true, osKey, productListPreferencesCh
|
|
|
939
961
|
setIsVoucherReminderOpen(true);
|
|
940
962
|
};
|
|
941
963
|
const beginCheckoutWithFulfillment = function() {
|
|
942
|
-
var
|
|
964
|
+
var _ref26 = _asyncToGenerator(function* () {
|
|
943
965
|
if (!(yield businessAvailability.ensureCanShop())) return;
|
|
944
966
|
if (!shouldUseFulfillmentCheckout) {
|
|
945
967
|
continueCheckout();
|
|
@@ -958,11 +980,11 @@ function KioskBigSaleTemplate({ isActive = true, osKey, productListPreferencesCh
|
|
|
958
980
|
}
|
|
959
981
|
});
|
|
960
982
|
return function beginCheckoutWithFulfillment() {
|
|
961
|
-
return
|
|
983
|
+
return _ref26.apply(this, arguments);
|
|
962
984
|
};
|
|
963
985
|
}();
|
|
964
986
|
const handleCheckout = function() {
|
|
965
|
-
var
|
|
987
|
+
var _ref27 = _asyncToGenerator(function* () {
|
|
966
988
|
if (checkoutEntryOpeningRef.current || checkoutOpeningRef.current || checkoutLoginOpeningRef.current || fulfillmentOpeningRef.current) return;
|
|
967
989
|
checkoutEntryOpeningRef.current = true;
|
|
968
990
|
try {
|
|
@@ -1040,7 +1062,7 @@ function KioskBigSaleTemplate({ isActive = true, osKey, productListPreferencesCh
|
|
|
1040
1062
|
}
|
|
1041
1063
|
});
|
|
1042
1064
|
return function handleCheckout() {
|
|
1043
|
-
return
|
|
1065
|
+
return _ref27.apply(this, arguments);
|
|
1044
1066
|
};
|
|
1045
1067
|
}();
|
|
1046
1068
|
const handleUseVoucherBeforeCheckout = () => {
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
const assert = require('node:assert/strict');
|
|
2
|
+
const { readFileSync } = require('node:fs');
|
|
3
|
+
const { join } = require('node:path');
|
|
4
|
+
const test = require('node:test');
|
|
5
|
+
const ts = require('typescript');
|
|
6
|
+
|
|
7
|
+
// Run with node --test; load the pure adapter in memory without a materials build.
|
|
8
|
+
const source = readFileSync(join(__dirname, 'toShoppingCartProducts.ts'), 'utf8');
|
|
9
|
+
const output = ts.transpileModule(source, {
|
|
10
|
+
compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2020 },
|
|
11
|
+
});
|
|
12
|
+
const adapter = { exports: {} };
|
|
13
|
+
new Function('exports', output.outputText)(adapter.exports);
|
|
14
|
+
const { toShoppingCartProducts } = adapter.exports;
|
|
15
|
+
|
|
16
|
+
const product = {
|
|
17
|
+
product_id: 477300,
|
|
18
|
+
product_variant_id: 493720,
|
|
19
|
+
product_title: 'Latte',
|
|
20
|
+
selling_price: '5.70',
|
|
21
|
+
num: 1,
|
|
22
|
+
product_sku: {
|
|
23
|
+
option: [{ product_option_item_id: 101, name: 'Almond Milk', add_price: 0.7, num: 1 }],
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
const toCart = (...products) => toShoppingCartProducts({ orderProducts: products });
|
|
27
|
+
|
|
28
|
+
test('current OS rows retain their metadata identity for cart delete and edit callbacks', () => {
|
|
29
|
+
const uid = '0dd325cf-545e-4665-bda0-d1a26046f78e';
|
|
30
|
+
const input = { ...product, metadata: { unique_identification_number: uid } };
|
|
31
|
+
const [row] = toCart(input);
|
|
32
|
+
assert.equal(row.identity_key, uid);
|
|
33
|
+
assert.equal(row.rowKey, uid);
|
|
34
|
+
assert.equal(row._id, uid);
|
|
35
|
+
assert.equal(row.price, 5.7);
|
|
36
|
+
assert.equal(row.options[0].name, 'Almond Milk');
|
|
37
|
+
assert.equal(input.identity_key, undefined);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
test('same-SKU option rows remain independently addressable when cart order changes', () => {
|
|
41
|
+
const almond = { ...product, metadata: { unique_identification_number: 'almond-row' } };
|
|
42
|
+
const regular = {
|
|
43
|
+
...product,
|
|
44
|
+
product_sku: { option: [] },
|
|
45
|
+
metadata: { unique_identification_number: 'regular-row' },
|
|
46
|
+
};
|
|
47
|
+
const original = toCart(almond, regular);
|
|
48
|
+
const reordered = toCart(regular, almond);
|
|
49
|
+
assert.notEqual(original[0].identity_key, original[1].identity_key);
|
|
50
|
+
assert.equal(original[0].identity_key, reordered[1].identity_key);
|
|
51
|
+
assert.equal(original[1].identity_key, reordered[0].identity_key);
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
test('metadata identity takes precedence over stale top-level compatibility fields', () => {
|
|
55
|
+
const [row] = toCart({
|
|
56
|
+
...product,
|
|
57
|
+
metadata: { unique_identification_number: 'canonical-row' },
|
|
58
|
+
unique_identification_number: 'old-top-level-row',
|
|
59
|
+
identity_key: 'old-alias-row',
|
|
60
|
+
});
|
|
61
|
+
assert.equal(row.identity_key, 'canonical-row');
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
test('accepts top-level and legacy OS identities when metadata has no valid identity', () => {
|
|
65
|
+
for (const metadata of [undefined, {}, { unique_identification_number: '' }, { unique_identification_number: 123 }]) {
|
|
66
|
+
const [current, legacy] = toCart(
|
|
67
|
+
{ ...product, metadata, unique_identification_number: 'top-level-row' },
|
|
68
|
+
{ ...product, metadata, identity_key: 'legacy-row' },
|
|
69
|
+
);
|
|
70
|
+
assert.equal(current.identity_key, 'top-level-row');
|
|
71
|
+
assert.equal(legacy.identity_key, 'legacy-row');
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
test('a display-only row key never becomes a deletion identity', () => {
|
|
76
|
+
const [row] = toCart(product);
|
|
77
|
+
assert.equal(row.rowKey, '477300_493720_0');
|
|
78
|
+
assert.equal(row.identity_key, undefined);
|
|
79
|
+
});
|
|
@@ -174,11 +174,15 @@ function toShoppingCartProducts(params) {
|
|
|
174
174
|
const { orderProducts, amountSymbol = "$" } = params;
|
|
175
175
|
if (!Array.isArray(orderProducts)) return [];
|
|
176
176
|
return orderProducts.map((productItem, index) => {
|
|
177
|
-
var _productItem$_origin, _productItem$product_, _productItem$
|
|
177
|
+
var _productItem$_origin, _productItem$metadata, _productItem$product_, _productItem$metadata2;
|
|
178
178
|
const productNum = toSafeNum(productItem === null || productItem === void 0 ? void 0 : productItem.num);
|
|
179
179
|
const unitPrice = getUnitPrice(productItem);
|
|
180
180
|
const callbackData = (productItem === null || productItem === void 0 || (_productItem$_origin = productItem._origin) === null || _productItem$_origin === void 0 ? void 0 : _productItem$_origin.callbackData) || {};
|
|
181
|
-
const identityKey =
|
|
181
|
+
const identityKey = [
|
|
182
|
+
productItem === null || productItem === void 0 || (_productItem$metadata = productItem.metadata) === null || _productItem$metadata === void 0 ? void 0 : _productItem$metadata.unique_identification_number,
|
|
183
|
+
productItem === null || productItem === void 0 ? void 0 : productItem.unique_identification_number,
|
|
184
|
+
productItem === null || productItem === void 0 ? void 0 : productItem.identity_key
|
|
185
|
+
].find((value) => typeof value === "string" && value.length > 0);
|
|
182
186
|
const rowKey = identityKey !== null && identityKey !== void 0 ? identityKey : `${(_productItem$product_ = productItem.product_id) !== null && _productItem$product_ !== void 0 ? _productItem$product_ : "p"}_${productItem.product_variant_id}_${index}`;
|
|
183
187
|
const productOptionString = (typeof (callbackData === null || callbackData === void 0 ? void 0 : callbackData.product_option_string) === "string" ? callbackData.product_option_string.trim() : "") || getVariantProductOptionString(productItem) || void 0;
|
|
184
188
|
const base = _objectSpread2({
|
|
@@ -204,7 +208,7 @@ function toShoppingCartProducts(params) {
|
|
|
204
208
|
if (productItem.product_sku) base.product_sku = productItem.product_sku;
|
|
205
209
|
else if (Array.isArray(productItem.product_option_item) && productItem.product_option_item.length) base.product_option_item = productItem.product_option_item;
|
|
206
210
|
if (Array.isArray(productItem.product_bundle) && productItem.product_bundle.length) base.product_bundle = productItem.product_bundle;
|
|
207
|
-
if (productItem === null || productItem === void 0 || (_productItem$
|
|
211
|
+
if (productItem === null || productItem === void 0 || (_productItem$metadata2 = productItem.metadata) === null || _productItem$metadata2 === void 0 ? void 0 : _productItem$metadata2.venue_booking) {
|
|
208
212
|
var _origin$resources2;
|
|
209
213
|
const origin = productItem._origin || {};
|
|
210
214
|
const meta = productItem.metadata || {};
|
|
@@ -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 timezone from "dayjs/plugin/timezone";
|
|
4
|
+
import utc from "dayjs/plugin/utc";
|
|
5
5
|
//#region src/plus/saasDevice/devicePasscodes/model.ts
|
|
6
|
-
dayjs.extend(
|
|
7
|
-
dayjs.extend(
|
|
6
|
+
dayjs.extend(utc);
|
|
7
|
+
dayjs.extend(timezone);
|
|
8
8
|
const INITIAL_DEVICE_PASSCODE_STATE = {
|
|
9
9
|
deviceIds: [],
|
|
10
10
|
devicesById: {}
|
|
@@ -1080,6 +1080,8 @@ interface BookingTicketHandle extends PickupTimingHandle {
|
|
|
1080
1080
|
getOpenData?: () => Promise<Record<string, any> | null>;
|
|
1081
1081
|
getContactInfoConfig?: () => Promise<SalesContactInfoConfig>;
|
|
1082
1082
|
validateContactInfo?: () => Promise<void>;
|
|
1083
|
+
/** Online venue-ticket checkout: reject missing configured required products. */
|
|
1084
|
+
validateRequiredProducts?: () => Promise<void>;
|
|
1083
1085
|
/** 写入当前临时订单根字段 tempOrder.buzzer。 */
|
|
1084
1086
|
setPickupRef?: (buzzer: string) => string;
|
|
1085
1087
|
/** 将自助点餐固定为柜台取餐。 */
|
|
@@ -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 timezone from "dayjs/plugin/timezone";
|
|
10
|
+
import utc 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(timezone);
|
|
14
|
+
dayjs.extend(utc);
|
|
15
15
|
const stateTimeUnix = 1723255863;
|
|
16
16
|
const POLL_INTERVAL = 2e3;
|
|
17
17
|
const POLL_MAX_TIMES = 5;
|