@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.
@@ -36,6 +36,7 @@ let react = require("react");
36
36
  react = require_runtime.__toESM(react);
37
37
  let antd = require("antd");
38
38
  let _pisell_utils = require("@pisell/utils");
39
+ let _pisell_materials = require("@pisell/materials");
39
40
  let _ant_design_icons = require("@ant-design/icons");
40
41
  require("./index.less");
41
42
  //#region src/components/bigSale/templates/Kiosk/index.tsx
@@ -233,6 +234,7 @@ function createKioskLoginContinuationHandler(options) {
233
234
  function KioskBigSaleTemplate({ isActive = true, osKey, productListPreferencesChannel, context, mode, variant, kioskShellLayout = "single-screen", productLoadParams, businessCode, productDisplayConfig, productCatalogSessionKey, orderId, saleDetailModuleConfig, locale, onOrderComplete }) {
234
235
  var _context$sales$bookin, _engineContext$appHel, _utils$getApp, _engineContext$appHel2;
235
236
  _pisell_utils.locales.init(require_index$2.default, locale || "en");
237
+ const Toast = (0, _pisell_materials.useToast)();
236
238
  const engineContext = require_useEngineContext.default();
237
239
  const enginePlatform = require_useEngineContext.usePlatform();
238
240
  const businessAvailability = require_SalesSdkBusinessAvailabilityContext.useSalesSdkBusinessAvailability();
@@ -644,8 +646,24 @@ function KioskBigSaleTemplate({ isActive = true, osKey, productListPreferencesCh
644
646
  }));
645
647
  setView("failure");
646
648
  };
649
+ const ensureRequiredProducts = function() {
650
+ var _ref5 = require_asyncToGenerator._asyncToGenerator(function* () {
651
+ const bookingTicket = context.sales.bookingTicket;
652
+ try {
653
+ if (bookingTicket === null || bookingTicket === void 0 ? void 0 : bookingTicket.validateRequiredProducts) yield bookingTicket.validateRequiredProducts();
654
+ return true;
655
+ } catch (error) {
656
+ Toast.info(error instanceof Error ? error.message : String(error));
657
+ setNavigableView("cart");
658
+ return false;
659
+ }
660
+ });
661
+ return function ensureRequiredProducts() {
662
+ return _ref5.apply(this, arguments);
663
+ };
664
+ }();
647
665
  const performCheckout = function() {
648
- var _ref22 = require_asyncToGenerator._asyncToGenerator(function* () {
666
+ var _ref23 = require_asyncToGenerator._asyncToGenerator(function* () {
649
667
  if (checkoutOpeningRef.current || !shouldUseFulfillmentCheckout && isPickupTimingPending || cartItemCount === 0) return;
650
668
  checkoutOpeningRef.current = true;
651
669
  const openingScope = fulfillmentCheckout.captureScope();
@@ -654,18 +672,22 @@ function KioskBigSaleTemplate({ isActive = true, osKey, productListPreferencesCh
654
672
  return isActiveRef.current && currentScope.handle === openingScope.handle && currentScope.scopeKey === openingScope.scopeKey && currentScope.identity === openingScope.identity;
655
673
  };
656
674
  const checkoutSubmitOptions = require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, KIOSK_CHECKOUT_SUBMIT_OPTIONS), {}, { beforeSubmit: function() {
657
- var _ref5 = require_asyncToGenerator._asyncToGenerator(function* () {
675
+ var _ref6 = require_asyncToGenerator._asyncToGenerator(function* () {
676
+ if (!isCurrentCheckoutRequest() || !(yield ensureRequiredProducts())) return false;
658
677
  return isCurrentCheckoutRequest() && (yield businessAvailability.beginCheckout());
659
678
  });
660
679
  return function beforeSubmit() {
661
- return _ref5.apply(this, arguments);
680
+ return _ref6.apply(this, arguments);
662
681
  };
663
682
  }() });
664
683
  let deferredAttempt = false;
665
684
  setIsCheckoutLoading(true);
666
685
  try {
667
- var _ref6, _context$sales$bookin6, _context$sales$bookin7, _context$sales$bookin8, _ref14, _context$sales$bookin13, _context$sales$bookin14, _context$sales$bookin15, _ref15, _ref16, _result$payload$payme, _result$payload, _result$data6;
686
+ 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;
668
687
  if (!(yield businessAvailability.ensureCanShop())) return;
688
+ yield context.cart.waitForCartConsistency();
689
+ if (!isCurrentCheckoutRequest() || !(yield ensureRequiredProducts())) return;
690
+ if (!isCurrentCheckoutRequest()) return;
669
691
  yield new Promise((resolve) => setTimeout(resolve, 0));
670
692
  setPickupTimingError(void 0);
671
693
  try {
@@ -689,7 +711,7 @@ function KioskBigSaleTemplate({ isActive = true, osKey, productListPreferencesCh
689
711
  }
690
712
  if (context.sales.contactInfo && !(yield context.sales.contactInfo.ensureComplete())) return;
691
713
  if (!isCurrentCheckoutRequest()) return;
692
- const liveTempOrder = (_ref6 = (_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 && _ref6 !== void 0 ? _ref6 : null;
714
+ 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;
693
715
  if (businessAvailability.enabled && !businessAvailability.requirePaymentOnSubmit) {
694
716
  deferredAttempt = true;
695
717
  setSubmissionError(null);
@@ -698,8 +720,8 @@ function KioskBigSaleTemplate({ isActive = true, osKey, productListPreferencesCh
698
720
  if (!isCurrentCheckoutRequest()) return;
699
721
  const submitted = require_deferredCheckout.resolveKioskDeferredSubmission(result, liveTempOrder);
700
722
  if (!submitted) {
701
- var _ref7, _ref8, _result$message, _result$data;
702
- throw new Error(String((_ref7 = (_ref8 = (_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 && _ref8 !== void 0 ? _ref8 : result === null || result === void 0 || (_result$data = result.data) === null || _result$data === void 0 ? void 0 : _result$data.message) !== null && _ref7 !== void 0 ? _ref7 : _pisell_utils.locales.getText("pisell2.big-sale.kiosk.submit-failure")));
723
+ var _ref8, _ref9, _result$message, _result$data;
724
+ 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 : _pisell_utils.locales.getText("pisell2.big-sale.kiosk.submit-failure")));
703
725
  }
704
726
  if (platform === "pc" || platform === "h5" || shouldUseConsumerPayment) {
705
727
  var _utils$history, _app$history3;
@@ -728,12 +750,12 @@ function KioskBigSaleTemplate({ isActive = true, osKey, productListPreferencesCh
728
750
  return;
729
751
  }
730
752
  if (shouldUseConsumerPayment && context.sales.enableMultiCurrencySettlement && require_index.isVirtualSettlementTempOrder(liveTempOrder)) {
731
- var _ref11, _ref12, _ref13, _result$data$total_am, _result$data3, _result$data4, _liveTempOrder$summar, _context$summary$summ, _context$sales$bookin11, _context$sales$bookin12, _utils$history2, _app$history4;
753
+ 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;
732
754
  yield context.cart.waitForCartConsistency();
733
755
  const result = yield context.cart.submit(void 0, checkoutSubmitOptions);
734
756
  if (!require_utils$1.isSalesOrderSubmitSuccess(result)) {
735
- var _ref9, _ref10, _result$message2, _result$data2;
736
- showCheckoutFailure(String((_ref9 = (_ref10 = (_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 && _ref10 !== void 0 ? _ref10 : result === null || result === void 0 || (_result$data2 = result.data) === null || _result$data2 === void 0 ? void 0 : _result$data2.message) !== null && _ref9 !== void 0 ? _ref9 : _pisell_utils.locales.getText("pisell2.big-sale.kiosk.payment-failure-description")));
757
+ var _ref10, _ref11, _result$message2, _result$data2;
758
+ 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 : _pisell_utils.locales.getText("pisell2.big-sale.kiosk.payment-failure-description")));
737
759
  return;
738
760
  }
739
761
  const orderId = require_utils$1.resolveSaleDetailOrderIdFromSalesResult(context.sales, result);
@@ -741,7 +763,7 @@ function KioskBigSaleTemplate({ isActive = true, osKey, productListPreferencesCh
741
763
  showCheckoutFailure(String(_pisell_utils.locales.getText("pisell2.big-sale.kiosk.payment-failure-description")));
742
764
  return;
743
765
  }
744
- const totalAmount = (_ref11 = (_ref12 = (_ref13 = (_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 && _ref13 !== void 0 ? _ref13 : liveTempOrder === null || liveTempOrder === void 0 || (_liveTempOrder$summar = liveTempOrder.summary) === null || _liveTempOrder$summar === void 0 ? void 0 : _liveTempOrder$summar.total_amount) !== null && _ref12 !== void 0 ? _ref12 : (_context$summary$summ = context.summary.summary) === null || _context$summary$summ === void 0 ? void 0 : _context$summary$summ.total_amount) !== null && _ref11 !== void 0 ? _ref11 : 0;
766
+ 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;
745
767
  yield context.sales.clearCartAndReset();
746
768
  (_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);
747
769
  persistKioskSessionView(context.sales.bookingTicket, "catalog");
@@ -752,8 +774,8 @@ function KioskBigSaleTemplate({ isActive = true, osKey, productListPreferencesCh
752
774
  return;
753
775
  }
754
776
  yield context.cart.waitForCartConsistency();
755
- const currentTempOrder = (_ref14 = (_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 && _ref14 !== void 0 ? _ref14 : null;
756
- const currentSummary = (_ref15 = (_ref16 = context.summary.summary) !== null && _ref16 !== void 0 ? _ref16 : currentTempOrder === null || currentTempOrder === void 0 ? void 0 : currentTempOrder.summary) !== null && _ref15 !== void 0 ? _ref15 : null;
777
+ 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;
778
+ 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;
757
779
  const shouldCompleteNoPaymentInPage = require_zeroAmountCheckout.isKioskPlatformZeroAmountCheckout(platform, currentSummary);
758
780
  if (shouldUseConsumerPayment && !shouldCompleteNoPaymentInPage && typeof utils.action !== "function") throw new Error("[KioskBigSale] appHelper.utils.action is not available.");
759
781
  if (require_zeroAmountCheckout.shouldSubmitKioskOrderBeforeCheckout({
@@ -761,7 +783,7 @@ function KioskBigSaleTemplate({ isActive = true, osKey, productListPreferencesCh
761
783
  summary: currentSummary,
762
784
  shouldUseConsumerPayment
763
785
  })) {
764
- var _context$sales$bookin16, _context$sales$bookin17, _ref19, _context$sales$bookin18, _context$sales$bookin19, _context$sales$bookin20;
786
+ var _context$sales$bookin16, _context$sales$bookin17, _ref20, _context$sales$bookin18, _context$sales$bookin19, _context$sales$bookin20;
765
787
  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);
766
788
  const deferredWalletPaymentPlan = resolveKioskDeferredWalletPaymentPlan({
767
789
  platform,
@@ -774,8 +796,8 @@ function KioskBigSaleTemplate({ isActive = true, osKey, productListPreferencesCh
774
796
  if (shouldCompleteNoPaymentInPage) publishKioskCollaborationPreviewStatus(app, "checkout");
775
797
  const result = yield context.cart.submit(submitParams, checkoutSubmitOptions);
776
798
  if (!require_utils$1.isSalesOrderSubmitSuccess(result)) {
777
- var _ref17, _ref18, _result$message3, _result$data5;
778
- showCheckoutFailure(String((_ref17 = (_ref18 = (_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 && _ref18 !== void 0 ? _ref18 : result === null || result === void 0 || (_result$data5 = result.data) === null || _result$data5 === void 0 ? void 0 : _result$data5.message) !== null && _ref17 !== void 0 ? _ref17 : _pisell_utils.locales.getText("pisell2.big-sale.kiosk.payment-failure-description")));
799
+ var _ref18, _ref19, _result$message3, _result$data5;
800
+ 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 : _pisell_utils.locales.getText("pisell2.big-sale.kiosk.payment-failure-description")));
779
801
  return;
780
802
  }
781
803
  const orderId = require_utils$1.resolveSaleDetailOrderIdFromSalesResult(context.sales, result);
@@ -783,10 +805,10 @@ function KioskBigSaleTemplate({ isActive = true, osKey, productListPreferencesCh
783
805
  showCheckoutFailure(String(_pisell_utils.locales.getText("pisell2.big-sale.kiosk.payment-failure-description")));
784
806
  return;
785
807
  }
786
- const tempOrder = (_ref19 = (_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 && _ref19 !== void 0 ? _ref19 : null;
808
+ 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;
787
809
  const totalAmount = require_zeroAmountCheckout.resolveKioskSubmittedPayableAmount(result, tempOrder === null || tempOrder === void 0 ? void 0 : tempOrder.summary, context.summary.summary);
788
810
  if (shouldCompleteNoPaymentInPage) {
789
- var _ref20;
811
+ var _ref21;
790
812
  const validation = require_zeroAmountCheckout.validateKioskNoPaymentSubmitResult({
791
813
  result,
792
814
  orderId,
@@ -798,7 +820,7 @@ function KioskBigSaleTemplate({ isActive = true, osKey, productListPreferencesCh
798
820
  return;
799
821
  }
800
822
  setPaymentResult(require_zeroAmountCheckout.resolveKioskNoPaymentResultViewModel({
801
- summary: (_ref20 = tempOrder === null || tempOrder === void 0 ? void 0 : tempOrder.summary) !== null && _ref20 !== void 0 ? _ref20 : currentSummary,
823
+ summary: (_ref21 = tempOrder === null || tempOrder === void 0 ? void 0 : tempOrder.summary) !== null && _ref21 !== void 0 ? _ref21 : currentSummary,
802
824
  currencySymbol: (tempOrder === null || tempOrder === void 0 ? void 0 : tempOrder.currency_symbol) || "$"
803
825
  }));
804
826
  persistKioskSessionView(context.sales.bookingTicket, "catalog");
@@ -870,8 +892,8 @@ function KioskBigSaleTemplate({ isActive = true, osKey, productListPreferencesCh
870
892
  if (nextPaymentResult.status !== "failed") persistKioskSessionView(context.sales.bookingTicket, "catalog");
871
893
  setView(nextPaymentResult.status === "failed" ? "failure" : "success");
872
894
  } else if ((result === null || result === void 0 ? void 0 : result.type) === "error" || (result === null || result === void 0 ? void 0 : result.status) === "failed") {
873
- var _ref21, _result$error, _result$payload2;
874
- showCheckoutFailure((_ref21 = (_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 && _ref21 !== void 0 ? _ref21 : _pisell_utils.locales.getText("pisell2.big-sale.kiosk.payment-failure-description"));
895
+ var _ref22, _result$error, _result$payload2;
896
+ 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 : _pisell_utils.locales.getText("pisell2.big-sale.kiosk.payment-failure-description"));
875
897
  }
876
898
  if (require_utils$1.shouldCloseDialogAfterCheckout(result)) {
877
899
  var _result$data7;
@@ -903,7 +925,7 @@ function KioskBigSaleTemplate({ isActive = true, osKey, productListPreferencesCh
903
925
  }
904
926
  });
905
927
  return function performCheckout() {
906
- return _ref22.apply(this, arguments);
928
+ return _ref23.apply(this, arguments);
907
929
  };
908
930
  }();
909
931
  const hasSelectedCustomerVoucher = () => {
@@ -912,22 +934,22 @@ function KioskBigSaleTemplate({ isActive = true, osKey, productListPreferencesCh
912
934
  return (runtimeDiscountList.length > 0 ? runtimeDiscountList : context.cart.discountList || []).some((discount) => require_adapters.isCustomerVoucher(discount) && Boolean(discount === null || discount === void 0 ? void 0 : discount.isSelected));
913
935
  };
914
936
  const hasAppliedWalletAsset = () => {
915
- var _context$sales$bookin23, _context$sales$bookin24, _walletAssetsState$se, _walletAssetsState$se2, _walletAssetsState$se3, _walletAssetsState$se4, _walletAssetsState$co, _walletAssetsState$co2, _ref23, _context$sales$bookin25, _context$sales$bookin26, _context$sales$bookin27;
937
+ 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;
916
938
  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);
917
939
  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;
918
- const tempOrder = (_ref23 = (_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 && _ref23 !== void 0 ? _ref23 : null;
940
+ 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;
919
941
  return ((tempOrder === null || tempOrder === void 0 ? void 0 : tempOrder.payments) || []).some((payment) => {
920
942
  const voucherId = payment === null || payment === void 0 ? void 0 : payment.voucher_id;
921
943
  return voucherId !== void 0 && voucherId !== null && String(voucherId).trim() !== "" && Number(voucherId) !== 0;
922
944
  });
923
945
  };
924
946
  const continueCheckout = () => {
925
- var _ref24, _context$sales$bookin28, _context$sales$bookin29, _context$sales$bookin30;
947
+ var _ref25, _context$sales$bookin28, _context$sales$bookin29, _context$sales$bookin30;
926
948
  if (businessAvailability.enabled && !businessAvailability.requirePaymentOnSubmit) {
927
949
  performCheckout();
928
950
  return;
929
951
  }
930
- const liveTempOrder = (_ref24 = (_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 && _ref24 !== void 0 ? _ref24 : null;
952
+ 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;
931
953
  if (context.sales.enableMultiCurrencySettlement && require_index.isVirtualSettlementTempOrder(liveTempOrder)) {
932
954
  performCheckout();
933
955
  return;
@@ -941,7 +963,7 @@ function KioskBigSaleTemplate({ isActive = true, osKey, productListPreferencesCh
941
963
  setIsVoucherReminderOpen(true);
942
964
  };
943
965
  const beginCheckoutWithFulfillment = function() {
944
- var _ref25 = require_asyncToGenerator._asyncToGenerator(function* () {
966
+ var _ref26 = require_asyncToGenerator._asyncToGenerator(function* () {
945
967
  if (!(yield businessAvailability.ensureCanShop())) return;
946
968
  if (!shouldUseFulfillmentCheckout) {
947
969
  continueCheckout();
@@ -960,11 +982,11 @@ function KioskBigSaleTemplate({ isActive = true, osKey, productListPreferencesCh
960
982
  }
961
983
  });
962
984
  return function beginCheckoutWithFulfillment() {
963
- return _ref25.apply(this, arguments);
985
+ return _ref26.apply(this, arguments);
964
986
  };
965
987
  }();
966
988
  const handleCheckout = function() {
967
- var _ref26 = require_asyncToGenerator._asyncToGenerator(function* () {
989
+ var _ref27 = require_asyncToGenerator._asyncToGenerator(function* () {
968
990
  if (checkoutEntryOpeningRef.current || checkoutOpeningRef.current || checkoutLoginOpeningRef.current || fulfillmentOpeningRef.current) return;
969
991
  checkoutEntryOpeningRef.current = true;
970
992
  try {
@@ -1042,7 +1064,7 @@ function KioskBigSaleTemplate({ isActive = true, osKey, productListPreferencesCh
1042
1064
  }
1043
1065
  });
1044
1066
  return function handleCheckout() {
1045
- return _ref26.apply(this, arguments);
1067
+ return _ref27.apply(this, arguments);
1046
1068
  };
1047
1069
  }();
1048
1070
  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$metadata;
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 = typeof (productItem === null || productItem === void 0 ? void 0 : productItem.identity_key) === "string" && productItem.identity_key.length > 0 ? productItem.identity_key : void 0;
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 = require_objectSpread2._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$metadata = productItem.metadata) === null || _productItem$metadata === void 0 ? void 0 : _productItem$metadata.venue_booking) {
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 || {};
@@ -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
  /** 将自助点餐固定为柜台取餐。 */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pisell/private-materials",
3
- "version": "6.12.364",
3
+ "version": "6.12.366",
4
4
  "main": "./lib/index.js",
5
5
  "module": "./es/index.js",
6
6
  "types": "./lib/index.d.ts",
@@ -74,9 +74,9 @@
74
74
  "styled-components": "^6.0.0-rc.3",
75
75
  "use-sync-external-store": "^1.6.0",
76
76
  "@pisell/pi-payment-sdk": "0.0.4",
77
- "@pisell/utils": "3.0.7",
78
- "@pisell/materials": "6.12.87",
79
77
  "@pisell/date-picker": "3.0.12",
78
+ "@pisell/materials": "6.12.87",
79
+ "@pisell/utils": "3.0.7",
80
80
  "@pisell/icon": "0.0.11"
81
81
  },
82
82
  "peerDependencies": {