@anker-in/shopify-react 0.1.1-beta.40 → 0.1.1-beta.41

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
@@ -150,6 +150,7 @@ var CUSTOMER_ATTRIBUTE_KEY = "_discounts_function_env";
150
150
  var CUSTOMER_SCRIPT_GIFT_KEY = "_giveaway_gradient_gifts";
151
151
  var CODE_AMOUNT_KEY = "_sku_code_money";
152
152
  var SCRIPT_CODE_AMOUNT_KEY = "_code_money";
153
+ var MEMBER_PRICE_ATTRIBUTE_KEY = "_member_price";
153
154
  var MAIN_PRODUCT_CODE = ["WS24", "WSTD", "WS7D", "WSCP", "WSPE", "WSPD"];
154
155
 
155
156
  // src/hooks/cart/utils/normalize-add-to-cart-lines.ts
@@ -1053,59 +1054,90 @@ function useRemoveCartCodes(options) {
1053
1054
  );
1054
1055
  return useSWRMutation("remove-codes", removeCodes, options);
1055
1056
  }
1056
-
1057
- // src/hooks/cart/utils/add-to-cart.ts
1058
- var getLinesWithAttributes = ({
1057
+ var initSameLinesAttributes = ({
1059
1058
  cart,
1060
- lineItems
1059
+ line
1061
1060
  }) => {
1062
- return lineItems.map((line) => {
1063
- const sameLineInCart = cart?.lineItems.find(
1064
- (lineInCart) => lineInCart.variant.sku === line.variant?.sku && lineInCart.product?.handle === line.variant?.product?.handle
1065
- );
1066
- const codeAmountAttribute = sameLineInCart?.customAttributes?.find(
1067
- (attr) => attr.key === CODE_AMOUNT_KEY
1068
- );
1069
- const scriptCodeAmountAttribute = sameLineInCart?.customAttributes?.find(
1070
- (attr) => attr.key === SCRIPT_CODE_AMOUNT_KEY
1061
+ const sameLineInCart = cart?.lineItems.find(
1062
+ (lineInCart) => lineInCart.variant.sku === line.variant?.sku && lineInCart.product?.handle === line.variant?.product?.handle
1063
+ );
1064
+ const codeAmountAttribute = sameLineInCart?.customAttributes?.find(
1065
+ (attr) => attr.key === CODE_AMOUNT_KEY
1066
+ );
1067
+ const scriptCodeAmountAttribute = sameLineInCart?.customAttributes?.find(
1068
+ (attr) => attr.key === SCRIPT_CODE_AMOUNT_KEY
1069
+ );
1070
+ let functionAttribute = null;
1071
+ try {
1072
+ functionAttribute = sameLineInCart?.customAttributes?.find(
1073
+ (attr) => attr.key === CUSTOMER_ATTRIBUTE_KEY && JSON.parse(attr.value)?.discounted_amount
1071
1074
  );
1072
- let functionAttribute = null;
1073
- try {
1074
- functionAttribute = sameLineInCart?.customAttributes?.find(
1075
- (attr) => attr.key === CUSTOMER_ATTRIBUTE_KEY && JSON.parse(attr.value)?.discounted_amount
1076
- );
1077
- } catch (error) {
1078
- }
1079
- if (codeAmountAttribute || functionAttribute || scriptCodeAmountAttribute) {
1080
- return {
1081
- ...line,
1082
- attributes: [
1083
- ...line.attributes || [],
1084
- codeAmountAttribute,
1085
- functionAttribute,
1086
- scriptCodeAmountAttribute
1087
- ].filter(Boolean)
1088
- };
1089
- }
1090
- return line;
1091
- });
1075
+ } catch (error) {
1076
+ }
1077
+ if (codeAmountAttribute || functionAttribute || scriptCodeAmountAttribute) {
1078
+ return {
1079
+ ...line,
1080
+ attributes: [
1081
+ ...line.attributes || [],
1082
+ codeAmountAttribute,
1083
+ functionAttribute,
1084
+ scriptCodeAmountAttribute
1085
+ ].filter(Boolean)
1086
+ };
1087
+ }
1088
+ return line;
1089
+ };
1090
+ var initDiscountAttributes = ({ line }) => {
1091
+ let itemAttributes = line.attributes || [];
1092
+ const functionEnvAttribute = itemAttributes.find((attr) => attr.key === CUSTOMER_ATTRIBUTE_KEY);
1093
+ if (!functionEnvAttribute) {
1094
+ itemAttributes = itemAttributes.concat([
1095
+ {
1096
+ key: CUSTOMER_ATTRIBUTE_KEY,
1097
+ value: JSON.stringify({
1098
+ is_gift: false,
1099
+ discounted_amount: line.variant?.finalPrice?.amount === void 0 ? Number(line.variant?.price?.amount) * (line.quantity || 1) : Number(line.variant?.finalPrice?.amount) * (line.quantity || 1)
1100
+ })
1101
+ }
1102
+ ]);
1103
+ }
1104
+ const memberPriceAttribute = itemAttributes.find(
1105
+ (attr) => attr.key === MEMBER_PRICE_ATTRIBUTE_KEY
1106
+ );
1107
+ const coupon = line.coupon;
1108
+ if (!memberPriceAttribute && coupon) {
1109
+ itemAttributes = itemAttributes.concat([
1110
+ {
1111
+ key: MEMBER_PRICE_ATTRIBUTE_KEY,
1112
+ value: JSON.stringify({ code: coupon.code })
1113
+ }
1114
+ ]);
1115
+ }
1116
+ const couponDiscountAttribute = itemAttributes.find(
1117
+ (attr) => attr.key === CODE_AMOUNT_KEY || attr.key === SCRIPT_CODE_AMOUNT_KEY
1118
+ );
1119
+ if (!couponDiscountAttribute && coupon && Number(coupon?.amount) > 0) {
1120
+ itemAttributes = itemAttributes.concat([
1121
+ {
1122
+ key: CODE_AMOUNT_KEY,
1123
+ value: new Decimal2(coupon.amount).times(line.quantity || 1).toString()
1124
+ },
1125
+ {
1126
+ key: SCRIPT_CODE_AMOUNT_KEY,
1127
+ value: new Decimal2(coupon.amount).times(line.quantity || 1).toString()
1128
+ }
1129
+ ]);
1130
+ }
1131
+ return { ...line, attributes: itemAttributes };
1092
1132
  };
1093
- var getLinesWithFunctionAttributes = (lineItems) => {
1133
+ var getLinesWithAttributes = ({
1134
+ cart,
1135
+ lineItems
1136
+ }) => {
1094
1137
  return lineItems.map((line) => {
1095
- let itemAttributes = line.attributes || [];
1096
- const functionEnvAttribute = itemAttributes.find((attr) => attr.key === CUSTOMER_ATTRIBUTE_KEY);
1097
- if (!functionEnvAttribute) {
1098
- itemAttributes = itemAttributes.concat([
1099
- {
1100
- key: CUSTOMER_ATTRIBUTE_KEY,
1101
- value: JSON.stringify({
1102
- is_gift: false,
1103
- discounted_amount: line.variant?.finalPrice?.amount === void 0 ? Number(line.variant?.price?.amount) * (line.quantity || 1) : Number(line.variant?.finalPrice?.amount) * (line.quantity || 1)
1104
- })
1105
- }
1106
- ]);
1107
- }
1108
- return { ...line, attributes: itemAttributes };
1138
+ const sameLine = initSameLinesAttributes({ cart, line });
1139
+ const functionLine = initDiscountAttributes({ line: sameLine });
1140
+ return functionLine;
1109
1141
  });
1110
1142
  };
1111
1143
 
@@ -1134,11 +1166,7 @@ function useAddToCart({ withTrack = true } = {}, swrOptions) {
1134
1166
  return;
1135
1167
  }
1136
1168
  performanceAdapter?.addToCartStart();
1137
- const linesWithAttributes = getLinesWithAttributes({
1138
- cart,
1139
- lineItems
1140
- });
1141
- const linesWithFunctionAttributes = getLinesWithFunctionAttributes(linesWithAttributes);
1169
+ const linesWithFunctionAttributes = getLinesWithAttributes({ cart, lineItems });
1142
1170
  const lines = linesWithFunctionAttributes.map((item) => ({
1143
1171
  merchandiseId: item.variant?.id || "",
1144
1172
  quantity: item.quantity || 1,
@@ -1312,13 +1340,15 @@ function useBuyNow({ withTrack = true } = {}, swrOptions) {
1312
1340
  if (!lineItems || lineItems.length === 0) {
1313
1341
  return;
1314
1342
  }
1315
- const linesWithFunctionAttributes = getLinesWithFunctionAttributes(lineItems);
1343
+ const linesWithFunctionAttributes = getLinesWithAttributes({
1344
+ lineItems
1345
+ });
1316
1346
  const lines = linesWithFunctionAttributes.map((item) => ({
1317
1347
  merchandiseId: item.variant?.id || "",
1318
1348
  quantity: item.quantity || 1,
1319
1349
  attributes: item.attributes,
1320
1350
  sellingPlanId: item.sellingPlanId
1321
- })).filter((item) => item.merchandiseId && item.quantity);
1351
+ })).filter((item) => item.merchandiseId);
1322
1352
  if (lines.length === 0) {
1323
1353
  return;
1324
1354
  }
@@ -1373,17 +1403,41 @@ function useCalcGiftsFromLines({
1373
1403
  lines
1374
1404
  });
1375
1405
  const allGiftLines = useMemo(() => {
1376
- const functionGiftLines = functionGift.qualifyingGift?.itemsToAdd || [];
1377
- const scriptGiftLines = scriptGift.freeGiftLevel ? scriptGift.freeGiftLevel.giveawayProducts.map((product) => {
1378
- const giftProduct = scriptGift.giftProductsResult?.find(
1379
- (p) => p.handle === product.handle
1406
+ const functionGiftLines = (functionGift.qualifyingGift?.itemsToAdd || []).map((item) => {
1407
+ const product = functionGift.giftProductsResult?.find(
1408
+ (product2) => product2.handle === item.variant.handle
1380
1409
  );
1381
- const variant = giftProduct?.variants?.[0];
1410
+ const variants = product?.variants;
1411
+ const variant = Array.isArray(variants) ? variants.find((v) => v.sku === item.variant.sku) : void 0;
1412
+ if (!variant) {
1413
+ console.warn(
1414
+ `Function gift: Variant not found for handle=${item.variant.handle}, sku=${item.variant.sku}`
1415
+ );
1416
+ return null;
1417
+ }
1418
+ return {
1419
+ variant: {
1420
+ ...variant,
1421
+ product
1422
+ },
1423
+ quantity: item.quantity ?? 1,
1424
+ attributes: item.attributes
1425
+ };
1426
+ }).filter((item) => item !== null);
1427
+ const scriptGiftLines = scriptGift.freeGiftLevel ? scriptGift.freeGiftLevel.giveawayProducts.map((item) => {
1428
+ const product = scriptGift.giftProductsResult?.find(
1429
+ (product2) => product2.handle === item.handle
1430
+ );
1431
+ const variants = product?.variants;
1432
+ const variant = Array.isArray(variants) ? variants.find((v) => v.sku === item.sku) : void 0;
1433
+ if (!variant) {
1434
+ console.warn(`Script gift: Variant not found for handle=${item.handle}, sku=${item.sku}`);
1435
+ return null;
1436
+ }
1382
1437
  return {
1383
1438
  variant: {
1384
- id: variant?.id || "",
1385
- handle: product.handle,
1386
- sku: product.sku
1439
+ ...variant,
1440
+ product
1387
1441
  },
1388
1442
  quantity: 1,
1389
1443
  attributes: [
@@ -1393,10 +1447,11 @@ function useCalcGiftsFromLines({
1393
1447
  }
1394
1448
  ]
1395
1449
  };
1396
- }).filter((item) => item.variant.id) : [];
1450
+ }).filter((item) => item !== null) : [];
1397
1451
  return [...functionGiftLines, ...scriptGiftLines];
1398
1452
  }, [
1399
1453
  functionGift.qualifyingGift,
1454
+ functionGift.giftProductsResult,
1400
1455
  scriptGift.freeGiftLevel,
1401
1456
  scriptGift.giftProductsResult,
1402
1457
  scriptGiveawayKey
@@ -3511,6 +3566,6 @@ function useCartContext(options) {
3511
3566
  return context;
3512
3567
  }
3513
3568
 
3514
- export { BrowserPerformanceAdapter, 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, browserCartCookieAdapter, browserCookieAdapter, checkAttributesUpdateNeeded, clearGeoLocationCache, createMockCartFromLines, currencyCodeMapping, defaultSWRMutationConfiguration, formatFunctionAutoFreeGift, formatScriptAutoFreeGift, gaTrack, getCachedGeoLocation, getDiscountEnvAttributeValue, getMatchedMainProductSubTotal, getQuery, getReferralAttributes, normalizeAddToCartLines, preCheck, safeParse, trackAddToCartFBQ, trackAddToCartGA, trackBeginCheckoutGA, trackBuyNowFBQ, trackBuyNowGA, useAddCartLines, useAddToCart, useAllBlogs, useAllCollections, useAllProducts, useApplyCartCodes, useArticle, useArticles, useArticlesInBlog, useAutoRemovePlusMemberInCart, useAvailableDeliveryCoupon, useBlog, useBuyNow, useCalcAutoFreeGift, useCalcGiftsFromLines, useCalcOrderDiscount, useCartAttributes, useCartContext, useCartItemQuantityLimit, useCollection, useCollections, useCreateCart, useExposure, useGeoLocation, useHasPlusMemberInCart, useIntersection, usePlusAnnualProductVariant, usePlusMemberCheckoutCustomAttributes, usePlusMemberContext, usePlusMemberDeliveryCodes, usePlusMemberItemCustomAttributes, usePlusMemberNeedAddToCart, usePlusMonthlyProductVariant, usePrice, useProduct, useProductUrl, useProductsByHandles, useRemoveCartCodes, useRemoveCartLines, useReplaceCartPlusMember, useScriptAutoFreeGift, useSearch, useSelectedOptions, useShippingMethodAvailableCheck, useShippingMethods, useShopify, useSite, useUpdateCartAttributes, useUpdateCartLines, useUpdateLineCodeAmountAttributes, useUpdatePlusMemberDeliveryOptions, useUpdateVariantQuery, useVariant, useVariantMedia };
3569
+ export { BrowserPerformanceAdapter, BuyRuleType, CODE_AMOUNT_KEY, CUSTOMER_ATTRIBUTE_KEY, CUSTOMER_SCRIPT_GIFT_KEY, CartProvider, DeliveryPlusType, MAIN_PRODUCT_CODE, MEMBER_PRICE_ATTRIBUTE_KEY, OrderBasePriceType, OrderDiscountType, PLUS_MEMBER_TYPE, PlusMemberContext, PlusMemberMode, PlusMemberProvider, PriceBasePriceType, PriceDiscountType, RuleType, SCRIPT_CODE_AMOUNT_KEY, ShippingMethodMode, ShopifyContext, ShopifyProvider, SpendMoneyType, browserCartCookieAdapter, browserCookieAdapter, checkAttributesUpdateNeeded, clearGeoLocationCache, createMockCartFromLines, currencyCodeMapping, defaultSWRMutationConfiguration, formatFunctionAutoFreeGift, formatScriptAutoFreeGift, gaTrack, getCachedGeoLocation, getDiscountEnvAttributeValue, getMatchedMainProductSubTotal, getQuery, getReferralAttributes, normalizeAddToCartLines, preCheck, safeParse, trackAddToCartFBQ, trackAddToCartGA, trackBeginCheckoutGA, trackBuyNowFBQ, trackBuyNowGA, useAddCartLines, useAddToCart, useAllBlogs, useAllCollections, useAllProducts, useApplyCartCodes, useArticle, useArticles, useArticlesInBlog, useAutoRemovePlusMemberInCart, useAvailableDeliveryCoupon, useBlog, useBuyNow, useCalcAutoFreeGift, useCalcGiftsFromLines, useCalcOrderDiscount, useCartAttributes, useCartContext, useCartItemQuantityLimit, useCollection, useCollections, useCreateCart, useExposure, useGeoLocation, useHasPlusMemberInCart, useIntersection, usePlusAnnualProductVariant, usePlusMemberCheckoutCustomAttributes, usePlusMemberContext, usePlusMemberDeliveryCodes, usePlusMemberItemCustomAttributes, usePlusMemberNeedAddToCart, usePlusMonthlyProductVariant, usePrice, useProduct, useProductUrl, useProductsByHandles, useRemoveCartCodes, useRemoveCartLines, useReplaceCartPlusMember, useScriptAutoFreeGift, useSearch, useSelectedOptions, useShippingMethodAvailableCheck, useShippingMethods, useShopify, useSite, useUpdateCartAttributes, useUpdateCartLines, useUpdateLineCodeAmountAttributes, useUpdatePlusMemberDeliveryOptions, useUpdateVariantQuery, useVariant, useVariantMedia };
3515
3570
  //# sourceMappingURL=index.mjs.map
3516
3571
  //# sourceMappingURL=index.mjs.map