@anker-in/shopify-react 0.1.1-beta.0 → 0.1.1-beta.2

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.mjs CHANGED
@@ -173,25 +173,25 @@ var getMatchedMainProductSubTotal = (cartData, variant_list, main_product) => {
173
173
  return acc + (main_product?.spend_money_type === 1 /* ORIGIN_PRICE */ ? Number(line.subtotalAmount) || 0 : Number(line.totalAmount) || 0);
174
174
  }, 0) || 0;
175
175
  };
176
- var getDiscountEnvAttributeValue = (attributes = []) => {
177
- const attr = attributes.find((attr2) => attr2.key === CUSTOMER_ATTRIBUTE_KEY);
178
- return safeParseJson(attr?.value ?? "") ?? {};
179
- };
180
- var isAttributesEqual = (attrs1 = [], attrs2 = []) => {
181
- if (attrs1.length !== attrs2.length) return false;
182
- const sorted1 = [...attrs1].sort((a, b) => a.key.localeCompare(b.key));
183
- const sorted2 = [...attrs2].sort((a, b) => a.key.localeCompare(b.key));
184
- return sorted1.every(
185
- (attr, i) => attr.key === sorted2[i]?.key && attr.value === sorted2[i]?.value
186
- );
187
- };
188
- var safeParseJson = (str) => {
176
+ var safeParse = (str) => {
189
177
  try {
190
178
  return JSON.parse(str);
191
179
  } catch (err) {
192
180
  return {};
193
181
  }
194
182
  };
183
+ var getDiscountEnvAttributeValue = (attributes = []) => {
184
+ const attr = attributes.find((attr2) => attr2.key === CUSTOMER_ATTRIBUTE_KEY);
185
+ return safeParse(attr?.value ?? "") ?? {};
186
+ };
187
+ var checkAttributesUpdateNeeded = (oldAttributes, newAttributes, customAttributesNeedRemove) => {
188
+ return oldAttributes.some((attr) => {
189
+ const newAttr = newAttributes.find((newAttr2) => newAttr2.key === attr.key);
190
+ return newAttr ? newAttr.value !== attr.value : true;
191
+ }) || newAttributes.some((attr) => !oldAttributes.some((oldAttr) => oldAttr.key === attr.key)) || customAttributesNeedRemove.some(
192
+ (removeAttr) => oldAttributes.some((oldAttr) => oldAttr.key === removeAttr.key)
193
+ );
194
+ };
195
195
  var containsAll = (source, requiredItems = []) => {
196
196
  if (!requiredItems?.length) return true;
197
197
  const sourceSet = new Set(source);
@@ -480,6 +480,14 @@ var useScriptAutoFreeGift = ({
480
480
  set_points_subscribe(!!isPointsSubscribe);
481
481
  }
482
482
  }, [locale]);
483
+ const isActivityAvailable = useMemo(() => {
484
+ if (!campaign) return false;
485
+ const query = getQuery();
486
+ const utmCampaign = Cookies5.get("utm_campaign") || query?.utm_campaign;
487
+ if (campaign.activityAvailableQuery && !utmCampaign?.includes(campaign.activityAvailableQuery))
488
+ return false;
489
+ return true;
490
+ }, [campaign]);
483
491
  const [upgrade_multiple, upgrade_value] = useMemo(() => {
484
492
  let upgrade_multiple2 = 1;
485
493
  let upgrade_value2 = 0;
@@ -496,8 +504,8 @@ var useScriptAutoFreeGift = ({
496
504
  return [upgrade_multiple2, upgrade_value2];
497
505
  }, [cart?.lineItems, points_subscribe]);
498
506
  const breakpoints = useMemo(() => {
499
- if (!campaign) return [];
500
- return (campaign.breakpoints || []).map((item) => ({
507
+ if (!isActivityAvailable) return [];
508
+ return (campaign?.breakpoints || []).map((item) => ({
501
509
  breakpoint: new Decimal2(item.breakpoint).minus(new Decimal2(upgrade_value)).dividedBy(new Decimal2(upgrade_multiple)).toFixed(2, Decimal2.ROUND_DOWN),
502
510
  giveawayProducts: item.giveawayProducts || []
503
511
  }));
@@ -521,25 +529,26 @@ var useScriptAutoFreeGift = ({
521
529
  return true;
522
530
  }, [giftHandles]);
523
531
  const involvedLines = useMemo(() => {
524
- if (!campaign) return [];
532
+ if (!isActivityAvailable) return [];
525
533
  return (cart?.lineItems || []).filter((line) => {
526
534
  const isNotGift = line?.totalAmount && Number(line.totalAmount) > 0 && line.customAttributes?.every(
527
535
  (item) => item.key !== _giveaway
528
536
  );
529
537
  const hasCampaignTag = line.product?.tags?.some(
530
- (tag) => campaign.includeTags?.includes(tag.trim()) && line.variant?.availableForSale
538
+ (tag) => campaign?.includeTags?.includes(tag.trim()) && line.variant?.availableForSale
531
539
  );
532
540
  return isNotGift && hasCampaignTag;
533
541
  });
534
- }, [cart?.lineItems, campaign, _giveaway]);
542
+ }, [cart?.lineItems, isActivityAvailable, _giveaway]);
535
543
  const involvedSubTotal = useMemo(() => {
536
- if (!campaign) return new Decimal2(0);
544
+ if (!isActivityAvailable) return new Decimal2(0);
537
545
  return involvedLines.reduce((prev, item) => {
538
- const amount = campaign.useTotalAmount ? item.totalAmount : item.subtotalAmount;
546
+ const amount = campaign?.useTotalAmount ? item.totalAmount : item.subtotalAmount;
539
547
  return new Decimal2(prev).plus(new Decimal2(amount || 0));
540
548
  }, new Decimal2(0));
541
- }, [involvedLines, campaign]);
549
+ }, [involvedLines, isActivityAvailable]);
542
550
  const [freeGiftLevel, nextFreeGiftLevel] = useMemo(() => {
551
+ if (!isActivityAvailable) return [null, null];
543
552
  const sortedLevels = [...breakpoints].sort(
544
553
  (a, b) => Number(b.breakpoint) - Number(a.breakpoint)
545
554
  );
@@ -659,8 +668,6 @@ function useAddCartLines(options) {
659
668
  );
660
669
  return useSWRMutation("add-cart-lines", addLines, options);
661
670
  }
662
-
663
- // src/tracking/ga.ts
664
671
  var gaTrack = (data) => {
665
672
  if (typeof window === "undefined") {
666
673
  return;
@@ -678,18 +685,19 @@ var gaTrack = (data) => {
678
685
  };
679
686
  var trackAddToCartGA = ({
680
687
  lineItems = [],
681
- gtmParams = {},
682
- brand
688
+ gtmParams = {}
683
689
  }) => {
684
690
  if (!lineItems.length || !lineItems[0]?.variant) {
685
691
  return;
686
692
  }
687
693
  const { variant } = lineItems[0];
688
- const currencyCode = variant?.price?.currencyCode;
689
- const totalPrice = lineItems.reduce((sum, item) => {
690
- const price = parseFloat(item.variant?.price?.amount || "0");
691
- return sum + price;
692
- }, 0);
694
+ const currencyCode = variant.product?.price?.currencyCode;
695
+ const totalPrice = lineItems?.reduce(
696
+ (prev, { variant: variant2 }) => prev.plus(
697
+ variant2?.finalPrice?.amount ?? variant2?.compareAtPrice?.amount ?? variant2?.price?.amount ?? 0
698
+ ),
699
+ new Decimal2(0)
700
+ ).toNumber();
693
701
  gaTrack({
694
702
  event: "ga4Event",
695
703
  event_name: "add_to_cart",
@@ -700,11 +708,11 @@ var trackAddToCartGA = ({
700
708
  position: gtmParams?.position || "",
701
709
  items: lineItems.map(({ variant: variant2, quantity }) => ({
702
710
  item_id: variant2?.sku,
703
- item_name: variant2?.product?.title || variant2?.product?.name,
704
- item_brand: brand || gtmParams?.brand || "",
711
+ item_name: variant2?.product?.title || variant2?.product?.title,
712
+ item_brand: gtmParams?.brand || "",
705
713
  item_category: variant2?.product?.productType || "",
706
- item_variant: variant2?.title || variant2?.name,
707
- price: variant2?.finalPrice?.amount ?? variant2?.price?.amount,
714
+ item_variant: variant2?.title || variant2?.title,
715
+ price: variant2?.compareAtPrice?.amount ?? variant2?.price?.amount,
708
716
  quantity: quantity || 1
709
717
  })),
710
718
  ...gtmParams?.ga4Params
@@ -714,13 +722,17 @@ var trackAddToCartGA = ({
714
722
  var trackBeginCheckoutGA = ({
715
723
  lineItems = [],
716
724
  currencyCode,
717
- totalPrice,
718
- gtmParams = {},
719
- brand
725
+ gtmParams = {}
720
726
  }) => {
721
727
  if (!lineItems.length) {
722
728
  return;
723
729
  }
730
+ const totalPrice = lineItems?.reduce(
731
+ (prev, { variant }) => prev.plus(
732
+ variant?.finalPrice?.amount ?? variant?.compareAtPrice?.amount ?? variant?.price?.amount ?? 0
733
+ ),
734
+ new Decimal2(0)
735
+ ).toNumber();
724
736
  gaTrack({
725
737
  event: "ga4Event",
726
738
  event_name: "begin_checkout",
@@ -732,10 +744,10 @@ var trackBeginCheckoutGA = ({
732
744
  items: lineItems.map((item) => ({
733
745
  item_id: item.variant?.sku,
734
746
  item_name: item.variant?.product?.title,
735
- item_brand: brand || gtmParams?.brand || "",
747
+ item_brand: gtmParams?.brand || "",
736
748
  item_category: item.variant?.product?.productType,
737
749
  item_variant: item.variant?.title,
738
- price: item.finalPrice?.amount || item.variant?.price?.amount,
750
+ price: item.variant?.compareAtPrice?.amount ?? item.variant?.price?.amount,
739
751
  quantity: item.quantity || 1
740
752
  })),
741
753
  ...gtmParams?.ga4Params
@@ -744,19 +756,19 @@ var trackBeginCheckoutGA = ({
744
756
  };
745
757
  var trackBuyNowGA = ({
746
758
  lineItems = [],
747
- gtmParams = {},
748
- brand
759
+ gtmParams = {}
749
760
  }) => {
750
761
  if (!lineItems.length || !lineItems[0]?.variant) {
751
762
  return;
752
763
  }
753
764
  const { variant } = lineItems[0];
754
765
  const currencyCode = variant.price?.currencyCode;
755
- const totalPrice = lineItems.reduce((sum, item) => {
756
- const price = parseFloat(item.finalPrice?.amount || item.variant?.price?.amount || "0");
757
- const quantity = item.quantity || 1;
758
- return sum + price * quantity;
759
- }, 0);
766
+ const totalPrice = lineItems?.reduce(
767
+ (prev, { variant: variant2 }) => prev.plus(
768
+ variant2?.finalPrice?.amount ?? variant2?.compareAtPrice?.amount ?? (variant2?.price?.amount || 0)
769
+ ),
770
+ new Decimal2(0)
771
+ ).toNumber();
760
772
  gaTrack({
761
773
  event: "ga4Event",
762
774
  event_name: "begin_checkout",
@@ -768,10 +780,10 @@ var trackBuyNowGA = ({
768
780
  items: lineItems.map((item) => ({
769
781
  item_id: item.variant?.sku,
770
782
  item_name: item.variant?.product?.title || item.variant?.title,
771
- item_brand: item.variant?.product?.vendor || brand || gtmParams?.brand || "",
783
+ item_brand: gtmParams?.brand || "",
772
784
  item_category: item.variant?.product?.productType || "",
773
785
  item_variant: item.variant?.title,
774
- price: item.finalPrice?.amount || item.variant?.price?.amount,
786
+ price: item.variant?.compareAtPrice?.amount ?? item.variant?.price?.amount,
775
787
  quantity: item.quantity || 1
776
788
  })),
777
789
  ...gtmParams?.ga4Params
@@ -785,10 +797,10 @@ var trackAddToCartFBQ = ({ lineItems = [] }) => {
785
797
  return;
786
798
  }
787
799
  if (lineItems.length && lineItems[0]?.variant) {
788
- const { variant, quantity, finalPrice } = lineItems[0];
800
+ const { variant, quantity } = lineItems[0];
789
801
  try {
790
802
  window.fbq("track", "AddToCart", {
791
- value: finalPrice?.amount || variant?.price?.amount,
803
+ value: variant?.compareAtPrice?.amount ?? (variant?.price?.amount || variant?.price || 0),
792
804
  num_items: quantity,
793
805
  currency: variant?.price?.currencyCode,
794
806
  content_name: variant?.product?.title,
@@ -875,9 +887,9 @@ function useRemoveCartCodes(options) {
875
887
  }
876
888
 
877
889
  // src/hooks/cart/use-add-to-cart.ts
878
- function useAddToCart({ withTrack = true, brand } = {}, swrOptions) {
879
- const { client, locale, cartCookieAdapter, userAdapter } = useShopify();
880
- const { mutateCart, cart, metafieldIdentifiers } = useCartContext();
890
+ function useAddToCart({ withTrack = true } = {}, swrOptions) {
891
+ const { client, config, locale, cartCookieAdapter, userAdapter } = useShopify();
892
+ const { cart } = useCartContext();
881
893
  const { trigger: applyCartCodes } = useApplyCartCodes();
882
894
  const { trigger: removeInvalidCodes } = useRemoveCartCodes();
883
895
  const { trigger: addCartLines2 } = useAddCartLines();
@@ -899,7 +911,8 @@ function useAddToCart({ withTrack = true, brand } = {}, swrOptions) {
899
911
  const lines = lineItems.map((item) => ({
900
912
  merchandiseId: item.variant?.id || "",
901
913
  quantity: item.quantity || 1,
902
- attributes: item.attributes
914
+ attributes: item.attributes,
915
+ sellingPlanId: item.sellingPlanId
903
916
  })).filter((item) => item.merchandiseId && item.quantity);
904
917
  if (lines.length === 0) {
905
918
  return;
@@ -934,34 +947,16 @@ function useAddToCart({ withTrack = true, brand } = {}, swrOptions) {
934
947
  discountCodes
935
948
  });
936
949
  }
937
- if (withTrack && resultCart.lineItems) {
938
- const trackingLineItems = resultCart.lineItems.map((line) => ({
939
- variant: {
940
- id: line.variant.id,
941
- sku: line.variant.sku || "",
942
- title: line.variant.name,
943
- price: {
944
- amount: String(line.variant.price),
945
- currencyCode: resultCart.currency.code
946
- },
947
- product: line.product ? {
948
- title: line.product.title || line.name,
949
- productType: line.product.productType,
950
- vendor: line.product.vendor
951
- } : void 0
952
- },
953
- quantity: line.quantity
954
- }));
950
+ if (withTrack) {
955
951
  trackAddToCartGA({
956
- lineItems: trackingLineItems,
957
- gtmParams: { ...gtmParams, brand },
958
- brand
952
+ lineItems,
953
+ gtmParams: { ...gtmParams, brand: config.getBrand() }
959
954
  });
960
- trackAddToCartFBQ({ lineItems: trackingLineItems });
955
+ trackAddToCartFBQ({ lineItems });
961
956
  }
962
957
  return resultCart;
963
958
  },
964
- [client, locale, cartCookieAdapter, userAdapter, cart, withTrack, brand]
959
+ [client, locale, cartCookieAdapter, userAdapter, cart, withTrack]
965
960
  );
966
961
  return useSWRMutation("add-to-cart", addToCart, swrOptions);
967
962
  }
@@ -1042,8 +1037,8 @@ function useUpdateCartAttributes(mutate, metafieldIdentifiers, options) {
1042
1037
  );
1043
1038
  return useSWRMutation("update-cart-attributes", updateAttributes, options);
1044
1039
  }
1045
- function useBuyNow({ withTrack = true, brand } = {}, swrOptions) {
1046
- const { client, locale, cartCookieAdapter, userAdapter } = useShopify();
1040
+ function useBuyNow({ withTrack = true } = {}, swrOptions) {
1041
+ const { client, config, locale, cartCookieAdapter, userAdapter } = useShopify();
1047
1042
  const isLoggedIn = userAdapter?.isLoggedIn || false;
1048
1043
  const buyNow = useCallback(
1049
1044
  async (_key, { arg }) => {
@@ -1061,9 +1056,10 @@ function useBuyNow({ withTrack = true, brand } = {}, swrOptions) {
1061
1056
  return;
1062
1057
  }
1063
1058
  const lines = lineItems.map((item) => ({
1064
- merchandiseId: item.variant?.id || item.variantId || "",
1059
+ merchandiseId: item.variant?.id || "",
1065
1060
  quantity: item.quantity || 1,
1066
- attributes: item.attributes
1061
+ attributes: item.attributes,
1062
+ sellingPlanId: item.sellingPlanId
1067
1063
  })).filter((item) => item.merchandiseId && item.quantity);
1068
1064
  if (lines.length === 0) {
1069
1065
  return;
@@ -1080,27 +1076,9 @@ function useBuyNow({ withTrack = true, brand } = {}, swrOptions) {
1080
1076
  throw new Error("Failed to create cart for buy now");
1081
1077
  }
1082
1078
  if (withTrack && resultCart.lineItems) {
1083
- const trackingLineItems = resultCart.lineItems.map((line) => ({
1084
- variant: {
1085
- id: line.variantId,
1086
- sku: line.variant.sku || "",
1087
- title: line.variant.name,
1088
- price: {
1089
- amount: String(line.variant.price),
1090
- currencyCode: resultCart.currency.code
1091
- },
1092
- product: line.product ? {
1093
- title: line.product.title || line.name,
1094
- productType: line.product.productType,
1095
- vendor: line.product.vendor
1096
- } : void 0
1097
- },
1098
- quantity: line.quantity
1099
- }));
1100
1079
  trackBuyNowGA({
1101
- lineItems: trackingLineItems,
1102
- gtmParams: { ...gtmParams, brand },
1103
- brand
1080
+ lineItems,
1081
+ gtmParams: { ...gtmParams, brand: config.getBrand() }
1104
1082
  });
1105
1083
  if (fbqTrackConfig) {
1106
1084
  trackBuyNowFBQ({ trackConfig: fbqTrackConfig });
@@ -1117,7 +1095,7 @@ function useBuyNow({ withTrack = true, brand } = {}, swrOptions) {
1117
1095
  }
1118
1096
  return resultCart;
1119
1097
  },
1120
- [client, locale, isLoggedIn, cartCookieAdapter, withTrack, brand]
1098
+ [client, locale, isLoggedIn, cartCookieAdapter, withTrack]
1121
1099
  );
1122
1100
  return useSWRMutation("buy-now", buyNow, swrOptions);
1123
1101
  }
@@ -2626,11 +2604,43 @@ function useAutoRemovePlusMemberInCart({
2626
2604
  removeCartLines2
2627
2605
  ]);
2628
2606
  }
2607
+ function useAddPlusMemberProductsToCart({
2608
+ cart,
2609
+ memberSetting,
2610
+ selectedPlusMemberMode,
2611
+ selectedPlusMemberProduct
2612
+ }) {
2613
+ const { hasMonthlyPlus, hasAnnualPlus } = useHasPlusMemberInCart({
2614
+ cart,
2615
+ memberSetting
2616
+ });
2617
+ const plusMemberProduct = useMemo(() => {
2618
+ if (selectedPlusMemberMode === "free" /* FREE */) {
2619
+ return void 0;
2620
+ }
2621
+ if (selectedPlusMemberMode === "monthly" /* MONTHLY */ && hasMonthlyPlus) {
2622
+ return void 0;
2623
+ }
2624
+ if (selectedPlusMemberMode === "annual" /* ANNUAL */ && hasAnnualPlus) {
2625
+ return void 0;
2626
+ }
2627
+ if (!selectedPlusMemberProduct) {
2628
+ return void 0;
2629
+ }
2630
+ return selectedPlusMemberProduct;
2631
+ }, [
2632
+ selectedPlusMemberMode,
2633
+ selectedPlusMemberProduct?.variant,
2634
+ selectedPlusMemberProduct?.product,
2635
+ hasMonthlyPlus,
2636
+ hasAnnualPlus
2637
+ ]);
2638
+ return plusMemberProduct;
2639
+ }
2629
2640
  var PlusMemberProvider = ({
2630
2641
  variant,
2631
2642
  product,
2632
- shopCommon,
2633
- metafields,
2643
+ memberSetting,
2634
2644
  initialSelectedPlusMemberMode = "free",
2635
2645
  profile,
2636
2646
  locale,
@@ -2650,14 +2660,14 @@ var PlusMemberProvider = ({
2650
2660
  const [deleteMarginBottom, setDeleteMarginBottom] = useState(false);
2651
2661
  const shippingMethodsContext = useShippingMethods({
2652
2662
  variant,
2653
- plusMemberMetafields: metafields,
2663
+ plusMemberMetafields: memberSetting,
2654
2664
  selectedPlusMemberMode});
2655
2665
  const plusMemberHandles = useMemo(() => {
2656
2666
  return [
2657
- metafields?.plus_monthly_product?.handle,
2658
- metafields?.plus_annual_product?.handle
2667
+ memberSetting?.plus_monthly_product?.handle,
2668
+ memberSetting?.plus_annual_product?.handle
2659
2669
  ].filter(Boolean);
2660
- }, [metafields]);
2670
+ }, [memberSetting]);
2661
2671
  const { data: plusMemberProducts = [] } = useProductsByHandles({
2662
2672
  handles: plusMemberHandles
2663
2673
  });
@@ -2665,25 +2675,24 @@ var PlusMemberProvider = ({
2665
2675
  if (selectedPlusMemberMode === "free" /* FREE */) {
2666
2676
  return null;
2667
2677
  }
2668
- const handle = selectedPlusMemberMode === "monthly" /* MONTHLY */ ? metafields?.plus_monthly_product?.handle : metafields?.plus_annual_product?.handle;
2669
- const sku = selectedPlusMemberMode === "monthly" /* MONTHLY */ ? metafields?.plus_monthly_product?.sku : metafields?.plus_annual_product?.sku;
2678
+ const handle = selectedPlusMemberMode === "monthly" /* MONTHLY */ ? memberSetting?.plus_monthly_product?.handle : memberSetting?.plus_annual_product?.handle;
2679
+ const sku = selectedPlusMemberMode === "monthly" /* MONTHLY */ ? memberSetting?.plus_monthly_product?.sku : memberSetting?.plus_annual_product?.sku;
2670
2680
  const product2 = plusMemberProducts?.find((p) => p.handle === handle);
2671
2681
  const variant2 = product2?.variants?.find((v) => v.sku === sku);
2672
2682
  return product2 && variant2 ? { product: product2, variant: variant2 } : null;
2673
- }, [plusMemberProducts, metafields, selectedPlusMemberMode]);
2683
+ }, [plusMemberProducts, memberSetting, selectedPlusMemberMode]);
2674
2684
  return /* @__PURE__ */ jsx(
2675
2685
  PlusMemberContext.Provider,
2676
2686
  {
2677
2687
  value: {
2678
2688
  variant,
2679
- shopCommon,
2680
2689
  zipCode,
2681
2690
  setZipCode,
2682
2691
  allowNextDayDelivery,
2683
2692
  setAllowNextDayDelivery,
2684
2693
  allowThirdDayDelivery,
2685
2694
  setAllowThirdDayDelivery,
2686
- plusMemberMetafields: metafields,
2695
+ plusMemberMetafields: memberSetting,
2687
2696
  selectedPlusMemberMode,
2688
2697
  setSelectedPlusMemberMode,
2689
2698
  showAreaCheckModal,
@@ -2902,6 +2911,9 @@ function CartProvider({
2902
2911
  }) {
2903
2912
  const { client, cartCookieAdapter } = useShopify();
2904
2913
  const [customAttributes, setCustomAttributes] = useState([]);
2914
+ const [customAttributesNeedDelete, setCustomAttributesNeedDelete] = useState(
2915
+ []
2916
+ );
2905
2917
  const [isCodeChanging, setIsCodeChanging] = useState(false);
2906
2918
  const [loadingState, setLoadingState] = useState({
2907
2919
  editLineQuantityLoading: false,
@@ -2932,7 +2944,11 @@ function CartProvider({
2932
2944
  useRequest(
2933
2945
  () => {
2934
2946
  const newAttributes = [...attributes, ...customAttributes];
2935
- const needUpdate = cart && !isAttributesEqual(cart.customAttributes, newAttributes);
2947
+ const needUpdate = cart && !checkAttributesUpdateNeeded(
2948
+ cart.customAttributes,
2949
+ newAttributes,
2950
+ customAttributesNeedDelete
2951
+ );
2936
2952
  if (needUpdate) {
2937
2953
  return updateAttributes({ attributes: newAttributes });
2938
2954
  } else {
@@ -2953,11 +2969,12 @@ function CartProvider({
2953
2969
  isCartLoading: isCartLoading || isCodeChanging,
2954
2970
  setLoadingState
2955
2971
  });
2956
- const removeCustomAttributes = useCallback((attributes2) => {
2957
- setCustomAttributes(
2958
- (prev) => prev.filter((attr) => !attributes2.some((a) => a.key === attr.key))
2959
- );
2960
- }, []);
2972
+ const removeCustomAttributes = useCallback(
2973
+ (attributes2) => {
2974
+ setCustomAttributesNeedDelete(attributes2);
2975
+ },
2976
+ [setCustomAttributesNeedDelete]
2977
+ );
2961
2978
  const addCustomAttributes = useCallback(
2962
2979
  (attributes2) => {
2963
2980
  const sameAttributes = attributes2.filter(
@@ -3090,6 +3107,6 @@ function useCartContext() {
3090
3107
  return context;
3091
3108
  }
3092
3109
 
3093
- export { BuyRuleType, CODE_AMOUNT_KEY, CUSTOMER_ATTRIBUTE_KEY, CUSTOMER_SCRIPT_GIFT_KEY, CartProvider, DeliveryPlusType, MAIN_PRODUCT_CODE, OrderBasePriceType, OrderDiscountType, PLUS_MEMBER_TYPE, PlusMemberContext, PlusMemberMode, PlusMemberProvider, PriceBasePriceType, PriceDiscountType, RuleType, SCRIPT_CODE_AMOUNT_KEY, ShippingMethodMode, ShopifyContext, ShopifyProvider, SpendMoneyType, atobID, browserCartCookieAdapter, browserCookieAdapter, btoaID, clearGeoLocationCache, currencyCodeMapping, defaultSWRMutationConfiguration, formatFunctionAutoFreeGift, formatScriptAutoFreeGift, gaTrack, getCachedGeoLocation, getDiscountEnvAttributeValue, getMatchedMainProductSubTotal, getQuery, getReferralAttributes, isAttributesEqual, preCheck, safeParseJson, trackAddToCartFBQ, trackAddToCartGA, trackBeginCheckoutGA, trackBuyNowFBQ, trackBuyNowGA, useAddCartLines, useAddToCart, useAllBlogs, useAllCollections, useAllProducts, useApplyCartCodes, useArticle, useArticles, useArticlesInBlog, useAutoRemovePlusMemberInCart, useBlog, useBuyNow, useCalcAutoFreeGift, useCalcOrderDiscount, useCartAttributes, useCartContext, useCartItemQuantityLimit, useCollection, useCollections, useCreateCart, useExposure, useGeoLocation, useHasPlusMemberInCart, useIntersection, usePlusAnnualProductVariant, usePlusMemberCheckoutCustomAttributes, usePlusMemberContext, usePlusMemberDeliveryCodes, usePlusMemberItemCustomAttributes, usePlusMonthlyProductVariant, usePrice, useProduct, useProductUrl, useProductsByHandles, useRemoveCartCodes, useRemoveCartLines, useReplaceCartPlusMember, useScriptAutoFreeGift, useSearch, useSelectedOptions, useShippingMethodAvailableCheck, useShippingMethods, useShopify, useSite, useUpdateCartAttributes, useUpdateCartLines, useUpdateLineCodeAmountAttributes, useUpdateVariantQuery, useVariant, useVariantMedia };
3110
+ export { BuyRuleType, CODE_AMOUNT_KEY, CUSTOMER_ATTRIBUTE_KEY, CUSTOMER_SCRIPT_GIFT_KEY, CartProvider, DeliveryPlusType, MAIN_PRODUCT_CODE, OrderBasePriceType, OrderDiscountType, PLUS_MEMBER_TYPE, PlusMemberContext, PlusMemberMode, PlusMemberProvider, PriceBasePriceType, PriceDiscountType, RuleType, SCRIPT_CODE_AMOUNT_KEY, ShippingMethodMode, ShopifyContext, ShopifyProvider, SpendMoneyType, atobID, browserCartCookieAdapter, browserCookieAdapter, btoaID, checkAttributesUpdateNeeded, clearGeoLocationCache, currencyCodeMapping, defaultSWRMutationConfiguration, formatFunctionAutoFreeGift, formatScriptAutoFreeGift, gaTrack, getCachedGeoLocation, getDiscountEnvAttributeValue, getMatchedMainProductSubTotal, getQuery, getReferralAttributes, preCheck, safeParse, trackAddToCartFBQ, trackAddToCartGA, trackBeginCheckoutGA, trackBuyNowFBQ, trackBuyNowGA, useAddCartLines, useAddPlusMemberProductsToCart, useAddToCart, useAllBlogs, useAllCollections, useAllProducts, useApplyCartCodes, useArticle, useArticles, useArticlesInBlog, useAutoRemovePlusMemberInCart, useBlog, useBuyNow, useCalcAutoFreeGift, useCalcOrderDiscount, useCartAttributes, useCartContext, useCartItemQuantityLimit, useCollection, useCollections, useCreateCart, useExposure, useGeoLocation, useHasPlusMemberInCart, useIntersection, usePlusAnnualProductVariant, usePlusMemberCheckoutCustomAttributes, usePlusMemberContext, usePlusMemberDeliveryCodes, usePlusMemberItemCustomAttributes, usePlusMonthlyProductVariant, usePrice, useProduct, useProductUrl, useProductsByHandles, useRemoveCartCodes, useRemoveCartLines, useReplaceCartPlusMember, useScriptAutoFreeGift, useSearch, useSelectedOptions, useShippingMethodAvailableCheck, useShippingMethods, useShopify, useSite, useUpdateCartAttributes, useUpdateCartLines, useUpdateLineCodeAmountAttributes, useUpdateVariantQuery, useVariant, useVariantMedia };
3094
3111
  //# sourceMappingURL=index.mjs.map
3095
3112
  //# sourceMappingURL=index.mjs.map