@anker-in/shopify-react 0.1.1-beta.1 → 0.1.1-beta.3

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.
@@ -1,4 +1,4 @@
1
- export { A as AddCartLinesInput, d as ApplyCartCodesInput, s as AutoFreeGift, v as AutoFreeGiftConfig, L as AutoFreeGiftItem, N as AutoFreeGiftList, t as AutoFreeGiftMainProduct, B as BuyNowInput, H as BuyRuleType, a2 as CODE_AMOUNT_KEY, a0 as CUSTOMER_ATTRIBUTE_KEY, a1 as CUSTOMER_SCRIPT_GIFT_KEY, K as CartLineInput, x as Config, C as CreateCartInput, b8 as Customer, b7 as CustomerOrder, D as DiscountLabel, J as FormattedGift, I as FunctionGiftResult, bl as GeoLocationData, G as GiftProduct, E as GiftProductItem, y as GiftTier, bd as HasPlusMemberInCartResult, au as ImageMedia, bm as LocaleMapping, a4 as MAIN_PRODUCT_CODE, M as MainProductInfo, an as Options, Q as OrderBasePriceType, W as OrderDiscountConfig, O as OrderDiscountResult, P as OrderDiscountType, aY as PlusMemberContext, aX as PlusMemberContextValue, bg as PlusMemberProvider, bf as PlusMemberProviderProps, Y as PriceBasePriceType, Z as PriceDiscountConfig, X as PriceDiscountType, f as RemoveCartCodesInput, R as RemoveCartLinesInput, z as RewardItem, w as RuleCondition, F as RuleType, a3 as SCRIPT_CODE_AMOUNT_KEY, aQ as SearchResult, aP as SearchResultItem, aO as SearchResultType, ag as SelectedOptionsResult, aW as ShippingMethodsContext, aT as SiteInfo, S as SpendMoneyType, T as TieredDiscount, U as UpdateCartAttributesInput, aG as UseAllBlogsOptions, aA as UseAllCollectionsOptions, aj as UseAllProductsOptions, aI as UseArticleOptions, aM as UseArticlesInBlogOptions, aK as UseArticlesOptions, ba as UseAutoRemovePlusMemberInCartProps, aE as UseBlogOptions, i as UseBuyNowOptions, ay as UseCollectionOptions, aC as UseCollectionsOptions, bj as UseExposureOptions, bn as UseGeoLocationOptions, bc as UseHasPlusMemberInCartProps, bh as UseIntersectionOptions, ap as UsePriceOptions, aq as UsePriceResult, ah as UseProductOptions, al as UseProductsByHandlesOptions, p as UseScriptAutoFreeGiftResult, aR as UseSearchOptions, b0 as UseShippingMethodsOptions, b1 as UseShippingMethodsResult, aU as UseSiteOptions, V as VariantItem, aw as VariantMedia, av as VideoMedia, a6 as atobID, a7 as btoaID, bq as clearGeoLocationCache, _ as currencyCodeMapping, $ as defaultSWRMutationConfiguration, ae as formatFunctionAutoFreeGift, ad as formatScriptAutoFreeGift, bp as getCachedGeoLocation, a9 as getDiscountEnvAttributeValue, a8 as getMatchedMainProductSubTotal, a5 as getQuery, m as getReferralAttributes, aa as isAttributesEqual, ac as preCheck, ab as safeParseJson, a as useAddCartLines, aH as useAllBlogs, aB as useAllCollections, ak as useAllProducts, e as useApplyCartCodes, aJ as useArticle, aL as useArticles, aN as useArticlesInBlog, bb as useAutoRemovePlusMemberInCart, aF as useBlog, j as useBuyNow, k as useCalcAutoFreeGift, l as useCalcOrderDiscount, n as useCartAttributes, o as useCartItemQuantityLimit, az as useCollection, aD as useCollections, u as useCreateCart, bk as useExposure, bo as useGeoLocation, be as useHasPlusMemberInCart, bi as useIntersection, a$ as usePlusAnnualProductVariant, b9 as usePlusMemberCheckoutCustomAttributes, aZ as usePlusMemberContext, b5 as usePlusMemberDeliveryCodes, b6 as usePlusMemberItemCustomAttributes, a_ as usePlusMonthlyProductVariant, ar as usePrice, ai as useProduct, as as useProductUrl, am as useProductsByHandles, g as useRemoveCartCodes, c as useRemoveCartLines, b4 as useReplaceCartPlusMember, q as useScriptAutoFreeGift, aS as useSearch, af as useSelectedOptions, b3 as useShippingMethodAvailableCheck, b2 as useShippingMethods, aV as useSite, h as useUpdateCartAttributes, b as useUpdateCartLines, r as useUpdateLineCodeAmountAttributes, at as useUpdateVariantQuery, ao as useVariant, ax as useVariantMedia } from '../index-RevQokdZ.mjs';
1
+ export { A as AddCartLinesInput, d as ApplyCartCodesInput, w as AutoFreeGift, y as AutoFreeGiftConfig, Q as AutoFreeGiftItem, T as AutoFreeGiftList, x as AutoFreeGiftMainProduct, B as BuyNowInput, K as BuyRuleType, a5 as CODE_AMOUNT_KEY, a3 as CUSTOMER_ATTRIBUTE_KEY, a4 as CUSTOMER_SCRIPT_GIFT_KEY, P as CartLineInput, E as Config, C as CreateCartInput, bd as Customer, bc as CustomerOrder, D as DiscountLabel, N as FormattedGift, L as FunctionGiftResult, bs as GeoLocationData, G as GiftProduct, I as GiftProductItem, F as GiftTier, bi as HasPlusMemberInCartResult, az as ImageMedia, bt as LocaleMapping, a7 as MAIN_PRODUCT_CODE, M as MainProductInfo, as as Options, X as OrderBasePriceType, Z as OrderDiscountConfig, O as OrderDiscountResult, W as OrderDiscountType, b1 as PlusMemberContext, b0 as PlusMemberContextValue, bn as PlusMemberProvider, bm as PlusMemberProviderProps, $ as PriceBasePriceType, a0 as PriceDiscountConfig, _ as PriceDiscountType, f as RemoveCartCodesInput, R as RemoveCartLinesInput, H as RewardItem, z as RuleCondition, J as RuleType, a6 as SCRIPT_CODE_AMOUNT_KEY, aV as SearchResult, aU as SearchResultItem, aT as SearchResultType, al as SelectedOptionsResult, a$ as ShippingMethodsContext, aY as SiteInfo, S as SpendMoneyType, Y as TieredDiscount, U as UpdateCartAttributesInput, bk as UseAddPlusMemberProductsToCartProps, aL as UseAllBlogsOptions, aF as UseAllCollectionsOptions, ao as UseAllProductsOptions, aN as UseArticleOptions, aR as UseArticlesInBlogOptions, aP as UseArticlesOptions, bf as UseAutoRemovePlusMemberInCartProps, aJ as UseBlogOptions, i as UseBuyNowOptions, l as UseCalcGiftsFromLinesOptions, m as UseCalcGiftsFromLinesResult, aD as UseCollectionOptions, aH as UseCollectionsOptions, bq as UseExposureOptions, bu as UseGeoLocationOptions, bh as UseHasPlusMemberInCartProps, bo as UseIntersectionOptions, au as UsePriceOptions, av as UsePriceResult, am as UseProductOptions, aq as UseProductsByHandlesOptions, s as UseScriptAutoFreeGiftResult, aW as UseSearchOptions, b5 as UseShippingMethodsOptions, b6 as UseShippingMethodsResult, aZ as UseSiteOptions, V as VariantItem, aB as VariantMedia, aA as VideoMedia, a9 as atobID, aa as btoaID, ag as checkAttributesUpdateNeeded, bx as clearGeoLocationCache, ac as createMockCartFromLines, a1 as currencyCodeMapping, a2 as defaultSWRMutationConfiguration, aj as formatFunctionAutoFreeGift, ai as formatScriptAutoFreeGift, bw as getCachedGeoLocation, af as getDiscountEnvAttributeValue, ad as getMatchedMainProductSubTotal, a8 as getQuery, p as getReferralAttributes, ab as normalizeAddToCartLines, ah as preCheck, ae as safeParse, a as useAddCartLines, bl as useAddPlusMemberProductsToCart, aM as useAllBlogs, aG as useAllCollections, ap as useAllProducts, e as useApplyCartCodes, aO as useArticle, aQ as useArticles, aS as useArticlesInBlog, bg as useAutoRemovePlusMemberInCart, aK as useBlog, j as useBuyNow, k as useCalcAutoFreeGift, n as useCalcGiftsFromLines, o as useCalcOrderDiscount, q as useCartAttributes, r as useCartItemQuantityLimit, aE as useCollection, aI as useCollections, u as useCreateCart, br as useExposure, bv as useGeoLocation, bj as useHasPlusMemberInCart, bp as useIntersection, b4 as usePlusAnnualProductVariant, be as usePlusMemberCheckoutCustomAttributes, b2 as usePlusMemberContext, ba as usePlusMemberDeliveryCodes, bb as usePlusMemberItemCustomAttributes, b3 as usePlusMonthlyProductVariant, aw as usePrice, an as useProduct, ax as useProductUrl, ar as useProductsByHandles, g as useRemoveCartCodes, c as useRemoveCartLines, b9 as useReplaceCartPlusMember, t as useScriptAutoFreeGift, aX as useSearch, ak as useSelectedOptions, b8 as useShippingMethodAvailableCheck, b7 as useShippingMethods, a_ as useSite, h as useUpdateCartAttributes, b as useUpdateCartLines, v as useUpdateLineCodeAmountAttributes, ay as useUpdateVariantQuery, at as useVariant, aC as useVariantMedia } from '../index-Utuz9i5x.mjs';
2
2
  export { a as AddToCartInput, A as AddToCartLineItem, h as DeliveryCustomData, i as DeliveryData, g as DeliveryOption, D as DeliveryPlusType, M as MailingAddress, P as PLUS_MEMBER_TYPE, b as PlusMemberMode, e as PlusMemberSettingsMetafields, d as PlusMemberShippingMethodConfig, c as PlusMemberShippingMethodMetafields, f as SelectedPlusMemberProduct, S as ShippingMethodMode, U as UseAddToCartOptions, u as useAddToCart } from '../types-CICUnw0v.mjs';
3
3
  import 'swr/mutation';
4
4
  import '@anker-in/shopify-sdk';
@@ -1,4 +1,4 @@
1
- export { A as AddCartLinesInput, d as ApplyCartCodesInput, s as AutoFreeGift, v as AutoFreeGiftConfig, L as AutoFreeGiftItem, N as AutoFreeGiftList, t as AutoFreeGiftMainProduct, B as BuyNowInput, H as BuyRuleType, a2 as CODE_AMOUNT_KEY, a0 as CUSTOMER_ATTRIBUTE_KEY, a1 as CUSTOMER_SCRIPT_GIFT_KEY, K as CartLineInput, x as Config, C as CreateCartInput, b8 as Customer, b7 as CustomerOrder, D as DiscountLabel, J as FormattedGift, I as FunctionGiftResult, bl as GeoLocationData, G as GiftProduct, E as GiftProductItem, y as GiftTier, bd as HasPlusMemberInCartResult, au as ImageMedia, bm as LocaleMapping, a4 as MAIN_PRODUCT_CODE, M as MainProductInfo, an as Options, Q as OrderBasePriceType, W as OrderDiscountConfig, O as OrderDiscountResult, P as OrderDiscountType, aY as PlusMemberContext, aX as PlusMemberContextValue, bg as PlusMemberProvider, bf as PlusMemberProviderProps, Y as PriceBasePriceType, Z as PriceDiscountConfig, X as PriceDiscountType, f as RemoveCartCodesInput, R as RemoveCartLinesInput, z as RewardItem, w as RuleCondition, F as RuleType, a3 as SCRIPT_CODE_AMOUNT_KEY, aQ as SearchResult, aP as SearchResultItem, aO as SearchResultType, ag as SelectedOptionsResult, aW as ShippingMethodsContext, aT as SiteInfo, S as SpendMoneyType, T as TieredDiscount, U as UpdateCartAttributesInput, aG as UseAllBlogsOptions, aA as UseAllCollectionsOptions, aj as UseAllProductsOptions, aI as UseArticleOptions, aM as UseArticlesInBlogOptions, aK as UseArticlesOptions, ba as UseAutoRemovePlusMemberInCartProps, aE as UseBlogOptions, i as UseBuyNowOptions, ay as UseCollectionOptions, aC as UseCollectionsOptions, bj as UseExposureOptions, bn as UseGeoLocationOptions, bc as UseHasPlusMemberInCartProps, bh as UseIntersectionOptions, ap as UsePriceOptions, aq as UsePriceResult, ah as UseProductOptions, al as UseProductsByHandlesOptions, p as UseScriptAutoFreeGiftResult, aR as UseSearchOptions, b0 as UseShippingMethodsOptions, b1 as UseShippingMethodsResult, aU as UseSiteOptions, V as VariantItem, aw as VariantMedia, av as VideoMedia, a6 as atobID, a7 as btoaID, bq as clearGeoLocationCache, _ as currencyCodeMapping, $ as defaultSWRMutationConfiguration, ae as formatFunctionAutoFreeGift, ad as formatScriptAutoFreeGift, bp as getCachedGeoLocation, a9 as getDiscountEnvAttributeValue, a8 as getMatchedMainProductSubTotal, a5 as getQuery, m as getReferralAttributes, aa as isAttributesEqual, ac as preCheck, ab as safeParseJson, a as useAddCartLines, aH as useAllBlogs, aB as useAllCollections, ak as useAllProducts, e as useApplyCartCodes, aJ as useArticle, aL as useArticles, aN as useArticlesInBlog, bb as useAutoRemovePlusMemberInCart, aF as useBlog, j as useBuyNow, k as useCalcAutoFreeGift, l as useCalcOrderDiscount, n as useCartAttributes, o as useCartItemQuantityLimit, az as useCollection, aD as useCollections, u as useCreateCart, bk as useExposure, bo as useGeoLocation, be as useHasPlusMemberInCart, bi as useIntersection, a$ as usePlusAnnualProductVariant, b9 as usePlusMemberCheckoutCustomAttributes, aZ as usePlusMemberContext, b5 as usePlusMemberDeliveryCodes, b6 as usePlusMemberItemCustomAttributes, a_ as usePlusMonthlyProductVariant, ar as usePrice, ai as useProduct, as as useProductUrl, am as useProductsByHandles, g as useRemoveCartCodes, c as useRemoveCartLines, b4 as useReplaceCartPlusMember, q as useScriptAutoFreeGift, aS as useSearch, af as useSelectedOptions, b3 as useShippingMethodAvailableCheck, b2 as useShippingMethods, aV as useSite, h as useUpdateCartAttributes, b as useUpdateCartLines, r as useUpdateLineCodeAmountAttributes, at as useUpdateVariantQuery, ao as useVariant, ax as useVariantMedia } from '../index-CCMIeIUh.js';
1
+ export { A as AddCartLinesInput, d as ApplyCartCodesInput, w as AutoFreeGift, y as AutoFreeGiftConfig, Q as AutoFreeGiftItem, T as AutoFreeGiftList, x as AutoFreeGiftMainProduct, B as BuyNowInput, K as BuyRuleType, a5 as CODE_AMOUNT_KEY, a3 as CUSTOMER_ATTRIBUTE_KEY, a4 as CUSTOMER_SCRIPT_GIFT_KEY, P as CartLineInput, E as Config, C as CreateCartInput, bd as Customer, bc as CustomerOrder, D as DiscountLabel, N as FormattedGift, L as FunctionGiftResult, bs as GeoLocationData, G as GiftProduct, I as GiftProductItem, F as GiftTier, bi as HasPlusMemberInCartResult, az as ImageMedia, bt as LocaleMapping, a7 as MAIN_PRODUCT_CODE, M as MainProductInfo, as as Options, X as OrderBasePriceType, Z as OrderDiscountConfig, O as OrderDiscountResult, W as OrderDiscountType, b1 as PlusMemberContext, b0 as PlusMemberContextValue, bn as PlusMemberProvider, bm as PlusMemberProviderProps, $ as PriceBasePriceType, a0 as PriceDiscountConfig, _ as PriceDiscountType, f as RemoveCartCodesInput, R as RemoveCartLinesInput, H as RewardItem, z as RuleCondition, J as RuleType, a6 as SCRIPT_CODE_AMOUNT_KEY, aV as SearchResult, aU as SearchResultItem, aT as SearchResultType, al as SelectedOptionsResult, a$ as ShippingMethodsContext, aY as SiteInfo, S as SpendMoneyType, Y as TieredDiscount, U as UpdateCartAttributesInput, bk as UseAddPlusMemberProductsToCartProps, aL as UseAllBlogsOptions, aF as UseAllCollectionsOptions, ao as UseAllProductsOptions, aN as UseArticleOptions, aR as UseArticlesInBlogOptions, aP as UseArticlesOptions, bf as UseAutoRemovePlusMemberInCartProps, aJ as UseBlogOptions, i as UseBuyNowOptions, l as UseCalcGiftsFromLinesOptions, m as UseCalcGiftsFromLinesResult, aD as UseCollectionOptions, aH as UseCollectionsOptions, bq as UseExposureOptions, bu as UseGeoLocationOptions, bh as UseHasPlusMemberInCartProps, bo as UseIntersectionOptions, au as UsePriceOptions, av as UsePriceResult, am as UseProductOptions, aq as UseProductsByHandlesOptions, s as UseScriptAutoFreeGiftResult, aW as UseSearchOptions, b5 as UseShippingMethodsOptions, b6 as UseShippingMethodsResult, aZ as UseSiteOptions, V as VariantItem, aB as VariantMedia, aA as VideoMedia, a9 as atobID, aa as btoaID, ag as checkAttributesUpdateNeeded, bx as clearGeoLocationCache, ac as createMockCartFromLines, a1 as currencyCodeMapping, a2 as defaultSWRMutationConfiguration, aj as formatFunctionAutoFreeGift, ai as formatScriptAutoFreeGift, bw as getCachedGeoLocation, af as getDiscountEnvAttributeValue, ad as getMatchedMainProductSubTotal, a8 as getQuery, p as getReferralAttributes, ab as normalizeAddToCartLines, ah as preCheck, ae as safeParse, a as useAddCartLines, bl as useAddPlusMemberProductsToCart, aM as useAllBlogs, aG as useAllCollections, ap as useAllProducts, e as useApplyCartCodes, aO as useArticle, aQ as useArticles, aS as useArticlesInBlog, bg as useAutoRemovePlusMemberInCart, aK as useBlog, j as useBuyNow, k as useCalcAutoFreeGift, n as useCalcGiftsFromLines, o as useCalcOrderDiscount, q as useCartAttributes, r as useCartItemQuantityLimit, aE as useCollection, aI as useCollections, u as useCreateCart, br as useExposure, bv as useGeoLocation, bj as useHasPlusMemberInCart, bp as useIntersection, b4 as usePlusAnnualProductVariant, be as usePlusMemberCheckoutCustomAttributes, b2 as usePlusMemberContext, ba as usePlusMemberDeliveryCodes, bb as usePlusMemberItemCustomAttributes, b3 as usePlusMonthlyProductVariant, aw as usePrice, an as useProduct, ax as useProductUrl, ar as useProductsByHandles, g as useRemoveCartCodes, c as useRemoveCartLines, b9 as useReplaceCartPlusMember, t as useScriptAutoFreeGift, aX as useSearch, ak as useSelectedOptions, b8 as useShippingMethodAvailableCheck, b7 as useShippingMethods, a_ as useSite, h as useUpdateCartAttributes, b as useUpdateCartLines, v as useUpdateLineCodeAmountAttributes, ay as useUpdateVariantQuery, at as useVariant, aC as useVariantMedia } from '../index-aSsTcW2O.js';
2
2
  export { a as AddToCartInput, A as AddToCartLineItem, h as DeliveryCustomData, i as DeliveryData, g as DeliveryOption, D as DeliveryPlusType, M as MailingAddress, P as PLUS_MEMBER_TYPE, b as PlusMemberMode, e as PlusMemberSettingsMetafields, d as PlusMemberShippingMethodConfig, c as PlusMemberShippingMethodMetafields, f as SelectedPlusMemberProduct, S as ShippingMethodMode, U as UseAddToCartOptions, u as useAddToCart } from '../types-CICUnw0v.js';
3
3
  import 'swr/mutation';
4
4
  import '@anker-in/shopify-sdk';
@@ -71,6 +71,81 @@ var CODE_AMOUNT_KEY = "_sku_code_money";
71
71
  var SCRIPT_CODE_AMOUNT_KEY = "_code_money";
72
72
  var MAIN_PRODUCT_CODE = ["WS24", "WSTD", "WS7D", "WSCP", "WSPE", "WSPD"];
73
73
 
74
+ // src/hooks/cart/utils/normalize-add-to-cart-lines.ts
75
+ function normalizeAddToCartLines(lines) {
76
+ return lines.filter((line) => line.variant?.id).map((line, index) => {
77
+ const variant = line.variant;
78
+ const product = variant.product;
79
+ const quantity = line.quantity || 1;
80
+ const price = variant.finalPrice?.amount ? Number(variant.finalPrice.amount) : variant.compareAtPrice?.amount ? Number(variant.compareAtPrice.amount) : variant.price?.amount ? Number(variant.price.amount) : 0;
81
+ const subtotalAmount = price * quantity;
82
+ const totalAmount = subtotalAmount;
83
+ return {
84
+ id: `temp-line-${index}-${variant.id}`,
85
+ // Temporary ID for pre-cart lines
86
+ name: product?.title || variant.title || "",
87
+ quantity,
88
+ variantId: variant.id,
89
+ productId: product?.id || variant.id.split("/").slice(0, -2).join("/"),
90
+ totalAmount,
91
+ subtotalAmount,
92
+ discountAllocations: [],
93
+ customAttributes: line.attributes || [],
94
+ variant: {
95
+ id: variant.id,
96
+ price,
97
+ listPrice: variant.compareAtPrice?.amount ? Number(variant.compareAtPrice.amount) : 0,
98
+ sku: variant.sku || "",
99
+ name: variant.title || "",
100
+ image: variant.image ? {
101
+ url: variant.image.url,
102
+ altText: variant.image.altText || void 0
103
+ } : void 0,
104
+ requiresShipping: false,
105
+ // Default value, not available in NormalizedProductVariant
106
+ availableForSale: variant.availableForSale ?? true,
107
+ quantityAvailable: variant.quantityAvailable ?? 0,
108
+ currentlyNotInStock: false,
109
+ // Default value, will be updated when added to cart
110
+ weight: variant.weight,
111
+ metafields: variant.metafields
112
+ },
113
+ product,
114
+ path: product?.handle ? `/products/${product.handle}` : "",
115
+ discounts: [],
116
+ options: variant.selectedOptions?.map((opt) => ({
117
+ name: opt.name,
118
+ value: opt.value
119
+ }))
120
+ };
121
+ });
122
+ }
123
+ function createMockCartFromLines(lines, existingCart) {
124
+ const normalizedLines = normalizeAddToCartLines(lines);
125
+ const subtotalPrice = normalizedLines.reduce((sum, line) => sum + line.subtotalAmount, 0);
126
+ const totalPrice = normalizedLines.reduce((sum, line) => sum + line.totalAmount, 0);
127
+ return {
128
+ id: existingCart?.id || "temp-cart-id",
129
+ customerId: existingCart?.customerId,
130
+ email: existingCart?.email,
131
+ createdAt: existingCart?.createdAt || (/* @__PURE__ */ new Date()).toISOString(),
132
+ currency: existingCart?.currency || { code: "USD" },
133
+ taxesIncluded: existingCart?.taxesIncluded,
134
+ lineItems: normalizedLines,
135
+ totallineItemsDiscount: 0,
136
+ orderDiscounts: 0,
137
+ lineItemsSubtotalPrice: subtotalPrice,
138
+ subtotalPrice,
139
+ totalPrice,
140
+ totalTaxAmount: 0,
141
+ discountCodes: existingCart?.discountCodes || [],
142
+ discountAllocations: [],
143
+ url: existingCart?.url || "",
144
+ ready: true,
145
+ customAttributes: existingCart?.customAttributes
146
+ };
147
+ }
148
+
74
149
  // src/hooks/cart/utils/index.ts
75
150
  var getQuery = () => {
76
151
  const url = typeof window !== "undefined" ? window.location.search : "";
@@ -110,25 +185,25 @@ var getMatchedMainProductSubTotal = (cartData, variant_list, main_product) => {
110
185
  return acc + (main_product?.spend_money_type === 1 /* ORIGIN_PRICE */ ? Number(line.subtotalAmount) || 0 : Number(line.totalAmount) || 0);
111
186
  }, 0) || 0;
112
187
  };
113
- var getDiscountEnvAttributeValue = (attributes = []) => {
114
- const attr = attributes.find((attr2) => attr2.key === CUSTOMER_ATTRIBUTE_KEY);
115
- return safeParseJson(attr?.value ?? "") ?? {};
116
- };
117
- var isAttributesEqual = (attrs1 = [], attrs2 = []) => {
118
- if (attrs1.length !== attrs2.length) return false;
119
- const sorted1 = [...attrs1].sort((a, b) => a.key.localeCompare(b.key));
120
- const sorted2 = [...attrs2].sort((a, b) => a.key.localeCompare(b.key));
121
- return sorted1.every(
122
- (attr, i) => attr.key === sorted2[i]?.key && attr.value === sorted2[i]?.value
123
- );
124
- };
125
- var safeParseJson = (str) => {
188
+ var safeParse = (str) => {
126
189
  try {
127
190
  return JSON.parse(str);
128
191
  } catch (err) {
129
192
  return {};
130
193
  }
131
194
  };
195
+ var getDiscountEnvAttributeValue = (attributes = []) => {
196
+ const attr = attributes.find((attr2) => attr2.key === CUSTOMER_ATTRIBUTE_KEY);
197
+ return safeParse(attr?.value ?? "") ?? {};
198
+ };
199
+ var checkAttributesUpdateNeeded = (oldAttributes, newAttributes, customAttributesNeedRemove) => {
200
+ return oldAttributes.some((attr) => {
201
+ const newAttr = newAttributes.find((newAttr2) => newAttr2.key === attr.key);
202
+ return newAttr ? newAttr.value !== attr.value : true;
203
+ }) || newAttributes.some((attr) => !oldAttributes.some((oldAttr) => oldAttr.key === attr.key)) || customAttributesNeedRemove.some(
204
+ (removeAttr) => oldAttributes.some((oldAttr) => oldAttr.key === removeAttr.key)
205
+ );
206
+ };
132
207
  var containsAll = (source, requiredItems = []) => {
133
208
  if (!requiredItems?.length) return true;
134
209
  const sourceSet = new Set(source);
@@ -295,12 +370,18 @@ var formatFunctionAutoFreeGift = ({
295
370
  };
296
371
  return result;
297
372
  };
298
- var useCalcAutoFreeGift = (cart, autoFreeGiftConfig, customer) => {
373
+ var useCalcAutoFreeGift = (cart, autoFreeGiftConfig, customer, lines) => {
299
374
  const tags = react.useMemo(() => customer?.tags || [], [customer?.tags]);
300
375
  const isCustomerLoading = react.useMemo(() => !customer ? true : false, [customer]);
301
376
  const dealsType = "";
302
377
  const { client, locale } = useShopify();
303
378
  const giftProductsCache = react.useRef(null);
379
+ const effectiveCart = react.useMemo(() => {
380
+ if (lines && lines.length > 0) {
381
+ return createMockCartFromLines(lines, cart);
382
+ }
383
+ return cart;
384
+ }, [lines, cart]);
304
385
  const { activeCampaign, subtotal } = react.useMemo(() => {
305
386
  for (const campaign of autoFreeGiftConfig) {
306
387
  const { rule_conditions = [], rule_result } = campaign;
@@ -308,7 +389,7 @@ var useCalcAutoFreeGift = (cart, autoFreeGiftConfig, customer) => {
308
389
  const isPreCheckPassed = preCheck(rule_conditions, tags, []);
309
390
  if (isPreCheckPassed && spend_get_reward) {
310
391
  const matchedSubtotal = getMatchedMainProductSubTotal(
311
- cart,
392
+ effectiveCart,
312
393
  spend_get_reward.main_product?.variant_list?.map((v) => v.variant_id) || [],
313
394
  {
314
395
  spend_money_type: spend_get_reward.main_product?.spend_money_type || 1,
@@ -322,7 +403,7 @@ var useCalcAutoFreeGift = (cart, autoFreeGiftConfig, customer) => {
322
403
  }
323
404
  }
324
405
  return { activeCampaign: null, subtotal: 0 };
325
- }, [autoFreeGiftConfig, cart, tags, dealsType]);
406
+ }, [autoFreeGiftConfig, effectiveCart, tags, dealsType]);
326
407
  const { qualifyingGift, nextTierGoal } = react.useMemo(() => {
327
408
  if (!activeCampaign || !activeCampaign.rule_result?.spend_get_reward?.gift_product) {
328
409
  return { qualifyingGift: null, nextTierGoal: null };
@@ -405,18 +486,33 @@ var useScriptAutoFreeGift = ({
405
486
  campaign,
406
487
  _giveaway,
407
488
  cart,
408
- locale: providedLocale
489
+ locale: providedLocale,
490
+ lines
409
491
  }) => {
410
492
  const { client, locale: contextLocale } = useShopify();
411
493
  const locale = providedLocale || contextLocale;
412
494
  const [points_subscribe, set_points_subscribe] = react.useState(false);
413
495
  const giftProductsCache = react.useRef(null);
496
+ const effectiveCart = react.useMemo(() => {
497
+ if (lines && lines.length > 0) {
498
+ return createMockCartFromLines(lines, cart);
499
+ }
500
+ return cart;
501
+ }, [lines, cart]);
414
502
  react.useEffect(() => {
415
503
  if (locale === "au") {
416
504
  const isPointsSubscribe = Cookies5__default.default.get("points_subscribe");
417
505
  set_points_subscribe(!!isPointsSubscribe);
418
506
  }
419
507
  }, [locale]);
508
+ const isActivityAvailable = react.useMemo(() => {
509
+ if (!campaign) return false;
510
+ const query = getQuery();
511
+ const utmCampaign = Cookies5__default.default.get("utm_campaign") || query?.utm_campaign;
512
+ if (campaign.activityAvailableQuery && !utmCampaign?.includes(campaign.activityAvailableQuery))
513
+ return false;
514
+ return true;
515
+ }, [campaign]);
420
516
  const [upgrade_multiple, upgrade_value] = react.useMemo(() => {
421
517
  let upgrade_multiple2 = 1;
422
518
  let upgrade_value2 = 0;
@@ -424,17 +520,17 @@ var useScriptAutoFreeGift = ({
424
520
  upgrade_multiple2 = 1.2;
425
521
  upgrade_value2 = 40;
426
522
  }
427
- cart?.lineItems?.forEach(({ customAttributes }) => {
523
+ effectiveCart?.lineItems?.forEach(({ customAttributes }) => {
428
524
  customAttributes?.forEach(({ key, value }) => {
429
525
  if (key === "_amount_upgrade_multiple") upgrade_multiple2 = Number(value) || 1;
430
526
  if (key === "_amount_upgrade_value") upgrade_value2 = Number(value) || 0;
431
527
  });
432
528
  });
433
529
  return [upgrade_multiple2, upgrade_value2];
434
- }, [cart?.lineItems, points_subscribe]);
530
+ }, [effectiveCart?.lineItems, points_subscribe]);
435
531
  const breakpoints = react.useMemo(() => {
436
- if (!campaign) return [];
437
- return (campaign.breakpoints || []).map((item) => ({
532
+ if (!isActivityAvailable) return [];
533
+ return (campaign?.breakpoints || []).map((item) => ({
438
534
  breakpoint: new Decimal2__default.default(item.breakpoint).minus(new Decimal2__default.default(upgrade_value)).dividedBy(new Decimal2__default.default(upgrade_multiple)).toFixed(2, Decimal2__default.default.ROUND_DOWN),
439
535
  giveawayProducts: item.giveawayProducts || []
440
536
  }));
@@ -458,25 +554,26 @@ var useScriptAutoFreeGift = ({
458
554
  return true;
459
555
  }, [giftHandles]);
460
556
  const involvedLines = react.useMemo(() => {
461
- if (!campaign) return [];
462
- return (cart?.lineItems || []).filter((line) => {
557
+ if (!isActivityAvailable) return [];
558
+ return (effectiveCart?.lineItems || []).filter((line) => {
463
559
  const isNotGift = line?.totalAmount && Number(line.totalAmount) > 0 && line.customAttributes?.every(
464
560
  (item) => item.key !== _giveaway
465
561
  );
466
562
  const hasCampaignTag = line.product?.tags?.some(
467
- (tag) => campaign.includeTags?.includes(tag.trim()) && line.variant?.availableForSale
563
+ (tag) => campaign?.includeTags?.includes(tag.trim()) && line.variant?.availableForSale
468
564
  );
469
565
  return isNotGift && hasCampaignTag;
470
566
  });
471
- }, [cart?.lineItems, campaign, _giveaway]);
567
+ }, [effectiveCart?.lineItems, isActivityAvailable, _giveaway]);
472
568
  const involvedSubTotal = react.useMemo(() => {
473
- if (!campaign) return new Decimal2__default.default(0);
569
+ if (!isActivityAvailable) return new Decimal2__default.default(0);
474
570
  return involvedLines.reduce((prev, item) => {
475
- const amount = campaign.useTotalAmount ? item.totalAmount : item.subtotalAmount;
571
+ const amount = campaign?.useTotalAmount ? item.totalAmount : item.subtotalAmount;
476
572
  return new Decimal2__default.default(prev).plus(new Decimal2__default.default(amount || 0));
477
573
  }, new Decimal2__default.default(0));
478
- }, [involvedLines, campaign]);
574
+ }, [involvedLines, isActivityAvailable]);
479
575
  const [freeGiftLevel, nextFreeGiftLevel] = react.useMemo(() => {
576
+ if (!isActivityAvailable) return [null, null];
480
577
  const sortedLevels = [...breakpoints].sort(
481
578
  (a, b) => Number(b.breakpoint) - Number(a.breakpoint)
482
579
  );
@@ -630,8 +727,12 @@ var trackAddToCartGA = ({
630
727
  }
631
728
  const { variant } = lineItems[0];
632
729
  const currencyCode = variant.product?.price?.currencyCode;
633
- const price = variant.compareAtPrice?.amount ?? (variant.price?.amount || 0);
634
- const totalPrice = lineItems?.reduce((prev, { variant: variant2 }) => prev.plus(variant2?.finalPrice?.amount ?? price), new Decimal2__default.default(0)).toNumber();
730
+ const totalPrice = lineItems?.reduce(
731
+ (prev, { variant: variant2 }) => prev.plus(
732
+ variant2?.finalPrice?.amount ?? variant2?.compareAtPrice?.amount ?? variant2?.price?.amount ?? 0
733
+ ),
734
+ new Decimal2__default.default(0)
735
+ ).toNumber();
635
736
  gaTrack({
636
737
  event: "ga4Event",
637
738
  event_name: "add_to_cart",
@@ -646,7 +747,7 @@ var trackAddToCartGA = ({
646
747
  item_brand: gtmParams?.brand || "",
647
748
  item_category: variant2?.product?.productType || "",
648
749
  item_variant: variant2?.title || variant2?.title,
649
- price,
750
+ price: variant2?.compareAtPrice?.amount ?? variant2?.price?.amount,
650
751
  quantity: quantity || 1
651
752
  })),
652
753
  ...gtmParams?.ga4Params
@@ -662,8 +763,12 @@ var trackBuyNowGA = ({
662
763
  }
663
764
  const { variant } = lineItems[0];
664
765
  const currencyCode = variant.price?.currencyCode;
665
- const price = variant.compareAtPrice?.amount ?? (variant.price?.amount || 0);
666
- const totalPrice = lineItems?.reduce((prev, { variant: variant2 }) => prev.plus(variant2?.finalPrice?.amount ?? price), new Decimal2__default.default(0)).toNumber();
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__default.default(0)
771
+ ).toNumber();
667
772
  gaTrack({
668
773
  event: "ga4Event",
669
774
  event_name: "begin_checkout",
@@ -678,7 +783,7 @@ var trackBuyNowGA = ({
678
783
  item_brand: gtmParams?.brand || "",
679
784
  item_category: item.variant?.product?.productType || "",
680
785
  item_variant: item.variant?.title,
681
- price,
786
+ price: item.variant?.compareAtPrice?.amount ?? item.variant?.price?.amount,
682
787
  quantity: item.quantity || 1
683
788
  })),
684
789
  ...gtmParams?.ga4Params
@@ -821,6 +926,7 @@ function useAddToCart({ withTrack = true } = {}, swrOptions) {
821
926
  if (!resultCart) {
822
927
  return void 0;
823
928
  }
929
+ console.log("npm addCartLines resultCart", resultCart);
824
930
  if (resultCart.discountCodes && resultCart.discountCodes.length > 0) {
825
931
  const unapplicableCodes = resultCart.discountCodes.filter((item) => !item.applicable).map((item) => item.code);
826
932
  if (unapplicableCodes.length > 0) {
@@ -994,6 +1100,60 @@ function useBuyNow({ withTrack = true } = {}, swrOptions) {
994
1100
  );
995
1101
  return useSWRMutation__default.default("buy-now", buyNow, swrOptions);
996
1102
  }
1103
+ function useCalcGiftsFromLines({
1104
+ lines,
1105
+ customer,
1106
+ scriptGiveawayKey = CUSTOMER_SCRIPT_GIFT_KEY
1107
+ }) {
1108
+ const { locale } = useShopify();
1109
+ const { cart, autoFreeGiftConfig, gradientGiftsConfig } = useCartContext();
1110
+ const functionGift = useCalcAutoFreeGift(cart, autoFreeGiftConfig || [], customer, lines);
1111
+ const scriptGift = useScriptAutoFreeGift({
1112
+ campaign: gradientGiftsConfig || null,
1113
+ _giveaway: scriptGiveawayKey,
1114
+ cart,
1115
+ locale,
1116
+ lines
1117
+ });
1118
+ const allGiftLines = react.useMemo(() => {
1119
+ const functionGiftLines = functionGift.qualifyingGift?.itemsToAdd || [];
1120
+ const scriptGiftLines = scriptGift.freeGiftLevel ? scriptGift.freeGiftLevel.giveawayProducts.map((product) => {
1121
+ const giftProduct = scriptGift.giftProductsResult?.find(
1122
+ (p) => p.handle === product.handle
1123
+ );
1124
+ const variant = giftProduct?.variants?.[0];
1125
+ return {
1126
+ variant: {
1127
+ id: variant?.id || "",
1128
+ handle: product.handle,
1129
+ sku: product.sku
1130
+ },
1131
+ quantity: 1,
1132
+ attributes: [
1133
+ {
1134
+ key: scriptGiveawayKey,
1135
+ value: "true"
1136
+ }
1137
+ ]
1138
+ };
1139
+ }).filter((item) => item.variant.id) : [];
1140
+ return [...functionGiftLines, ...scriptGiftLines];
1141
+ }, [
1142
+ functionGift.qualifyingGift,
1143
+ scriptGift.freeGiftLevel,
1144
+ scriptGift.giftProductsResult,
1145
+ scriptGiveawayKey
1146
+ ]);
1147
+ const hasGifts = react.useMemo(() => {
1148
+ return allGiftLines.length > 0;
1149
+ }, [allGiftLines]);
1150
+ return {
1151
+ functionGift,
1152
+ scriptGift,
1153
+ allGiftLines,
1154
+ hasGifts
1155
+ };
1156
+ }
997
1157
 
998
1158
  // src/hooks/cart/types/order-discount.ts
999
1159
  var OrderDiscountType = /* @__PURE__ */ ((OrderDiscountType2) => {
@@ -2499,11 +2659,43 @@ function useAutoRemovePlusMemberInCart({
2499
2659
  removeCartLines2
2500
2660
  ]);
2501
2661
  }
2662
+ function useAddPlusMemberProductsToCart({
2663
+ cart,
2664
+ memberSetting,
2665
+ selectedPlusMemberMode,
2666
+ selectedPlusMemberProduct
2667
+ }) {
2668
+ const { hasMonthlyPlus, hasAnnualPlus } = useHasPlusMemberInCart({
2669
+ cart,
2670
+ memberSetting
2671
+ });
2672
+ const plusMemberProduct = react.useMemo(() => {
2673
+ if (selectedPlusMemberMode === "free" /* FREE */) {
2674
+ return void 0;
2675
+ }
2676
+ if (selectedPlusMemberMode === "monthly" /* MONTHLY */ && hasMonthlyPlus) {
2677
+ return void 0;
2678
+ }
2679
+ if (selectedPlusMemberMode === "annual" /* ANNUAL */ && hasAnnualPlus) {
2680
+ return void 0;
2681
+ }
2682
+ if (!selectedPlusMemberProduct) {
2683
+ return void 0;
2684
+ }
2685
+ return selectedPlusMemberProduct;
2686
+ }, [
2687
+ selectedPlusMemberMode,
2688
+ selectedPlusMemberProduct?.variant,
2689
+ selectedPlusMemberProduct?.product,
2690
+ hasMonthlyPlus,
2691
+ hasAnnualPlus
2692
+ ]);
2693
+ return plusMemberProduct;
2694
+ }
2502
2695
  var PlusMemberProvider = ({
2503
2696
  variant,
2504
2697
  product,
2505
- shopCommon,
2506
- metafields,
2698
+ memberSetting,
2507
2699
  initialSelectedPlusMemberMode = "free",
2508
2700
  profile,
2509
2701
  locale,
@@ -2523,14 +2715,14 @@ var PlusMemberProvider = ({
2523
2715
  const [deleteMarginBottom, setDeleteMarginBottom] = react.useState(false);
2524
2716
  const shippingMethodsContext = useShippingMethods({
2525
2717
  variant,
2526
- plusMemberMetafields: metafields,
2718
+ plusMemberMetafields: memberSetting,
2527
2719
  selectedPlusMemberMode});
2528
2720
  const plusMemberHandles = react.useMemo(() => {
2529
2721
  return [
2530
- metafields?.plus_monthly_product?.handle,
2531
- metafields?.plus_annual_product?.handle
2722
+ memberSetting?.plus_monthly_product?.handle,
2723
+ memberSetting?.plus_annual_product?.handle
2532
2724
  ].filter(Boolean);
2533
- }, [metafields]);
2725
+ }, [memberSetting]);
2534
2726
  const { data: plusMemberProducts = [] } = useProductsByHandles({
2535
2727
  handles: plusMemberHandles
2536
2728
  });
@@ -2538,25 +2730,24 @@ var PlusMemberProvider = ({
2538
2730
  if (selectedPlusMemberMode === "free" /* FREE */) {
2539
2731
  return null;
2540
2732
  }
2541
- const handle = selectedPlusMemberMode === "monthly" /* MONTHLY */ ? metafields?.plus_monthly_product?.handle : metafields?.plus_annual_product?.handle;
2542
- const sku = selectedPlusMemberMode === "monthly" /* MONTHLY */ ? metafields?.plus_monthly_product?.sku : metafields?.plus_annual_product?.sku;
2733
+ const handle = selectedPlusMemberMode === "monthly" /* MONTHLY */ ? memberSetting?.plus_monthly_product?.handle : memberSetting?.plus_annual_product?.handle;
2734
+ const sku = selectedPlusMemberMode === "monthly" /* MONTHLY */ ? memberSetting?.plus_monthly_product?.sku : memberSetting?.plus_annual_product?.sku;
2543
2735
  const product2 = plusMemberProducts?.find((p) => p.handle === handle);
2544
2736
  const variant2 = product2?.variants?.find((v) => v.sku === sku);
2545
2737
  return product2 && variant2 ? { product: product2, variant: variant2 } : null;
2546
- }, [plusMemberProducts, metafields, selectedPlusMemberMode]);
2738
+ }, [plusMemberProducts, memberSetting, selectedPlusMemberMode]);
2547
2739
  return /* @__PURE__ */ jsxRuntime.jsx(
2548
2740
  PlusMemberContext.Provider,
2549
2741
  {
2550
2742
  value: {
2551
2743
  variant,
2552
- shopCommon,
2553
2744
  zipCode,
2554
2745
  setZipCode,
2555
2746
  allowNextDayDelivery,
2556
2747
  setAllowNextDayDelivery,
2557
2748
  allowThirdDayDelivery,
2558
2749
  setAllowThirdDayDelivery,
2559
- plusMemberMetafields: metafields,
2750
+ plusMemberMetafields: memberSetting,
2560
2751
  selectedPlusMemberMode,
2561
2752
  setSelectedPlusMemberMode,
2562
2753
  showAreaCheckModal,
@@ -2782,7 +2973,9 @@ exports.ShippingMethodMode = ShippingMethodMode;
2782
2973
  exports.SpendMoneyType = SpendMoneyType;
2783
2974
  exports.atobID = atobID;
2784
2975
  exports.btoaID = btoaID;
2976
+ exports.checkAttributesUpdateNeeded = checkAttributesUpdateNeeded;
2785
2977
  exports.clearGeoLocationCache = clearGeoLocationCache;
2978
+ exports.createMockCartFromLines = createMockCartFromLines;
2786
2979
  exports.currencyCodeMapping = currencyCodeMapping;
2787
2980
  exports.defaultSWRMutationConfiguration = defaultSWRMutationConfiguration;
2788
2981
  exports.formatFunctionAutoFreeGift = formatFunctionAutoFreeGift;
@@ -2792,10 +2985,11 @@ exports.getDiscountEnvAttributeValue = getDiscountEnvAttributeValue;
2792
2985
  exports.getMatchedMainProductSubTotal = getMatchedMainProductSubTotal;
2793
2986
  exports.getQuery = getQuery;
2794
2987
  exports.getReferralAttributes = getReferralAttributes;
2795
- exports.isAttributesEqual = isAttributesEqual;
2988
+ exports.normalizeAddToCartLines = normalizeAddToCartLines;
2796
2989
  exports.preCheck = preCheck;
2797
- exports.safeParseJson = safeParseJson;
2990
+ exports.safeParse = safeParse;
2798
2991
  exports.useAddCartLines = useAddCartLines;
2992
+ exports.useAddPlusMemberProductsToCart = useAddPlusMemberProductsToCart;
2799
2993
  exports.useAddToCart = useAddToCart;
2800
2994
  exports.useAllBlogs = useAllBlogs;
2801
2995
  exports.useAllCollections = useAllCollections;
@@ -2808,6 +3002,7 @@ exports.useAutoRemovePlusMemberInCart = useAutoRemovePlusMemberInCart;
2808
3002
  exports.useBlog = useBlog;
2809
3003
  exports.useBuyNow = useBuyNow;
2810
3004
  exports.useCalcAutoFreeGift = useCalcAutoFreeGift;
3005
+ exports.useCalcGiftsFromLines = useCalcGiftsFromLines;
2811
3006
  exports.useCalcOrderDiscount = useCalcOrderDiscount;
2812
3007
  exports.useCartAttributes = useCartAttributes;
2813
3008
  exports.useCartItemQuantityLimit = useCartItemQuantityLimit;