pb-sxp-ui 1.20.66 → 1.20.68

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/dist/index.cjs CHANGED
@@ -13107,7 +13107,14 @@ Made in Italy` })));
13107
13107
  marginTop: '50px',
13108
13108
  border: 'none'
13109
13109
  } }))),
13110
- showAddToCart && (React.createElement(Modal$1, { visible: showAddToCart, padding: 0, isFullScreen: false, onClose: () => setShowAddToCart(false) },
13110
+ showAddToCart && (React.createElement(Modal$1, { visible: showAddToCart, padding: 0, isFullScreen: false, onClose: () => {
13111
+ setShowAddToCart(false);
13112
+ // SKU 场景:关闭加购弹窗时直接回到 feed,不再停留在商品弹窗
13113
+ if (addToCartVariantId && typeof window !== 'undefined' && window.sxpPopup) {
13114
+ window.sxpPopup('');
13115
+ setPopupDetailData === null || setPopupDetailData === void 0 ? void 0 : setPopupDetailData(null);
13116
+ }
13117
+ } },
13111
13118
  React.createElement(AddToCartPopup$1, { isActive: true, defaultVariantId: addToCartVariantId })))));
13112
13119
  };
13113
13120
  var CommodityDetailDiroNewComponent = React.memo(CommodityDetailDiroNew$1);
@@ -25814,8 +25821,10 @@ const Popup = () => {
25814
25821
  const { setPopupDetailData, popupDetailData, popupCurTimeRef, checkCommodityIndexRef } = useSxpDataSource();
25815
25822
  const { productView } = useEventReport();
25816
25823
  const [visible, setVisible] = React.useState();
25817
- // 记录商品弹窗的 popup id,用于加购弹窗关闭后恢复(仅 SPU 场景)
25824
+ // 记录上一个非加购弹窗的 popup,用于 SPU 场景:商品弹窗 → 加购弹窗关闭后恢复
25818
25825
  const prevCommodityPopupRef = React.useRef(null);
25826
+ // 记录当前弹窗是否是加购弹窗(用于关闭时判断)
25827
+ const isAddToCartPopupRef = React.useRef(false);
25819
25828
  React.useEffect(() => {
25820
25829
  const initTime = () => {
25821
25830
  popupCurTimeRef.current = new Date();
@@ -25827,17 +25836,24 @@ const Popup = () => {
25827
25836
  };
25828
25837
  }, []);
25829
25838
  React.useEffect(() => {
25830
- var _a, _b, _c, _d;
25839
+ var _a, _b, _c, _d, _e;
25831
25840
  if (popup && (popup === null || popup === void 0 ? void 0 : popup.id) && (popup === null || popup === void 0 ? void 0 : popup.id) !== '') {
25832
25841
  popupCurTimeRef.current = new Date();
25833
25842
  setVisible(popup);
25834
- // 非加购弹窗时,记录当前 popup,供后续加购弹窗关闭后恢复(SPU 场景)
25835
25843
  const currentValue = (_c = (_b = (_a = schema === null || schema === void 0 ? void 0 : schema.sxpPageConf) === null || _a === void 0 ? void 0 : _a.globalConfig) === null || _b === void 0 ? void 0 : _b.popupList) === null || _c === void 0 ? void 0 : _c.find((item) => (item === null || item === void 0 ? void 0 : item.id) === (popup === null || popup === void 0 ? void 0 : popup.id));
25836
- if (((_d = currentValue === null || currentValue === void 0 ? void 0 : currentValue.item) === null || _d === void 0 ? void 0 : _d.type) !== 'AddToCart') {
25844
+ const isAddToCart = ((_d = currentValue === null || currentValue === void 0 ? void 0 : currentValue.item) === null || _d === void 0 ? void 0 : _d.type) === 'AddToCart' || ((_e = currentValue === null || currentValue === void 0 ? void 0 : currentValue.item) === null || _e === void 0 ? void 0 : _e.type) === 'AddToCartPopup';
25845
+ isAddToCartPopupRef.current = isAddToCart;
25846
+ if (!isAddToCart) {
25847
+ // 记录非加购弹窗(商品弹窗等),供加购弹窗关闭后恢复
25837
25848
  prevCommodityPopupRef.current = popup;
25838
25849
  }
25839
25850
  }
25840
- }, [popup]);
25851
+ else if ((popup === null || popup === void 0 ? void 0 : popup.id) === '') {
25852
+ // popup 被清空时,同步 visible 状态以便 Modal 正确关闭,避免白屏且关不掉
25853
+ setVisible(Object.assign(Object.assign({}, popup), { id: '' }));
25854
+ isAddToCartPopupRef.current = false;
25855
+ }
25856
+ }, [popup, schema]);
25841
25857
  const isFullScreen = React.useMemo(() => {
25842
25858
  var _a, _b, _c, _d;
25843
25859
  const valueItem = (_c = (_b = (_a = schema === null || schema === void 0 ? void 0 : schema.sxpPageConf) === null || _a === void 0 ? void 0 : _a.globalConfig) === null || _b === void 0 ? void 0 : _b.popupList) === null || _c === void 0 ? void 0 : _c.find((value, index) => {
@@ -25854,10 +25870,15 @@ const Popup = () => {
25854
25870
  }, [popup, schema]);
25855
25871
  const handleClose = () => {
25856
25872
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;
25857
- if (!popup ||
25858
- (popup === null || popup === void 0 ? void 0 : popup.id) === '' ||
25859
- !visible ||
25860
- new Date() - popupCurTimeRef.current < ((_a = popup === null || popup === void 0 ? void 0 : popup.duration) !== null && _a !== void 0 ? _a : 0)) {
25873
+ // popup 已被清空时(如 CommodityDetailDiroNew SKU 场景直接调用 sxpPopup('')),确保能关闭 Modal,避免白屏关不掉
25874
+ if ((popup === null || popup === void 0 ? void 0 : popup.id) === '') {
25875
+ setVisible({ id: '' });
25876
+ setPopupDetailData === null || setPopupDetailData === void 0 ? void 0 : setPopupDetailData(null);
25877
+ checkCommodityIndexRef.current = -1;
25878
+ prevCommodityPopupRef.current = null;
25879
+ return;
25880
+ }
25881
+ if (!popup || !visible || new Date() - popupCurTimeRef.current < ((_a = popup === null || popup === void 0 ? void 0 : popup.duration) !== null && _a !== void 0 ? _a : 0)) {
25861
25882
  return;
25862
25883
  }
25863
25884
  setVisible(Object.assign(Object.assign({}, popup), { id: '' }));
@@ -25878,24 +25899,28 @@ const Popup = () => {
25878
25899
  }
25879
25900
  }
25880
25901
  // 加购弹窗关闭时,判断是否需要恢复商品弹窗
25881
- if (((_u = value === null || value === void 0 ? void 0 : value.item) === null || _u === void 0 ? void 0 : _u.type) === 'AddToCart') {
25882
- const isFromSku = !!(popupDetailData === null || popupDetailData === void 0 ? void 0 : popupDetailData._defaultVariantId);
25883
- if (!isFromSku && ((_v = prevCommodityPopupRef.current) === null || _v === void 0 ? void 0 : _v.id)) {
25884
- // SPU 场景:从商品弹窗跳来的,关闭加购弹窗后恢复商品弹窗
25885
- const _w = prevCommodityPopupRef.current, { id: commodityId } = _w, commodityAni = __rest(_w, ["id"]);
25886
- prevCommodityPopupRef.current = null;
25902
+ if (((_u = value === null || value === void 0 ? void 0 : value.item) === null || _u === void 0 ? void 0 : _u.type) === 'AddToCart' || ((_v = value === null || value === void 0 ? void 0 : value.item) === null || _v === void 0 ? void 0 : _v.type) === 'AddToCartPopup') {
25903
+ const prevPopup = prevCommodityPopupRef.current;
25904
+ prevCommodityPopupRef.current = null;
25905
+ isAddToCartPopupRef.current = false;
25906
+ // SKU 场景:加购弹窗带有 _defaultVariantId 表示从 SKU CTA 直接进入(CommodityDetail 注入),关闭后不应恢复商品弹窗
25907
+ const popupData = popupDetailData;
25908
+ const isSkuFlow = !!(popupData === null || popupData === void 0 ? void 0 : popupData._defaultVariantId);
25909
+ if ((prevPopup === null || prevPopup === void 0 ? void 0 : prevPopup.id) && !isSkuFlow) {
25910
+ // SPU 场景:加购弹窗之前有商品弹窗,关闭后恢复商品弹窗
25911
+ const { id: commodityId } = prevPopup, commodityAni = __rest(prevPopup, ["id"]);
25887
25912
  setTimeout(() => {
25888
25913
  window === null || window === void 0 ? void 0 : window.sxpPopup(commodityId, commodityAni);
25889
25914
  }, popup === null || popup === void 0 ? void 0 : popup.duration);
25890
25915
  return;
25891
25916
  }
25892
- // SKU 场景:直接从 feed 打开的,关闭后直接回到 feed
25893
- prevCommodityPopupRef.current = null;
25917
+ // SKU 场景:直接回到 feed,不恢复商品弹窗
25894
25918
  }
25895
25919
  setTimeout(() => {
25896
25920
  window === null || window === void 0 ? void 0 : window.sxpPopup('');
25897
25921
  setPopupDetailData === null || setPopupDetailData === void 0 ? void 0 : setPopupDetailData(null);
25898
25922
  checkCommodityIndexRef.current = -1;
25923
+ prevCommodityPopupRef.current = null;
25899
25924
  }, popup === null || popup === void 0 ? void 0 : popup.duration);
25900
25925
  };
25901
25926
  const renderPopupDetail = React.useMemo(() => {