@anker-in/shopify-react 1.2.9-beta.1 → 1.2.9

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-DfR13pDe.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-DfR13pDe.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
@@ -1315,9 +1315,13 @@ function useAutoRemoveFreeGifts(options = {}) {
1315
1315
  const {
1316
1316
  removeFunctionGifts = true,
1317
1317
  removeScriptGifts = true,
1318
- isGiftLineItem
1318
+ isGiftLineItem,
1319
+ runOnlyOnceAfterInit = false,
1320
+ initDelay = 500
1319
1321
  } = options;
1320
1322
  const [isRemoving, setIsRemoving] = react.useState(false);
1323
+ const [isInitialized, setIsInitialized] = react.useState(!runOnlyOnceAfterInit);
1324
+ const [isFinished, setIsFinished] = react.useState(false);
1321
1325
  const { cart } = useCartContext();
1322
1326
  const { trigger: removeCartLines2 } = useRemoveCartLines();
1323
1327
  const giftsToRemove = react.useMemo(() => {
@@ -1354,7 +1358,29 @@ function useAutoRemoveFreeGifts(options = {}) {
1354
1358
  return false;
1355
1359
  });
1356
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
+ );
1357
1380
  react.useEffect(() => {
1381
+ if (runOnlyOnceAfterInit && (!isInitialized || isFinished)) {
1382
+ return;
1383
+ }
1358
1384
  if (isRemoving || giftsToRemove.length === 0) {
1359
1385
  return;
1360
1386
  }
@@ -1368,10 +1394,16 @@ function useAutoRemoveFreeGifts(options = {}) {
1368
1394
  console.error("Failed to remove free gifts:", error);
1369
1395
  } finally {
1370
1396
  setIsRemoving(false);
1397
+ if (runOnlyOnceAfterInit) {
1398
+ setIsFinished(true);
1399
+ }
1371
1400
  }
1372
1401
  };
1373
1402
  performRemoval();
1374
1403
  }, [
1404
+ runOnlyOnceAfterInit,
1405
+ isInitialized,
1406
+ isFinished,
1375
1407
  isRemoving,
1376
1408
  giftsToRemove,
1377
1409
  removeCartLines2
@@ -1705,7 +1737,17 @@ function getCartBasicAttributes({
1705
1737
  const presellAttributes = [
1706
1738
  {
1707
1739
  key: "_presale",
1708
- value: cart?.lineItems?.some((item) => item?.variant?.metafields?.presell === "presell") ? "true" : "false"
1740
+ value: cart?.lineItems?.some(
1741
+ (item) => item?.variant?.metafields?.global?.presell === "presell"
1742
+ ) ? "true" : "false"
1743
+ }
1744
+ ];
1745
+ const hideShippingAttributes = [
1746
+ {
1747
+ key: "_hide_shipping",
1748
+ value: cart?.lineItems?.some(
1749
+ (item) => item?.variant?.metafields?.global?.hideShipping === "true"
1750
+ ) ? "true" : "false"
1709
1751
  }
1710
1752
  ];
1711
1753
  const weightAttributes = [
@@ -1744,6 +1786,7 @@ function getCartBasicAttributes({
1744
1786
  ...functionAttributes,
1745
1787
  ...presellAttributes,
1746
1788
  ...weightAttributes,
1789
+ ...hideShippingAttributes,
1747
1790
  ...trackingAttributes,
1748
1791
  ...getReferralAttributes()
1749
1792
  ].filter((item) => item?.value !== void 0 && item?.value !== null);
@@ -2740,7 +2783,13 @@ function useBuyNow({ withTrack = true } = {}, swrOptions) {
2740
2783
  cookieAdapter: cartCookieAdapter,
2741
2784
  buyerIdentity,
2742
2785
  discountCodes,
2743
- customAttributes: [...basicCartAttributes, ...ga4Attributes, ...customAttributes || []]
2786
+ customAttributes: [
2787
+ ...basicCartAttributes.filter(
2788
+ (a) => !(customAttributes || []).some((c) => c.key === a.key)
2789
+ ),
2790
+ ...ga4Attributes.filter((a) => !(customAttributes || []).some((c) => c.key === a.key)),
2791
+ ...customAttributes || []
2792
+ ]
2744
2793
  });
2745
2794
  if (!resultCart) {
2746
2795
  throw new Error("Failed to create cart for buy now");
@@ -2748,7 +2797,9 @@ function useBuyNow({ withTrack = true } = {}, swrOptions) {
2748
2797
  if (withTrack && resultCart.lineItems) {
2749
2798
  trackBuyNowGA({
2750
2799
  lineItems: lineItems.map((item) => {
2751
- const cartLine = resultCart.lineItems.find((line) => line.variant.id === item.variant?.id);
2800
+ const cartLine = resultCart.lineItems.find(
2801
+ (line) => line.variant.id === item.variant?.id
2802
+ );
2752
2803
  if (!cartLine) {
2753
2804
  return null;
2754
2805
  }
@@ -3577,6 +3628,16 @@ function clearGeoLocationCache(cacheKey = "geoLocation") {
3577
3628
  }
3578
3629
  }
3579
3630
  var CartContext = react.createContext(null);
3631
+ function AutoRemoveGiftsHandler({
3632
+ options,
3633
+ onRemovingChange
3634
+ }) {
3635
+ const { isRemoving } = useAutoRemoveFreeGifts(options);
3636
+ react.useEffect(() => {
3637
+ onRemovingChange(isRemoving);
3638
+ }, [isRemoving, onRemovingChange]);
3639
+ return null;
3640
+ }
3580
3641
  function CartProvider({
3581
3642
  children,
3582
3643
  // swrOptions,
@@ -3604,6 +3665,7 @@ function CartProvider({
3604
3665
  });
3605
3666
  const [scriptAutoFreeGift, setScriptAutoFreeGift] = react.useState([]);
3606
3667
  const [functionAutoFreeGift, setFunctionAutoFreeGift] = react.useState([]);
3668
+ const [isAutoRemovingFreeGifts, setIsAutoRemovingFreeGifts] = react.useState(false);
3607
3669
  const {
3608
3670
  run: fetchCart,
3609
3671
  data: cart,
@@ -3763,7 +3825,9 @@ function CartProvider({
3763
3825
  const autoRemoveFreeGiftsOptions = react.useMemo(() => {
3764
3826
  return {
3765
3827
  removeFunctionGifts: !!functionAutoFreeGiftConfig,
3766
- removeScriptGifts: !!scriptAutoFreeGiftConfig
3828
+ removeScriptGifts: !!scriptAutoFreeGiftConfig,
3829
+ runOnlyOnceAfterInit: true,
3830
+ initDelay: 500
3767
3831
  };
3768
3832
  }, [functionAutoFreeGiftConfig, scriptAutoFreeGiftConfig]);
3769
3833
  const value = react.useMemo(
@@ -3796,7 +3860,8 @@ function CartProvider({
3796
3860
  metafieldIdentifiers,
3797
3861
  memberSetting,
3798
3862
  appContext,
3799
- autoRemoveFreeGiftsOptions
3863
+ autoRemoveFreeGiftsOptions,
3864
+ isAutoRemovingFreeGifts
3800
3865
  }),
3801
3866
  [
3802
3867
  cart,
@@ -3825,10 +3890,20 @@ function CartProvider({
3825
3890
  profile,
3826
3891
  memberSetting,
3827
3892
  appContext,
3828
- autoRemoveFreeGiftsOptions
3893
+ autoRemoveFreeGiftsOptions,
3894
+ isAutoRemovingFreeGifts
3829
3895
  ]
3830
3896
  );
3831
- return /* @__PURE__ */ jsxRuntime.jsx(CartContext.Provider, { value, children });
3897
+ return /* @__PURE__ */ jsxRuntime.jsxs(CartContext.Provider, { value, children: [
3898
+ (functionAutoFreeGiftConfig || scriptAutoFreeGiftConfig) && /* @__PURE__ */ jsxRuntime.jsx(
3899
+ AutoRemoveGiftsHandler,
3900
+ {
3901
+ options: autoRemoveFreeGiftsOptions,
3902
+ onRemovingChange: setIsAutoRemovingFreeGifts
3903
+ }
3904
+ ),
3905
+ children
3906
+ ] });
3832
3907
  }
3833
3908
  function useCartContext(options) {
3834
3909
  const context = react.useContext(CartContext);