@anker-in/shopify-react 0.1.1-beta.1 → 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
  );
@@ -683,8 +692,12 @@ var trackAddToCartGA = ({
683
692
  }
684
693
  const { variant } = lineItems[0];
685
694
  const currencyCode = variant.product?.price?.currencyCode;
686
- const price = variant.compareAtPrice?.amount ?? (variant.price?.amount || 0);
687
- const totalPrice = lineItems?.reduce((prev, { variant: variant2 }) => prev.plus(variant2?.finalPrice?.amount ?? price), new Decimal2(0)).toNumber();
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();
688
701
  gaTrack({
689
702
  event: "ga4Event",
690
703
  event_name: "add_to_cart",
@@ -699,7 +712,7 @@ var trackAddToCartGA = ({
699
712
  item_brand: gtmParams?.brand || "",
700
713
  item_category: variant2?.product?.productType || "",
701
714
  item_variant: variant2?.title || variant2?.title,
702
- price,
715
+ price: variant2?.compareAtPrice?.amount ?? variant2?.price?.amount,
703
716
  quantity: quantity || 1
704
717
  })),
705
718
  ...gtmParams?.ga4Params
@@ -714,9 +727,12 @@ var trackBeginCheckoutGA = ({
714
727
  if (!lineItems.length) {
715
728
  return;
716
729
  }
717
- const { variant } = lineItems[0] || {};
718
- const price = variant?.compareAtPrice?.amount ?? (variant?.price?.amount || 0);
719
- const totalPrice = lineItems?.reduce((prev, { variant: variant2 }) => prev.plus(variant2?.finalPrice?.amount ?? price), new Decimal2(0)).toNumber();
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();
720
736
  gaTrack({
721
737
  event: "ga4Event",
722
738
  event_name: "begin_checkout",
@@ -731,7 +747,7 @@ var trackBeginCheckoutGA = ({
731
747
  item_brand: gtmParams?.brand || "",
732
748
  item_category: item.variant?.product?.productType,
733
749
  item_variant: item.variant?.title,
734
- price,
750
+ price: item.variant?.compareAtPrice?.amount ?? item.variant?.price?.amount,
735
751
  quantity: item.quantity || 1
736
752
  })),
737
753
  ...gtmParams?.ga4Params
@@ -747,8 +763,12 @@ var trackBuyNowGA = ({
747
763
  }
748
764
  const { variant } = lineItems[0];
749
765
  const currencyCode = variant.price?.currencyCode;
750
- const price = variant.compareAtPrice?.amount ?? (variant.price?.amount || 0);
751
- const totalPrice = lineItems?.reduce((prev, { variant: variant2 }) => prev.plus(variant2?.finalPrice?.amount ?? price), new Decimal2(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(0)
771
+ ).toNumber();
752
772
  gaTrack({
753
773
  event: "ga4Event",
754
774
  event_name: "begin_checkout",
@@ -763,7 +783,7 @@ var trackBuyNowGA = ({
763
783
  item_brand: gtmParams?.brand || "",
764
784
  item_category: item.variant?.product?.productType || "",
765
785
  item_variant: item.variant?.title,
766
- price,
786
+ price: item.variant?.compareAtPrice?.amount ?? item.variant?.price?.amount,
767
787
  quantity: item.quantity || 1
768
788
  })),
769
789
  ...gtmParams?.ga4Params
@@ -2584,11 +2604,43 @@ function useAutoRemovePlusMemberInCart({
2584
2604
  removeCartLines2
2585
2605
  ]);
2586
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
+ }
2587
2640
  var PlusMemberProvider = ({
2588
2641
  variant,
2589
2642
  product,
2590
- shopCommon,
2591
- metafields,
2643
+ memberSetting,
2592
2644
  initialSelectedPlusMemberMode = "free",
2593
2645
  profile,
2594
2646
  locale,
@@ -2608,14 +2660,14 @@ var PlusMemberProvider = ({
2608
2660
  const [deleteMarginBottom, setDeleteMarginBottom] = useState(false);
2609
2661
  const shippingMethodsContext = useShippingMethods({
2610
2662
  variant,
2611
- plusMemberMetafields: metafields,
2663
+ plusMemberMetafields: memberSetting,
2612
2664
  selectedPlusMemberMode});
2613
2665
  const plusMemberHandles = useMemo(() => {
2614
2666
  return [
2615
- metafields?.plus_monthly_product?.handle,
2616
- metafields?.plus_annual_product?.handle
2667
+ memberSetting?.plus_monthly_product?.handle,
2668
+ memberSetting?.plus_annual_product?.handle
2617
2669
  ].filter(Boolean);
2618
- }, [metafields]);
2670
+ }, [memberSetting]);
2619
2671
  const { data: plusMemberProducts = [] } = useProductsByHandles({
2620
2672
  handles: plusMemberHandles
2621
2673
  });
@@ -2623,25 +2675,24 @@ var PlusMemberProvider = ({
2623
2675
  if (selectedPlusMemberMode === "free" /* FREE */) {
2624
2676
  return null;
2625
2677
  }
2626
- const handle = selectedPlusMemberMode === "monthly" /* MONTHLY */ ? metafields?.plus_monthly_product?.handle : metafields?.plus_annual_product?.handle;
2627
- 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;
2628
2680
  const product2 = plusMemberProducts?.find((p) => p.handle === handle);
2629
2681
  const variant2 = product2?.variants?.find((v) => v.sku === sku);
2630
2682
  return product2 && variant2 ? { product: product2, variant: variant2 } : null;
2631
- }, [plusMemberProducts, metafields, selectedPlusMemberMode]);
2683
+ }, [plusMemberProducts, memberSetting, selectedPlusMemberMode]);
2632
2684
  return /* @__PURE__ */ jsx(
2633
2685
  PlusMemberContext.Provider,
2634
2686
  {
2635
2687
  value: {
2636
2688
  variant,
2637
- shopCommon,
2638
2689
  zipCode,
2639
2690
  setZipCode,
2640
2691
  allowNextDayDelivery,
2641
2692
  setAllowNextDayDelivery,
2642
2693
  allowThirdDayDelivery,
2643
2694
  setAllowThirdDayDelivery,
2644
- plusMemberMetafields: metafields,
2695
+ plusMemberMetafields: memberSetting,
2645
2696
  selectedPlusMemberMode,
2646
2697
  setSelectedPlusMemberMode,
2647
2698
  showAreaCheckModal,
@@ -2860,6 +2911,9 @@ function CartProvider({
2860
2911
  }) {
2861
2912
  const { client, cartCookieAdapter } = useShopify();
2862
2913
  const [customAttributes, setCustomAttributes] = useState([]);
2914
+ const [customAttributesNeedDelete, setCustomAttributesNeedDelete] = useState(
2915
+ []
2916
+ );
2863
2917
  const [isCodeChanging, setIsCodeChanging] = useState(false);
2864
2918
  const [loadingState, setLoadingState] = useState({
2865
2919
  editLineQuantityLoading: false,
@@ -2890,7 +2944,11 @@ function CartProvider({
2890
2944
  useRequest(
2891
2945
  () => {
2892
2946
  const newAttributes = [...attributes, ...customAttributes];
2893
- const needUpdate = cart && !isAttributesEqual(cart.customAttributes, newAttributes);
2947
+ const needUpdate = cart && !checkAttributesUpdateNeeded(
2948
+ cart.customAttributes,
2949
+ newAttributes,
2950
+ customAttributesNeedDelete
2951
+ );
2894
2952
  if (needUpdate) {
2895
2953
  return updateAttributes({ attributes: newAttributes });
2896
2954
  } else {
@@ -2911,11 +2969,12 @@ function CartProvider({
2911
2969
  isCartLoading: isCartLoading || isCodeChanging,
2912
2970
  setLoadingState
2913
2971
  });
2914
- const removeCustomAttributes = useCallback((attributes2) => {
2915
- setCustomAttributes(
2916
- (prev) => prev.filter((attr) => !attributes2.some((a) => a.key === attr.key))
2917
- );
2918
- }, []);
2972
+ const removeCustomAttributes = useCallback(
2973
+ (attributes2) => {
2974
+ setCustomAttributesNeedDelete(attributes2);
2975
+ },
2976
+ [setCustomAttributesNeedDelete]
2977
+ );
2919
2978
  const addCustomAttributes = useCallback(
2920
2979
  (attributes2) => {
2921
2980
  const sameAttributes = attributes2.filter(
@@ -3048,6 +3107,6 @@ function useCartContext() {
3048
3107
  return context;
3049
3108
  }
3050
3109
 
3051
- 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 };
3052
3111
  //# sourceMappingURL=index.mjs.map
3053
3112
  //# sourceMappingURL=index.mjs.map