@anker-in/shopify-react 1.3.0-beta.1 → 1.3.0-beta.10

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.d.mts CHANGED
@@ -2,7 +2,7 @@ export { AppContext, CartContextValue, CartProvider, CartProviderProps, LoadingS
2
2
  export { C as CookieAdapter, a as CookieOptions, P as PerformanceAdapter, R as RouterAdapter, U as UserContextAdapter } from './types-SKDHauqk.mjs';
3
3
  export { BrowserPerformanceAdapter, browserCartCookieAdapter, browserCookieAdapter } from './adapters/index.mjs';
4
4
  export { AddCartLinesInput, ApplyCartCodesInput, AutoFreeGift, AutoFreeGiftCartLineInput, AutoFreeGiftConfig, AutoFreeGiftItem, AutoFreeGiftList, AutoFreeGiftMainProduct, BuyNowInput, BuyRuleType, CODE_AMOUNT_KEY, CUSTOMER_ATTRIBUTE_KEY, CUSTOMER_SCRIPT_GIFT_KEY, Config, CreateCartInput, DiscountLabel, FormattedGift, FunctionGiftResult, GeoLocationData, GetCartAttributesProps, GiftProduct, GiftProductItem, GiftTier, HasPlusMemberInCartProps, HasPlusMemberInCartResult, HasPlusMemberInLinesResult, ImageMedia, LocaleMapping, MAIN_PRODUCT_CODE, MEMBER_PRICE_ATTRIBUTE_KEY, MainProductInfo, NormalizedSearchResultItem, Options, OrderBasePriceType, OrderDiscountConfig, OrderDiscountResult, OrderDiscountType, PlusMemberContext, PlusMemberContextValue, PlusMemberProvider, PlusMemberProviderProps, PriceBasePriceType, PriceDiscountConfig, PriceDiscountType, RemoveCartCodesInput, RemoveCartLinesInput, RewardItem, RuleCondition, RuleType, SCRIPT_CODE_AMOUNT_KEY, SearchResult, SearchResultType, SelectedOptionsResult, ShippingMethodsContext, SiteInfo, SpendMoneyType, TieredDiscount, UpdateBuyerIdentityInput, UpdateCartAttributesInput, UseAllBlogsOptions, UseAllCollectionsOptions, UseAllProductsOptions, UseArticleOptions, UseArticlesInBlogOptions, UseArticlesOptions, UseAutoRemovePlusMemberInCartProps, UseAvailableDeliveryCouponResult, UseBlogOptions, UseBuyNowOptions, UseCalcGiftsFromLinesOptions, UseCalcGiftsFromLinesResult, UseCollectionOptions, UseCollectionsOptions, UseExposureOptions, UseGeoLocationOptions, UseHasPlusMemberInLinesProps, UseIntersectionOptions, UsePlusMemberVariantsOptions, UsePlusMemberVariantsResult, UsePriceOptions, UsePriceResult, UseProductOptions, UseProductsByHandlesOptions, UseSearchOptions, UseShippingMethodsOptions, UseShippingMethodsResult, UseSiteOptions, UseUpdateBuyerIdentityOptions, UseUpdateCartAttributesOptions, VariantItem, VariantMedia, VideoMedia, clearGeoLocationCache, createMockCartFromLines, currencyCodeMapping, defaultSWRMutationConfiguration, formatFunctionAutoFreeGift, formatScriptAutoFreeGift, getCachedGeoLocation, getCartBasicAttributes, getDiscountEnvAttributeValue, getGA4Attributes, getGA4AttributesAsync, getMatchedMainProductSubTotal, getOperatingSystem, getQuery, getReferralAttributes, getUserType, hasPlusMemberInCart, hasPlusMemberInLines, normalizeAddToCartLines, preCheck, safeParse, useAddCartLines, useAddToCart, useAllBlogs, useAllCollections, useAllProducts, useApplyCartCodes, useArticle, useArticles, useArticlesInBlog, useAutoRemovePlusMemberInCart, useAvailableDeliveryCoupon, useBlog, useBuyNow, useCalcAutoFreeGift, useCalcGiftsFromLines, useCalcOrderDiscount, useCartAttributes, useCartItemQuantityLimit, useCollection, useCollections, useCreateCart, useExposure, useGeoLocation, useHasPlusMemberInCart, useHasPlusMemberInLines, useIntersection, usePlusMemberCheckoutCustomAttributes, usePlusMemberContext, usePlusMemberNeedAddToCart, usePlusMemberVariants, usePrice, useProduct, useProductUrl, useProductsByHandles, useRemoveCartCodes, useRemoveCartLines, useReplaceCartPlusMember, useSearch, useSelectedOptions, useShippingMethods, useSite, useUpdateBuyerIdentity, useUpdateCartAttributes, useUpdateCartLines, useUpdateLineCodeAmountAttributes, useUpdateVariantQuery, useVariant, useVariantMedia } from './hooks/index.mjs';
5
- export { g as AddToCartInput, A as AddToCartLineItem, C as BuyNowTrackConfig, p as DeliveryCustomData, D as DeliveryPlusType, v as GA4Data, G as GtmParams, P as PLUS_MEMBER_TYPE, j as PlusMemberMode, n as PlusMemberSettingsMetafields, m as PlusMemberShippingMethodConfig, l as PlusMemberShippingMethodMetafields, S as ScriptAutoFreeGiftConfig, o as SelectedPlusMemberVariant, k as ShippingMethodMode, h as UseAddToCartOptions, U as UseAutoRemoveFreeGiftsOptions, a as UseAutoRemoveFreeGiftsResult, e as UseScriptAutoFreeGiftResult, q as gaTrack, x as getGA4ClientId, z as getGA4Data, y as getGA4SessionId, d as isAnyGift, c as isBuyGetGift, i as isFunctionGift, b as isScriptGift, B as trackAddToCartFBQ, t as trackAddToCartGA, r as trackBeginCheckoutGA, E as trackBuyNowFBQ, s as trackBuyNowGA, u as useAutoRemoveFreeGifts, f as useScriptAutoFreeGift, w as waitForGtagReady } from './types-CM5QrlnE.mjs';
5
+ export { g as AddToCartInput, A as AddToCartLineItem, C as BuyNowTrackConfig, p as DeliveryCustomData, D as DeliveryPlusType, v as GA4Data, G as GtmParams, P as PLUS_MEMBER_TYPE, j as PlusMemberMode, n as PlusMemberSettingsMetafields, m as PlusMemberShippingMethodConfig, l as PlusMemberShippingMethodMetafields, S as ScriptAutoFreeGiftConfig, o as SelectedPlusMemberVariant, k as ShippingMethodMode, h as UseAddToCartOptions, U as UseAutoRemoveFreeGiftsOptions, a as UseAutoRemoveFreeGiftsResult, e as UseScriptAutoFreeGiftResult, q as gaTrack, x as getGA4ClientId, z as getGA4Data, y as getGA4SessionId, d as isAnyGift, c as isBuyGetGift, i as isFunctionGift, b as isScriptGift, B as trackAddToCartFBQ, t as trackAddToCartGA, r as trackBeginCheckoutGA, E as trackBuyNowFBQ, s as trackBuyNowGA, u as useAutoRemoveFreeGifts, f as useScriptAutoFreeGift, w as waitForGtagReady } from './types-C0UyuPrG.mjs';
6
6
  export * from '@anker-in/shopify-sdk';
7
7
  import 'react';
8
8
  import 'react/jsx-runtime';
package/dist/index.d.ts CHANGED
@@ -2,7 +2,7 @@ export { AppContext, CartContextValue, CartProvider, CartProviderProps, LoadingS
2
2
  export { C as CookieAdapter, a as CookieOptions, P as PerformanceAdapter, R as RouterAdapter, U as UserContextAdapter } from './types-SKDHauqk.js';
3
3
  export { BrowserPerformanceAdapter, browserCartCookieAdapter, browserCookieAdapter } from './adapters/index.js';
4
4
  export { AddCartLinesInput, ApplyCartCodesInput, AutoFreeGift, AutoFreeGiftCartLineInput, AutoFreeGiftConfig, AutoFreeGiftItem, AutoFreeGiftList, AutoFreeGiftMainProduct, BuyNowInput, BuyRuleType, CODE_AMOUNT_KEY, CUSTOMER_ATTRIBUTE_KEY, CUSTOMER_SCRIPT_GIFT_KEY, Config, CreateCartInput, DiscountLabel, FormattedGift, FunctionGiftResult, GeoLocationData, GetCartAttributesProps, GiftProduct, GiftProductItem, GiftTier, HasPlusMemberInCartProps, HasPlusMemberInCartResult, HasPlusMemberInLinesResult, ImageMedia, LocaleMapping, MAIN_PRODUCT_CODE, MEMBER_PRICE_ATTRIBUTE_KEY, MainProductInfo, NormalizedSearchResultItem, Options, OrderBasePriceType, OrderDiscountConfig, OrderDiscountResult, OrderDiscountType, PlusMemberContext, PlusMemberContextValue, PlusMemberProvider, PlusMemberProviderProps, PriceBasePriceType, PriceDiscountConfig, PriceDiscountType, RemoveCartCodesInput, RemoveCartLinesInput, RewardItem, RuleCondition, RuleType, SCRIPT_CODE_AMOUNT_KEY, SearchResult, SearchResultType, SelectedOptionsResult, ShippingMethodsContext, SiteInfo, SpendMoneyType, TieredDiscount, UpdateBuyerIdentityInput, UpdateCartAttributesInput, UseAllBlogsOptions, UseAllCollectionsOptions, UseAllProductsOptions, UseArticleOptions, UseArticlesInBlogOptions, UseArticlesOptions, UseAutoRemovePlusMemberInCartProps, UseAvailableDeliveryCouponResult, UseBlogOptions, UseBuyNowOptions, UseCalcGiftsFromLinesOptions, UseCalcGiftsFromLinesResult, UseCollectionOptions, UseCollectionsOptions, UseExposureOptions, UseGeoLocationOptions, UseHasPlusMemberInLinesProps, UseIntersectionOptions, UsePlusMemberVariantsOptions, UsePlusMemberVariantsResult, UsePriceOptions, UsePriceResult, UseProductOptions, UseProductsByHandlesOptions, UseSearchOptions, UseShippingMethodsOptions, UseShippingMethodsResult, UseSiteOptions, UseUpdateBuyerIdentityOptions, UseUpdateCartAttributesOptions, VariantItem, VariantMedia, VideoMedia, clearGeoLocationCache, createMockCartFromLines, currencyCodeMapping, defaultSWRMutationConfiguration, formatFunctionAutoFreeGift, formatScriptAutoFreeGift, getCachedGeoLocation, getCartBasicAttributes, getDiscountEnvAttributeValue, getGA4Attributes, getGA4AttributesAsync, getMatchedMainProductSubTotal, getOperatingSystem, getQuery, getReferralAttributes, getUserType, hasPlusMemberInCart, hasPlusMemberInLines, normalizeAddToCartLines, preCheck, safeParse, useAddCartLines, useAddToCart, useAllBlogs, useAllCollections, useAllProducts, useApplyCartCodes, useArticle, useArticles, useArticlesInBlog, useAutoRemovePlusMemberInCart, useAvailableDeliveryCoupon, useBlog, useBuyNow, useCalcAutoFreeGift, useCalcGiftsFromLines, useCalcOrderDiscount, useCartAttributes, useCartItemQuantityLimit, useCollection, useCollections, useCreateCart, useExposure, useGeoLocation, useHasPlusMemberInCart, useHasPlusMemberInLines, useIntersection, usePlusMemberCheckoutCustomAttributes, usePlusMemberContext, usePlusMemberNeedAddToCart, usePlusMemberVariants, usePrice, useProduct, useProductUrl, useProductsByHandles, useRemoveCartCodes, useRemoveCartLines, useReplaceCartPlusMember, useSearch, useSelectedOptions, useShippingMethods, useSite, useUpdateBuyerIdentity, useUpdateCartAttributes, useUpdateCartLines, useUpdateLineCodeAmountAttributes, useUpdateVariantQuery, useVariant, useVariantMedia } from './hooks/index.js';
5
- export { g as AddToCartInput, A as AddToCartLineItem, C as BuyNowTrackConfig, p as DeliveryCustomData, D as DeliveryPlusType, v as GA4Data, G as GtmParams, P as PLUS_MEMBER_TYPE, j as PlusMemberMode, n as PlusMemberSettingsMetafields, m as PlusMemberShippingMethodConfig, l as PlusMemberShippingMethodMetafields, S as ScriptAutoFreeGiftConfig, o as SelectedPlusMemberVariant, k as ShippingMethodMode, h as UseAddToCartOptions, U as UseAutoRemoveFreeGiftsOptions, a as UseAutoRemoveFreeGiftsResult, e as UseScriptAutoFreeGiftResult, q as gaTrack, x as getGA4ClientId, z as getGA4Data, y as getGA4SessionId, d as isAnyGift, c as isBuyGetGift, i as isFunctionGift, b as isScriptGift, B as trackAddToCartFBQ, t as trackAddToCartGA, r as trackBeginCheckoutGA, E as trackBuyNowFBQ, s as trackBuyNowGA, u as useAutoRemoveFreeGifts, f as useScriptAutoFreeGift, w as waitForGtagReady } from './types-CM5QrlnE.js';
5
+ export { g as AddToCartInput, A as AddToCartLineItem, C as BuyNowTrackConfig, p as DeliveryCustomData, D as DeliveryPlusType, v as GA4Data, G as GtmParams, P as PLUS_MEMBER_TYPE, j as PlusMemberMode, n as PlusMemberSettingsMetafields, m as PlusMemberShippingMethodConfig, l as PlusMemberShippingMethodMetafields, S as ScriptAutoFreeGiftConfig, o as SelectedPlusMemberVariant, k as ShippingMethodMode, h as UseAddToCartOptions, U as UseAutoRemoveFreeGiftsOptions, a as UseAutoRemoveFreeGiftsResult, e as UseScriptAutoFreeGiftResult, q as gaTrack, x as getGA4ClientId, z as getGA4Data, y as getGA4SessionId, d as isAnyGift, c as isBuyGetGift, i as isFunctionGift, b as isScriptGift, B as trackAddToCartFBQ, t as trackAddToCartGA, r as trackBeginCheckoutGA, E as trackBuyNowFBQ, s as trackBuyNowGA, u as useAutoRemoveFreeGifts, f as useScriptAutoFreeGift, w as waitForGtagReady } from './types-C0UyuPrG.js';
6
6
  export * from '@anker-in/shopify-sdk';
7
7
  import 'react';
8
8
  import 'react/jsx-runtime';
package/dist/index.js CHANGED
@@ -1163,6 +1163,26 @@ function useRemoveCartCodes(options) {
1163
1163
  );
1164
1164
  return useSWRMutation__default.default("remove-codes", removeCodes, options);
1165
1165
  }
1166
+ function useUpdateCartLines(options) {
1167
+ const { client, locale, cartCookieAdapter } = useShopify();
1168
+ const { mutateCart, metafieldIdentifiers } = useCartContext();
1169
+ const updateLines = react.useCallback(
1170
+ async (_key, { arg }) => {
1171
+ const updatedCart = await shopifySdk.updateCartLines(client, {
1172
+ ...arg,
1173
+ metafieldIdentifiers,
1174
+ cookieAdapter: cartCookieAdapter
1175
+ });
1176
+ if (updatedCart) {
1177
+ mutateCart(updatedCart);
1178
+ }
1179
+ console.log("use-update-cart-lines updatedCart", metafieldIdentifiers, updatedCart);
1180
+ return updatedCart;
1181
+ },
1182
+ [client, locale, cartCookieAdapter, mutateCart, metafieldIdentifiers]
1183
+ );
1184
+ return useSWRMutation__default.default("update-cart-lines", updateLines, options);
1185
+ }
1166
1186
  var initSameLinesAttributes = ({
1167
1187
  cart,
1168
1188
  line
@@ -1295,9 +1315,13 @@ function useAutoRemoveFreeGifts(options = {}) {
1295
1315
  const {
1296
1316
  removeFunctionGifts = true,
1297
1317
  removeScriptGifts = true,
1298
- isGiftLineItem
1318
+ isGiftLineItem,
1319
+ runOnlyOnceAfterInit = false,
1320
+ initDelay = 500
1299
1321
  } = options;
1300
1322
  const [isRemoving, setIsRemoving] = react.useState(false);
1323
+ const [isInitialized, setIsInitialized] = react.useState(!runOnlyOnceAfterInit);
1324
+ const [isFinished, setIsFinished] = react.useState(false);
1301
1325
  const { cart } = useCartContext();
1302
1326
  const { trigger: removeCartLines2 } = useRemoveCartLines();
1303
1327
  const giftsToRemove = react.useMemo(() => {
@@ -1334,7 +1358,29 @@ function useAutoRemoveFreeGifts(options = {}) {
1334
1358
  return false;
1335
1359
  });
1336
1360
  }, [cart, removeFunctionGifts, removeScriptGifts, isGiftLineItem]);
1361
+ ahooks.useDebounceEffect(
1362
+ () => {
1363
+ if (!runOnlyOnceAfterInit || isInitialized || isFinished) {
1364
+ return;
1365
+ }
1366
+ if (!cart?.lineItems?.length) {
1367
+ return;
1368
+ }
1369
+ setIsInitialized(true);
1370
+ if (giftsToRemove.length === 0) {
1371
+ setIsFinished(true);
1372
+ }
1373
+ },
1374
+ [runOnlyOnceAfterInit, isInitialized, isFinished, cart?.lineItems, giftsToRemove.length],
1375
+ {
1376
+ trailing: true,
1377
+ wait: initDelay
1378
+ }
1379
+ );
1337
1380
  react.useEffect(() => {
1381
+ if (runOnlyOnceAfterInit && (!isInitialized || isFinished)) {
1382
+ return;
1383
+ }
1338
1384
  if (isRemoving || giftsToRemove.length === 0) {
1339
1385
  return;
1340
1386
  }
@@ -1348,10 +1394,16 @@ function useAutoRemoveFreeGifts(options = {}) {
1348
1394
  console.error("Failed to remove free gifts:", error);
1349
1395
  } finally {
1350
1396
  setIsRemoving(false);
1397
+ if (runOnlyOnceAfterInit) {
1398
+ setIsFinished(true);
1399
+ }
1351
1400
  }
1352
1401
  };
1353
1402
  performRemoval();
1354
1403
  }, [
1404
+ runOnlyOnceAfterInit,
1405
+ isInitialized,
1406
+ isFinished,
1355
1407
  isRemoving,
1356
1408
  giftsToRemove,
1357
1409
  removeCartLines2
@@ -2463,6 +2515,7 @@ function useAddToCart({ withTrack = true } = {}, swrOptions) {
2463
2515
  const { trigger: applyCartCodes } = useApplyCartCodes();
2464
2516
  const { trigger: removeInvalidCodes } = useRemoveCartCodes();
2465
2517
  const { trigger: addCartLines2 } = useAddCartLines();
2518
+ const { trigger: updateCartLines3 } = useUpdateCartLines();
2466
2519
  const { trigger: createCart4 } = useCreateCart({
2467
2520
  updateCookie: true
2468
2521
  });
@@ -2515,10 +2568,36 @@ function useAddToCart({ withTrack = true } = {}, swrOptions) {
2515
2568
  // 初次加购时,就把所有 cart attributes 带上
2516
2569
  });
2517
2570
  } else {
2518
- resultCart = await addCartLines2({
2519
- cartId,
2520
- lines
2571
+ const linesToUpdate = [];
2572
+ const linesToAddNew = lines.filter((lineToAdd) => {
2573
+ const existingLine = cart?.lineItems?.find(
2574
+ (item) => item.variant?.id === lineToAdd.merchandiseId
2575
+ );
2576
+ if (existingLine) {
2577
+ linesToUpdate.push({
2578
+ id: existingLine.id,
2579
+ quantity: existingLine.quantity + (lineToAdd.quantity || 1),
2580
+ attributes: lineToAdd.attributes || void 0
2581
+ });
2582
+ return false;
2583
+ }
2584
+ return true;
2521
2585
  });
2586
+ if (linesToUpdate.length > 0) {
2587
+ resultCart = await updateCartLines3({
2588
+ cartId,
2589
+ lines: linesToUpdate
2590
+ });
2591
+ }
2592
+ if (linesToAddNew.length > 0) {
2593
+ resultCart = await addCartLines2({
2594
+ cartId: resultCart?.id || cartId,
2595
+ lines: linesToAddNew
2596
+ });
2597
+ }
2598
+ if (!resultCart) {
2599
+ resultCart = cart;
2600
+ }
2522
2601
  console.log("npm addCartLines resultCart", resultCart);
2523
2602
  if (resultCart && resultCart.discountCodes && resultCart.discountCodes.length > 0) {
2524
2603
  const unapplicableCodes = resultCart.discountCodes.filter((item) => !item.applicable).map((item) => item.code);
@@ -2579,6 +2658,7 @@ function useAddToCart({ withTrack = true } = {}, swrOptions) {
2579
2658
  performanceAdapter,
2580
2659
  createCart4,
2581
2660
  addCartLines2,
2661
+ updateCartLines3,
2582
2662
  applyCartCodes,
2583
2663
  removeInvalidCodes,
2584
2664
  addCustomAttributes,
@@ -2588,26 +2668,6 @@ function useAddToCart({ withTrack = true } = {}, swrOptions) {
2588
2668
  );
2589
2669
  return useSWRMutation__default.default("add-to-cart", addToCart, swrOptions);
2590
2670
  }
2591
- function useUpdateCartLines(options) {
2592
- const { client, locale, cartCookieAdapter } = useShopify();
2593
- const { mutateCart, metafieldIdentifiers } = useCartContext();
2594
- const updateLines = react.useCallback(
2595
- async (_key, { arg }) => {
2596
- const updatedCart = await shopifySdk.updateCartLines(client, {
2597
- ...arg,
2598
- metafieldIdentifiers,
2599
- cookieAdapter: cartCookieAdapter
2600
- });
2601
- if (updatedCart) {
2602
- mutateCart(updatedCart);
2603
- }
2604
- console.log("use-update-cart-lines updatedCart", metafieldIdentifiers, updatedCart);
2605
- return updatedCart;
2606
- },
2607
- [client, locale, cartCookieAdapter, mutateCart, metafieldIdentifiers]
2608
- );
2609
- return useSWRMutation__default.default("update-cart-lines", updateLines, options);
2610
- }
2611
2671
  function useUpdateCartAttributes({
2612
2672
  mutate,
2613
2673
  metafieldIdentifiers,
@@ -3206,8 +3266,7 @@ async function performSearch(client, locale, searchQuery, first = 20, types = ["
3206
3266
  const query = (
3207
3267
  /* GraphQL */
3208
3268
  `
3209
- query search($query: String!, $first: Int!, $types: [SearchType!])
3210
- @inContext(language: $language) {
3269
+ query search($query: String!, $first: Int!, $types: [SearchType!]) {
3211
3270
  search(query: $query, first: $first, types: $types, unavailableProducts: HIDE) {
3212
3271
  totalCount
3213
3272
  edges {
@@ -3303,7 +3362,7 @@ async function getSiteInfo(client, locale, metafieldIdentifiers) {
3303
3362
  `
3304
3363
  query getSiteInfo(
3305
3364
  ${hasMetafields ? "$shopMetafieldIdentifiers: [HasMetafieldsIdentifier!]!" : ""}
3306
- ) @inContext(language: $language) {
3365
+ ) {
3307
3366
  shop {
3308
3367
  name
3309
3368
  description
@@ -3549,6 +3608,16 @@ function clearGeoLocationCache(cacheKey = "geoLocation") {
3549
3608
  }
3550
3609
  }
3551
3610
  var CartContext = react.createContext(null);
3611
+ function AutoRemoveGiftsHandler({
3612
+ options,
3613
+ onRemovingChange
3614
+ }) {
3615
+ const { isRemoving } = useAutoRemoveFreeGifts(options);
3616
+ react.useEffect(() => {
3617
+ onRemovingChange(isRemoving);
3618
+ }, [isRemoving, onRemovingChange]);
3619
+ return null;
3620
+ }
3552
3621
  function CartProvider({
3553
3622
  children,
3554
3623
  // swrOptions,
@@ -3576,6 +3645,7 @@ function CartProvider({
3576
3645
  });
3577
3646
  const [scriptAutoFreeGift, setScriptAutoFreeGift] = react.useState([]);
3578
3647
  const [functionAutoFreeGift, setFunctionAutoFreeGift] = react.useState([]);
3648
+ const [isAutoRemovingFreeGifts, setIsAutoRemovingFreeGifts] = react.useState(false);
3579
3649
  const {
3580
3650
  run: fetchCart,
3581
3651
  data: cart,
@@ -3735,7 +3805,9 @@ function CartProvider({
3735
3805
  const autoRemoveFreeGiftsOptions = react.useMemo(() => {
3736
3806
  return {
3737
3807
  removeFunctionGifts: !!functionAutoFreeGiftConfig,
3738
- removeScriptGifts: !!scriptAutoFreeGiftConfig
3808
+ removeScriptGifts: !!scriptAutoFreeGiftConfig,
3809
+ runOnlyOnceAfterInit: true,
3810
+ initDelay: 500
3739
3811
  };
3740
3812
  }, [functionAutoFreeGiftConfig, scriptAutoFreeGiftConfig]);
3741
3813
  const value = react.useMemo(
@@ -3768,7 +3840,8 @@ function CartProvider({
3768
3840
  metafieldIdentifiers,
3769
3841
  memberSetting,
3770
3842
  appContext,
3771
- autoRemoveFreeGiftsOptions
3843
+ autoRemoveFreeGiftsOptions,
3844
+ isAutoRemovingFreeGifts
3772
3845
  }),
3773
3846
  [
3774
3847
  cart,
@@ -3797,10 +3870,20 @@ function CartProvider({
3797
3870
  profile,
3798
3871
  memberSetting,
3799
3872
  appContext,
3800
- autoRemoveFreeGiftsOptions
3873
+ autoRemoveFreeGiftsOptions,
3874
+ isAutoRemovingFreeGifts
3801
3875
  ]
3802
3876
  );
3803
- return /* @__PURE__ */ jsxRuntime.jsx(CartContext.Provider, { value, children });
3877
+ return /* @__PURE__ */ jsxRuntime.jsxs(CartContext.Provider, { value, children: [
3878
+ (functionAutoFreeGiftConfig || scriptAutoFreeGiftConfig) && /* @__PURE__ */ jsxRuntime.jsx(
3879
+ AutoRemoveGiftsHandler,
3880
+ {
3881
+ options: autoRemoveFreeGiftsOptions,
3882
+ onRemovingChange: setIsAutoRemovingFreeGifts
3883
+ }
3884
+ ),
3885
+ children
3886
+ ] });
3804
3887
  }
3805
3888
  function useCartContext(options) {
3806
3889
  const context = react.useContext(CartContext);