@abra-promotions/webhooks-for-tapcart 2.0.0-beta.0 → 2.0.0-beta.1
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.js → index.cjs} +6 -6
- package/dist/index.cjs.map +1 -0
- package/dist/index.esm.js +5 -5
- package/dist/index.esm.js.map +1 -1
- package/package.json +13 -2
- package/dist/index.js.map +0 -1
|
@@ -1173,13 +1173,13 @@ function useAbra({ React, useTapcart, tapcartData }) {
|
|
|
1173
1173
|
);
|
|
1174
1174
|
|
|
1175
1175
|
const graphqlDefaultBody = React.useCallback(
|
|
1176
|
-
(query, variables,
|
|
1176
|
+
(query, variables, storeFrontAccessToken) => {
|
|
1177
1177
|
return {
|
|
1178
1178
|
async: true,
|
|
1179
1179
|
crossDomain: true,
|
|
1180
1180
|
method: "POST",
|
|
1181
1181
|
headers: {
|
|
1182
|
-
"X-Shopify-Storefront-Access-Token":
|
|
1182
|
+
"X-Shopify-Storefront-Access-Token": storeFrontAccessToken,
|
|
1183
1183
|
"Content-Type": "application/json",
|
|
1184
1184
|
},
|
|
1185
1185
|
body: JSON.stringify({
|
|
@@ -1192,8 +1192,8 @@ function useAbra({ React, useTapcart, tapcartData }) {
|
|
|
1192
1192
|
);
|
|
1193
1193
|
|
|
1194
1194
|
const fetchProducts = React.useCallback(
|
|
1195
|
-
async (ids, storeUrl,
|
|
1196
|
-
if (!storeUrl || !
|
|
1195
|
+
async (ids, storeUrl, storeFrontAccessToken, country) => {
|
|
1196
|
+
if (!storeUrl || !storeFrontAccessToken) {
|
|
1197
1197
|
return { error: "Missing required configuration" };
|
|
1198
1198
|
}
|
|
1199
1199
|
|
|
@@ -1207,7 +1207,7 @@ function useAbra({ React, useTapcart, tapcartData }) {
|
|
|
1207
1207
|
try {
|
|
1208
1208
|
const response = await fetch(
|
|
1209
1209
|
GRAPHQL_URL,
|
|
1210
|
-
graphqlDefaultBody(query, {},
|
|
1210
|
+
graphqlDefaultBody(query, {}, storeFrontAccessToken),
|
|
1211
1211
|
);
|
|
1212
1212
|
|
|
1213
1213
|
if (response?.ok) {
|
|
@@ -1604,4 +1604,4 @@ function useAbra({ React, useTapcart, tapcartData }) {
|
|
|
1604
1604
|
}
|
|
1605
1605
|
|
|
1606
1606
|
exports.useAbra = useAbra;
|
|
1607
|
-
//# sourceMappingURL=index.
|
|
1607
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/discounts.js","../src/useAbra.js"],"sourcesContent":["// Pure discount math for useAbra. Moved verbatim from src/code-for-updating-custom-component.jsx.\n// getIdFromGid and productGidFromId are copied from @tapcart/mobile-components so the package has no imports.\nexport const getIdFromGid = (gid) => {\n if (!gid) return \"\";\n const arr = gid.split(\"/\");\n return arr[arr.length - 1] || \"\";\n};\n\nexport const productGidFromId = (id) => {\n if (!id) return null;\n if (id.startsWith(\"gid://shopify/Product/\")) return id;\n return \"gid://shopify/Product/\" + id;\n};\n\n// BXGY customer-gets: new payloads carry cards on customerGets.productCards,\n// legacy payloads a single {quantity, items} pair at the root.\nexport const getBxgyGetsCards = (customerGets) => {\n if (\n Array.isArray(customerGets?.productCards) &&\n customerGets.productCards.length > 0\n ) {\n return customerGets.productCards;\n }\n if (customerGets?.items != null) {\n return [\n {\n quantity: customerGets.quantity,\n items: customerGets.items,\n purchaseType: customerGets.purchaseType,\n },\n ];\n }\n return [];\n};\n\nexport const getDiscountForProductDiscount = ({\n targetDiscount,\n handle,\n variantId,\n selectedVariant,\n}) => {\n const isProductEntitledForProductDiscount = () => {\n if (targetDiscount.entitled?.all) {\n return true;\n }\n\n if (targetDiscount.entitled?.variants) {\n if (variantId && targetDiscount.entitled.variants.includes(variantId)) {\n return true;\n }\n }\n\n if (targetDiscount.entitled?.products) {\n if (handle && targetDiscount.entitled.products.includes(handle)) {\n return true;\n }\n }\n return false;\n };\n if (!isProductEntitledForProductDiscount()) return 0;\n\n if (targetDiscount.discountValue?.type === \"DiscountAmount\") {\n return targetDiscount.discountValue.discountAmount.cents / 100;\n } else if (targetDiscount.discountValue?.type === \"DiscountPercentage\") {\n return (\n parseFloat(selectedVariant.price.amount) *\n targetDiscount.discountValue.percentage\n );\n }\n};\n\nexport const getDiscountForMultiValueCollection = ({\n targetDiscount,\n handle,\n selectedVariant,\n}) => {\n if (\n !targetDiscount?.discountValue?.productDiscounts ||\n targetDiscount.discountValue.productDiscounts.length === 0\n )\n return 0;\n\n const entitledProductDiscounts =\n targetDiscount.discountValue.productDiscounts.filter((discount) =>\n (discount.products ?? []).includes(handle),\n ) || [];\n\n return entitledProductDiscounts.reduce((max, discountValue) => {\n let discountAmount = 0;\n\n if (discountValue.value.type === \"DiscountAmount\") {\n discountAmount = discountValue.value.discountAmount.cents / 100;\n } else if (discountValue.value.type === \"DiscountPercentage\") {\n discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (discountValue.value.percentage / 100);\n }\n\n return Math.max(max, discountAmount);\n }, 0);\n};\n\nexport const getDiscountForMultiValueProduct = ({\n targetDiscount,\n variantId,\n selectedVariant,\n}) => {\n if (!variantId) return 0;\n if (\n !targetDiscount?.discountValue?.variantDiscounts ||\n targetDiscount?.discountValue?.variantDiscounts.length === 0\n )\n return 0;\n\n const entitledVariantDiscounts =\n targetDiscount.discountValue.variantDiscounts.filter((discount) =>\n (discount.variants ?? []).includes(variantId),\n ) ?? [];\n\n return entitledVariantDiscounts.reduce((max, discountValue) => {\n let discountAmount = 0;\n\n if (discountValue.value.type === \"DiscountAmount\") {\n discountAmount = discountValue.value.discountAmount.cents / 100;\n } else if (discountValue.value.type === \"DiscountPercentage\") {\n discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (discountValue.value.percentage / 100);\n }\n\n return Math.max(max, discountAmount);\n }, 0);\n};\n\nexport const getDiscountForTierDiscount = ({\n targetDiscount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n}) => {\n if (!targetDiscount.discountValue?.tiers) return 0;\n if (targetDiscount.discountValue?.tiersType === \"FREE_GIFT\") return 0;\n\n const currentCollectionHandle = product.sourceCollection?.handle;\n const isProductEntitledToTierDiscount = () => {\n if (targetDiscount.discountValue?.entitled?.all) {\n return true;\n }\n\n if (targetDiscount.discountValue?.entitled?.collections) {\n if (\n currentCollectionHandle &&\n targetDiscount.discountValue?.entitled?.collections.includes(\n currentCollectionHandle,\n )\n ) {\n return true;\n }\n }\n\n if (targetDiscount.discountValue?.entitled?.products) {\n if (\n handle &&\n targetDiscount.discountValue?.entitled?.products.includes(handle)\n ) {\n return true;\n }\n }\n\n if (targetDiscount.discountValue?.entitled?.variants) {\n if (\n variantId &&\n targetDiscount.discountValue?.entitled?.variants.includes(variantId)\n ) {\n return true;\n }\n }\n\n return false;\n };\n if (!isProductEntitledToTierDiscount()) return 0;\n\n const getBiggestEligibleTier = () => {\n const isItemEligibleWithSelectedPurchaseType = (item, discount) => {\n if (\n discount.appliesOnSubscription &&\n !discount.appliesOnOneTimePurchase\n ) {\n return Boolean(item.sellingPlanAllocation);\n } else if (\n !discount.appliesOnSubscription &&\n discount.appliesOnOneTimePurchase\n ) {\n return !item.sellingPlanAllocation;\n } else {\n return true;\n }\n };\n const isCartItemEntitledToGiveDiscount = (item) => {\n if (!targetDiscount || !targetDiscount.entitled) {\n return false;\n }\n\n if (targetDiscount.entitled.all) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n\n if (targetDiscount.entitled.variants) {\n if (\n targetDiscount.entitled.variants?.includes(\n item.variantId.toString(),\n )\n ) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n if (targetDiscount.entitled.products) {\n if (targetDiscount.entitled.products?.includes(item.handle)) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n return false;\n };\n\n const getEntitledQuantityAndTotal = () => {\n const entitledItems = (cart?.items || []).filter((item) => {\n return isCartItemEntitledToGiveDiscount(item);\n });\n\n const { entitledQuantity, entitledTotal } = entitledItems.reduce(\n (acc, item) => {\n acc.entitledQuantity += item.quantity;\n acc.entitledTotal +=\n parseFloat((item.price?.amount ?? 0) * 100) * item.quantity;\n\n return acc;\n },\n { entitledQuantity: 0, entitledTotal: 0 },\n );\n\n return { entitledQuantity, entitledTotal };\n };\n\n const isPrerequisiteValid = (prerequisite, quantity, subtotal) => {\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToQuantity) {\n if (\n Number(quantity) <\n Number(prerequisite.minimumRequirement.greaterThanOrEqualToQuantity)\n ) {\n return false;\n }\n }\n\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToSubtotal) {\n if (\n subtotal <\n prerequisite.minimumRequirement.greaterThanOrEqualToSubtotal.cents\n ) {\n return false;\n }\n }\n\n return true;\n };\n\n const { entitledQuantity, entitledTotal } = getEntitledQuantityAndTotal();\n\n let currentBiggestTierIndex = -1;\n for (let i = 0; i < targetDiscount.discountValue?.tiers?.length; i++) {\n const currentTier = targetDiscount.discountValue.tiers[i];\n if (\n isPrerequisiteValid(\n currentTier.prerequisite,\n entitledQuantity,\n entitledTotal,\n )\n ) {\n currentBiggestTierIndex = i;\n } else {\n break;\n }\n }\n return currentBiggestTierIndex;\n };\n const biggestEligibleTierIndex = getBiggestEligibleTier();\n\n if (biggestEligibleTierIndex < 0) return 0;\n\n const biggestEligibleTier =\n targetDiscount.discountValue.tiers[biggestEligibleTierIndex];\n if (!biggestEligibleTier || !biggestEligibleTier.value) return 0;\n\n if (\n biggestEligibleTier.value.type === \"DiscountPercentage\" &&\n biggestEligibleTier.value.percentage\n ) {\n const discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (biggestEligibleTier.value.percentage / 100);\n\n return discountAmount;\n }\n};\n\nexport const getDiscountForVolumeDiscount = ({\n targetDiscount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n}) => {\n if (!targetDiscount.discountValue?.tiers) return 0;\n if (targetDiscount.discountValue?.tiersType === \"FREE_GIFT\") return 0;\n\n // customer-gets purchaseType gates the displayed price; per-variant mode\n // (ELIGIBLE_VARIANTS) ignores it\n const customerGets = targetDiscount.discountValue?.customerGets;\n const getsAppliesTo = customerGets?.appliesTo || \"ELIGIBLE_VARIANTS\";\n const getsPurchaseType =\n getsAppliesTo !== \"ELIGIBLE_VARIANTS\"\n ? customerGets?.purchaseType\n : undefined;\n const selectedHasSellingPlan = Boolean(\n selectedVariant?.sellingPlanAllocation,\n );\n if (getsPurchaseType === \"SUBSCRIPTION\" && !selectedHasSellingPlan)\n return 0;\n if (getsPurchaseType === \"ONE_TIME\" && selectedHasSellingPlan) return 0;\n\n const currentCollectionHandle = product.sourceCollection?.handle;\n const isProductEntitledToVolumeDiscount = () => {\n if (targetDiscount.discountValue?.entitled?.all) {\n return true;\n }\n\n if (targetDiscount.discountValue?.entitled?.collections) {\n if (\n currentCollectionHandle &&\n targetDiscount.discountValue?.entitled?.collections.includes(\n currentCollectionHandle,\n )\n ) {\n return true;\n }\n }\n\n if (targetDiscount?.entitled?.products) {\n if (handle && targetDiscount?.entitled?.products.includes(handle)) {\n return true;\n }\n }\n\n if (targetDiscount?.entitled?.variants) {\n if (\n variantId &&\n targetDiscount?.entitled?.variants.includes(variantId)\n ) {\n return true;\n }\n }\n\n return false;\n };\n if (!isProductEntitledToVolumeDiscount()) return 0;\n\n const getBiggestEligibleTier = () => {\n const isItemEligibleWithSelectedPurchaseType = (item, discount) => {\n if (\n discount.appliesOnSubscription &&\n !discount.appliesOnOneTimePurchase\n ) {\n return Boolean(item.sellingPlanAllocation);\n } else if (\n !discount.appliesOnSubscription &&\n discount.appliesOnOneTimePurchase\n ) {\n return !item.sellingPlanAllocation;\n } else {\n return true;\n }\n };\n const isCartItemEntitledToGiveDiscount = (item) => {\n if (!targetDiscount || !targetDiscount.entitled) {\n return false;\n }\n\n if (targetDiscount.entitled.all) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n\n if (targetDiscount.entitled.variants) {\n if (\n targetDiscount.entitled.variants?.includes(\n item.variantId.toString(),\n )\n ) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n if (targetDiscount.entitled.products) {\n if (targetDiscount.entitled.products?.includes(item.handle)) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n return false;\n };\n\n const getEntitledQuantityAndTotal = () => {\n const entitledItems = (cart?.items || []).filter((item) => {\n return isCartItemEntitledToGiveDiscount(item);\n });\n\n const { entitledQuantity, entitledTotal } = entitledItems.reduce(\n (acc, item) => {\n acc.entitledQuantity += item.quantity;\n acc.entitledTotal +=\n parseFloat((item.price?.amount ?? 0) * 100) * item.quantity;\n\n return acc;\n },\n { entitledQuantity: 0, entitledTotal: 0 },\n );\n\n return { entitledQuantity, entitledTotal };\n };\n\n const isPrerequisiteValid = (prerequisite, quantity, subtotal) => {\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToQuantity) {\n if (\n Number(quantity) <\n Number(prerequisite.minimumRequirement.greaterThanOrEqualToQuantity)\n ) {\n return false;\n }\n }\n\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToSubtotal) {\n if (\n subtotal <\n prerequisite.minimumRequirement.greaterThanOrEqualToSubtotal.cents\n ) {\n return false;\n }\n }\n\n return true;\n };\n\n const { entitledQuantity, entitledTotal } = getEntitledQuantityAndTotal();\n\n let currentBiggestTierIndex = -1;\n for (let i = 0; i < targetDiscount.discountValue?.tiers?.length; i++) {\n const currentTier = targetDiscount.discountValue.tiers[i];\n if (\n isPrerequisiteValid(\n currentTier.prerequisite,\n entitledQuantity,\n entitledTotal,\n )\n ) {\n currentBiggestTierIndex = i;\n } else {\n break;\n }\n }\n return currentBiggestTierIndex;\n };\n const biggestEligibleTierIndex = getBiggestEligibleTier();\n\n if (biggestEligibleTierIndex < 0) return 0;\n\n const biggestEligibleTier =\n targetDiscount.discountValue.tiers[biggestEligibleTierIndex];\n if (!biggestEligibleTier || !biggestEligibleTier.value) return 0;\n\n if (\n biggestEligibleTier.value.type === \"DiscountPercentage\" &&\n biggestEligibleTier.value.percentage\n ) {\n const discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (biggestEligibleTier.value.percentage / 100);\n\n return discountAmount;\n }\n};\n\nexport const getDiscountForMultiEffectTiers = ({\n targetDiscount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n log,\n}) => {\n const isProductEntitledToDiscount = (discount) => {\n if (discount.entitled?.all) {\n return true;\n }\n\n if (discount.entitled?.collections) {\n if (\n currentCollectionHandle &&\n discount.entitled?.collections.includes(currentCollectionHandle)\n ) {\n return true;\n }\n }\n\n if (discount.entitled?.products) {\n if (handle && discount.entitled?.products.includes(handle)) {\n return true;\n }\n }\n\n if (discount.entitled?.variants) {\n if (variantId && discount.entitled?.variants.includes(variantId)) {\n return true;\n }\n }\n\n return false;\n };\n const getBiggestEligibleTier = () => {\n const isItemEligibleWithSelectedPurchaseType = (item, discount) => {\n if (\n discount.appliesOnSubscription &&\n !discount.appliesOnOneTimePurchase\n ) {\n return Boolean(item.sellingPlanAllocation);\n } else if (\n !discount.appliesOnSubscription &&\n discount.appliesOnOneTimePurchase\n ) {\n return !item.sellingPlanAllocation;\n } else {\n return true;\n }\n };\n const isCartItemEntitledToGiveDiscount = (item) => {\n if (!targetDiscount || !targetDiscount.entitled) {\n return false;\n }\n\n if (targetDiscount.entitled.all) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n\n if (targetDiscount.entitled.variants) {\n if (\n targetDiscount.entitled.variants?.includes(\n item.variantId.toString(),\n )\n ) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n if (targetDiscount.entitled.products) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n\n return false;\n };\n\n const getEntitledQuantityAndTotal = () => {\n const entitledItems = (cart?.items || []).filter((item) => {\n return isCartItemEntitledToGiveDiscount(item);\n });\n\n const { entitledQuantity, entitledTotal } = entitledItems.reduce(\n (acc, item) => {\n acc.entitledQuantity += item.quantity;\n acc.entitledTotal +=\n parseFloat((item.price?.amount ?? 0) * 100) * item.quantity;\n\n return acc;\n },\n { entitledQuantity: 0, entitledTotal: 0 },\n );\n\n return { entitledQuantity, entitledTotal };\n };\n\n const isPrerequisiteValid = (prerequisite, quantity, subtotal) => {\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToQuantity) {\n if (\n Number(quantity) <\n Number(prerequisite.minimumRequirement.greaterThanOrEqualToQuantity)\n ) {\n return false;\n }\n }\n\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToSubtotal) {\n if (\n subtotal <\n prerequisite.minimumRequirement.greaterThanOrEqualToSubtotal.cents\n ) {\n return false;\n }\n }\n\n return true;\n };\n\n log(\"getEntitledQuantityAndTotal\");\n const { entitledQuantity, entitledTotal } = getEntitledQuantityAndTotal();\n\n log(\"getEntitledQuantityAndTotal\", { entitledQuantity, entitledTotal });\n\n let currentBiggestTierIndex = -1;\n for (let i = 0; i < targetDiscount.discountValue?.tiers?.length; i++) {\n const currentTier = targetDiscount.discountValue.tiers[i];\n if (\n isPrerequisiteValid(\n currentTier.prerequisite,\n entitledQuantity,\n entitledTotal,\n )\n ) {\n currentBiggestTierIndex = i;\n } else {\n break;\n }\n }\n return currentBiggestTierIndex;\n };\n\n if (\n !targetDiscount.discountValue?.tiers ||\n targetDiscount.discountValue?.tiers.length === 0\n )\n return 0;\n\n log(\"getBiggestEligibleTier\");\n const currentCollectionHandle = product?.sourceCollection?.handle;\n const biggestEligibleTierIndex = getBiggestEligibleTier();\n log(\"getBiggestEligibleTier\", { biggestEligibleTierIndex });\n\n if (biggestEligibleTierIndex < 0) return 0;\n\n const productDiscountsAvailableOnTier =\n targetDiscount.discountValue.tiers\n .slice(0, biggestEligibleTierIndex + 1)\n ?.filter((tier) =>\n tier.discounts.some(\n (discount) => discount.type === \"ProductDiscount\",\n ),\n )\n ?.flatMap(\n (tier) =>\n tier.discounts.find(\n (discount) => discount.type === \"ProductDiscount\",\n )?.value ?? [],\n ) ?? [];\n\n // Per-entry purchaseType replaces the promotion-level flags: an entry only\n // affects the price branch matching the selected purchase state.\n const selectedHasSellingPlan = Boolean(\n selectedVariant?.sellingPlanAllocation,\n );\n const eligibleProductDiscounts = productDiscountsAvailableOnTier.filter(\n (discount) => {\n if (discount.purchaseType === \"SUBSCRIPTION\" && !selectedHasSellingPlan)\n return false;\n if (discount.purchaseType === \"ONE_TIME\" && selectedHasSellingPlan)\n return false;\n return isProductEntitledToDiscount(discount);\n },\n );\n\n const maxDiscountAmount = eligibleProductDiscounts.reduce(\n (max, discount) => {\n let discountAmount = 0;\n if (discount.value.type === \"DiscountAmount\") {\n discountAmount = parseFloat(discount.value.discountAmount.amount);\n } else if (discount.value.type === \"DiscountPercentage\") {\n discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (discount.value.percentage / 100);\n }\n return Math.max(max, discountAmount);\n },\n 0,\n );\n return maxDiscountAmount;\n};\n\nexport const isProductMatchingBxgyCardItems = (handle, variantId, items) => {\n if (!items) return false;\n if (items.type === \"AllProducts\") return true;\n\n if (items.type === \"SpecificProducts\" && items.products) {\n for (const product of items.products) {\n if (product.handle === handle) {\n if (!product.variants || product.variants.length === 0) return true;\n for (const variant of product.variants) {\n const vId = variant.id?.includes(\"/\")\n ? variant.id.split(\"/\").pop()\n : variant.id;\n if (vId === variantId || variant.id === variantId) return true;\n }\n }\n }\n }\n\n if (items.type === \"SpecificCollections\" && items.collections) {\n for (const collection of items.collections) {\n if (collection.products?.includes(handle)) return true;\n }\n }\n\n return false;\n};\n\nexport const isCartItemMatchingBxgyCard = (item, card) => {\n const items = card.items;\n if (items.type === \"AllProducts\") return true;\n\n if (items.type === \"SpecificProducts\" && items.products) {\n const itemVariantId = item.variantId?.toString();\n for (const product of items.products) {\n if (product.variants && product.variants.length > 0) {\n for (const variant of product.variants) {\n const vId = variant.id?.includes(\"/\")\n ? variant.id.split(\"/\").pop()\n : variant.id;\n if (vId === itemVariantId || variant.id === itemVariantId)\n return true;\n }\n }\n if (item.handle && product.handle === item.handle) return true;\n }\n }\n\n if (items.type === \"SpecificCollections\" && items.collections) {\n for (const collection of items.collections) {\n if (item.handle && collection.products?.includes(item.handle))\n return true;\n }\n }\n\n return false;\n};\n\nexport const areAllBxgyProductCardsMet = (cart, bxgy) => {\n if (!bxgy?.productCards?.length || !cart?.items) return false;\n\n const globalRequirementType = bxgy.requirementType ?? \"QUANTITY\";\n\n for (const card of bxgy.productCards) {\n const requirementType = card.requirementType ?? globalRequirementType;\n let totalQuantity = 0;\n let totalSubtotal = 0;\n\n for (const item of cart.items) {\n if (isCartItemMatchingBxgyCard(item, card)) {\n // Check purchaseType on the card against the cart item\n const itemHasSellingPlan = Boolean(item.sellingPlanAllocation);\n if (card.purchaseType === \"SUBSCRIPTION\" && !itemHasSellingPlan) {\n continue;\n }\n if (card.purchaseType === \"ONE_TIME\" && itemHasSellingPlan) {\n continue;\n }\n\n totalQuantity += item.quantity || 0;\n totalSubtotal +=\n parseFloat(item.price?.amount || 0) * 100 * (item.quantity || 0);\n }\n }\n\n if (requirementType === \"SUBTOTAL\") {\n const required = card.minimumSubtotal?.cents || 0;\n if (required > 0 && totalSubtotal < required) return false;\n } else {\n const required = card.quantity || 0;\n if (required > 0 && totalQuantity < required) return false;\n }\n }\n\n return true;\n};\n\nexport const getDiscountForBxgyDiscount = ({\n targetDiscount,\n handle,\n variantId,\n selectedVariant,\n cart,\n}) => {\n const bxgy = targetDiscount.discountValue;\n if (!bxgy?.productCards || !bxgy?.customerGets) return 0;\n\n const customerGetsValueType = bxgy.customerGets.value?.type;\n\n if (\n customerGetsValueType === \"Gift\" ||\n customerGetsValueType === \"FixedPrice\"\n ) {\n return 0;\n }\n\n // Gets-card purchaseType gates the displayed price against the selected\n // purchase state (new payloads carry gets cards; legacy has plain items).\n const getsCards = getBxgyGetsCards(bxgy.customerGets);\n const selectedHasSellingPlan = Boolean(\n selectedVariant?.sellingPlanAllocation,\n );\n const matchesGetsPurchaseType = (card) => {\n if (card.purchaseType === \"SUBSCRIPTION\" && !selectedHasSellingPlan)\n return false;\n if (card.purchaseType === \"ONE_TIME\" && selectedHasSellingPlan)\n return false;\n return true;\n };\n\n const isEntitledToReceive = () => {\n if (bxgy.customerGets.applyToProductCardItems) {\n return bxgy.productCards.some((card) =>\n isProductMatchingBxgyCardItems(handle, variantId, card.items),\n );\n }\n return getsCards.some(\n (card) =>\n matchesGetsPurchaseType(card) &&\n isProductMatchingBxgyCardItems(handle, variantId, card.items),\n );\n };\n\n if (!isEntitledToReceive()) return 0;\n\n // Check if this product matches a productCard with purchase type requirement\n // Look up the actual cart item to check if it has a subscription selected\n const matchingCartItem = (cart?.items || []).find(\n (item) => item.variantId?.toString() === variantId?.toString() || item.handle === handle\n );\n const cartItemHasSellingPlan = Boolean(matchingCartItem?.sellingPlanAllocation);\n\n for (const card of bxgy.productCards) {\n if (isProductMatchingBxgyCardItems(handle, variantId, card.items)) {\n if (card.purchaseType === \"SUBSCRIPTION\" && !cartItemHasSellingPlan) {\n return 0;\n } else if (card.purchaseType === \"ONE_TIME\" && cartItemHasSellingPlan) {\n return 0;\n }\n }\n }\n\n\n if (!areAllBxgyProductCardsMet(cart, bxgy)) return 0;\n\n const originalPrice = parseFloat(selectedVariant?.price?.amount || 0);\n if (originalPrice <= 0) return 0;\n\n if (customerGetsValueType === \"DiscountPercentage\") {\n const percentage = bxgy.customerGets.value.percentage || 0;\n return originalPrice * (percentage / 100);\n } else if (customerGetsValueType === \"DiscountAmount\") {\n const cents = bxgy.customerGets.value.discountAmount?.cents || 0;\n return Math.min(cents / 100, originalPrice);\n }\n\n return 0;\n};\n\nexport const getDiscountValueForDiscount = ({\n product,\n selectedVariant,\n cart,\n discount,\n log,\n}) => {\n const handle = product?.handle;\n const variantId = getIdFromGid(selectedVariant?.id);\n\n if (!handle || !discount) return 0;\n\n if (discount.discountValue?.type === \"DiscountCodeBxgy\") {\n return 0;\n }\n\n if (discount.discountValue?.type === \"Gift\") {\n return 0;\n }\n\n if (discount.discountValue?.type === \"BxgyDiscount\") {\n return getDiscountForBxgyDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n selectedVariant,\n cart,\n });\n }\n\n if (discount.discountValue?.type === \"DiscountMultiValueProduct\") {\n return getDiscountForMultiValueProduct({\n targetDiscount: discount,\n variantId,\n selectedVariant,\n });\n }\n\n if (discount.discountValue?.type === \"DiscountMultiValueCollection\") {\n return getDiscountForMultiValueCollection({\n targetDiscount: discount,\n handle,\n selectedVariant,\n });\n }\n\n if (discount.discountValue?.type === \"TieredDiscount\") {\n return getDiscountForTierDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n });\n }\n\n if (discount.discountValue?.type === \"VolumeDiscount\") {\n return getDiscountForVolumeDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n });\n }\n\n if (discount.discountValue?.type === \"CollectionOrderDiscount\") {\n return 0;\n }\n\n if (discount.discountValue?.type === \"MultiEffectTiers\") {\n log(\"getDiscountForMultiEffectTiers\");\n return getDiscountForMultiEffectTiers({\n targetDiscount: discount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n log,\n });\n }\n\n if (discount.discountValue?.type === \"ProductDiscount\") {\n return getDiscountForProductDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n selectedVariant,\n });\n }\n\n if (discount.discountClass === \"ORDER\") {\n return 0;\n }\n if (discount.discountClass === \"SHIPPING\") {\n return 0;\n }\n\n if (discount.discountClass === \"PRODUCT\") {\n return getDiscountForProductDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n selectedVariant,\n });\n }\n\n return 0;\n};\n\nexport const getBiggestDiscount = ({\n activePromotion,\n product,\n selectedVariant,\n cart,\n log,\n}) => {\n const discounts = Object.values(activePromotion?.discounts ?? []);\n log(\"Calculating biggest discount\", {\n discountCount: discounts.length,\n productId: product?.handle,\n collectionId: product?.sourceCollection?.handle,\n variantId: selectedVariant?.id,\n hasSellingPlan: !!selectedVariant?.sellingPlanAllocation,\n });\n\n const biggestDiscount = discounts.reduce((max, discount) => {\n const hasSellingPlan = Boolean(selectedVariant?.sellingPlanAllocation);\n\n // For BXGY discounts, purchase type is checked PER CARD (card.purchaseType),\n // not at the top level. Skip top-level appliesOnSubscription/appliesOnOneTimePurchase.\n // For other discount types, still use the top-level flags — unless a\n // customer-gets purchaseType overrides them (checked per discount type below).\n if (discount.discountValue?.type !== \"BxgyDiscount\") {\n let appliesOnSubscription = discount.appliesOnSubscription;\n let appliesOnOneTimePurchase = discount.appliesOnOneTimePurchase;\n\n if (discount.discountValue?.type === \"VolumeDiscount\") {\n const customerGets = discount.discountValue.customerGets;\n const getsAppliesTo = customerGets?.appliesTo || \"ELIGIBLE_VARIANTS\";\n const getsPurchaseType =\n getsAppliesTo !== \"ELIGIBLE_VARIANTS\"\n ? customerGets?.purchaseType\n : undefined;\n if (getsPurchaseType) {\n appliesOnSubscription = getsPurchaseType !== \"ONE_TIME\";\n appliesOnOneTimePurchase = getsPurchaseType !== \"SUBSCRIPTION\";\n }\n }\n\n if (discount.discountValue?.type === \"MultiEffectTiers\") {\n // Entries with their own purchaseType filter themselves in\n // getDiscountForMultiEffectTiers; don't gate the whole discount here.\n const hasPerEntryPurchaseType = (\n discount.discountValue.tiers ?? []\n ).some((tier) =>\n (tier.discounts ?? []).some(\n (tierDiscount) =>\n tierDiscount.type === \"ProductDiscount\" &&\n (Array.isArray(tierDiscount.value)\n ? tierDiscount.value\n : []\n ).some((entry) => entry.purchaseType),\n ),\n );\n if (hasPerEntryPurchaseType) {\n appliesOnSubscription = true;\n appliesOnOneTimePurchase = true;\n }\n }\n\n if (appliesOnSubscription && !appliesOnOneTimePurchase) {\n if (!hasSellingPlan) {\n log(\"Skipping subscription-only discount (no subscription selected)\", {\n discountType: discount.discountValue?.type,\n });\n return max;\n }\n }\n\n if (!appliesOnSubscription && appliesOnOneTimePurchase) {\n if (hasSellingPlan) {\n log(\"Skipping one-time-only discount (subscription selected)\", {\n discountType: discount.discountValue?.type,\n });\n return max;\n }\n }\n }\n\n const discountValue = getDiscountValueForDiscount({\n product,\n selectedVariant,\n cart,\n discount,\n log,\n });\n log(\"Discount calculated\", {\n discountType: discount.discountValue?.type,\n discountValue,\n maxSoFar: max,\n appliesOnSubscription: discount.appliesOnSubscription,\n appliesOnOneTimePurchase: discount.appliesOnOneTimePurchase,\n hasSellingPlan,\n });\n return Math.max(max, discountValue);\n }, 0);\n\n log(\"Final biggest discount\", { biggestDiscount });\n return biggestDiscount;\n};\n\nexport const parsePromotionIfActive = (promotionObject, now = new Date()) => {\n try {\n // Handle both object and string cases for backward compatibility\n const promotion =\n typeof promotionObject === \"string\"\n ? JSON.parse(promotionObject ?? \"{}\")\n : promotionObject;\n\n if (!promotion.startsAt || !promotion.status || !promotion.title)\n return undefined;\n const startsAt = new Date(promotion.startsAt);\n const endsAt = promotion.endsAt ? new Date(promotion.endsAt) : null;\n\n if (\n (promotion.status === \"ACTIVE\" || promotion.status === \"SCHEDULED\") &&\n now >= startsAt &&\n (!endsAt || now <= endsAt)\n ) {\n return promotion;\n }\n\n return undefined;\n } catch (error) {\n console.error(\"Failed to parse promotion:\", error);\n return undefined;\n }\n};\n","import {\n getBiggestDiscount,\n parsePromotionIfActive,\n getIdFromGid,\n productGidFromId,\n} from \"./discounts.js\";\n\nexport default function useAbra({ React, useTapcart, tapcartData }) {\n const Tapcart = useTapcart();\n const [activePromotion, setActivePromotion] = React.useState(undefined);\n const renderCountRef = React.useRef(0);\n const logRef = React.useRef([]);\n const variables = Tapcart?.variables;\n const { storeFrontAccessToken, storeUrl } =\n tapcartData?.integrations?.find((x) => x.name === \"abra-promotions\") ?? {};\n\n // Stable GraphQL fragment and functions\n const PRODUCT_FRAGMENT = React.useMemo(\n () => `\n id\n handle\n variants(first: 100) {\n edges {\n node {\n id\n handle: title\n price {\n amount\n currencyCode\n }\n }\n }\n }\n `,\n [],\n );\n\n const generateProductsQuery = React.useCallback(\n (ids, country) => {\n const productQueries = ids\n .map(\n (id, index) =>\n `product_${index}: product(id: \"${productGidFromId(id)}\") {\n ${PRODUCT_FRAGMENT}\n }`,\n )\n .join(\"\\n \");\n\n const inContextDirective = country\n ? `@inContext(country: ${country})`\n : \"\";\n\n return `\n query Products ${inContextDirective} {\n ${productQueries}\n }\n `;\n },\n [PRODUCT_FRAGMENT],\n );\n\n const graphqlDefaultBody = React.useCallback(\n (query, variables, storeFrontAccessToken) => {\n return {\n async: true,\n crossDomain: true,\n method: \"POST\",\n headers: {\n \"X-Shopify-Storefront-Access-Token\": storeFrontAccessToken,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n query,\n variables,\n }),\n };\n },\n [],\n );\n\n const fetchProducts = React.useCallback(\n async (ids, storeUrl, storeFrontAccessToken, country) => {\n if (!storeUrl || !storeFrontAccessToken) {\n return { error: \"Missing required configuration\" };\n }\n\n if (!ids || ids.length === 0) {\n return { data: [], error: \"No ids\" };\n }\n\n const GRAPHQL_URL = `https://${storeUrl}/api/2024-04/graphql.json`;\n const query = generateProductsQuery(ids, country);\n\n try {\n const response = await fetch(\n GRAPHQL_URL,\n graphqlDefaultBody(query, {}, storeFrontAccessToken),\n );\n\n if (response?.ok) {\n const responseBody = await response.json();\n const data = responseBody?.data;\n\n if (!data) {\n return { data: [], error: \"No data\" };\n }\n\n const products = Object.values(data).filter((item) => item !== null);\n\n return {\n data: products,\n error: null,\n };\n }\n\n const error = await response.text();\n return { data: [], error: error };\n } catch (err) {\n return { data: [], error: err.message };\n }\n },\n [generateProductsQuery, graphqlDefaultBody],\n );\n\n const useProductsCustom = React.useCallback(\n ({ ids, storeUrl, storeFrontAccessToken, country }) => {\n const [products, setProducts] = React.useState([]);\n const [loading, setLoading] = React.useState(true);\n const [error, setError] = React.useState(null);\n\n // Memoize ids to prevent infinite loops\n const idsString = React.useMemo(() => {\n if (!ids || !Array.isArray(ids) || ids.length === 0) return \"\";\n return [...ids].sort().join(\",\");\n }, [ids ? JSON.stringify([...ids].sort()) : \"\"]);\n\n React.useEffect(() => {\n const fetchData = async () => {\n if (!storeUrl || !storeFrontAccessToken) {\n if (!storeUrl) {\n setError(\"no store url\");\n }\n if (!storeFrontAccessToken) {\n setError(\"no store front access token\");\n }\n setProducts([]);\n setLoading(false);\n return;\n }\n\n if (!ids || ids.length === 0) {\n setProducts([]);\n setLoading(false);\n return;\n }\n\n const result = await fetchProducts(\n ids,\n storeUrl,\n storeFrontAccessToken,\n country,\n );\n\n try {\n if (result.data && result.data.length > 0) {\n const formattedProducts = result?.data?.map((product) => ({\n id: getIdFromGid(product.id),\n handle: product?.handle,\n variants: product?.variants?.edges?.map((variant) => ({\n id: getIdFromGid(variant?.node?.id),\n handle: variant?.node?.handle,\n price: variant?.node?.price,\n })),\n }));\n setProducts(formattedProducts);\n setError(result.error);\n } else {\n setProducts([]);\n setError(result.error);\n }\n } catch (error) {\n setError(error.message);\n }\n\n setLoading(false);\n };\n\n fetchData();\n }, [idsString, storeUrl, storeFrontAccessToken, country, fetchProducts]);\n\n return { products, loading, error };\n },\n [fetchProducts],\n );\n\n // Stable logging function that doesn't cause re-renders\n const log = React.useCallback((message, data = null) => {\n const timestamp = new Date().toISOString();\n const logEntry = {\n timestamp,\n message,\n data: data ? JSON.parse(JSON.stringify(data)) : null,\n renderCount: renderCountRef.current,\n };\n logRef.current.push(logEntry);\n\n // Keep only last 50 logs to prevent memory issues\n if (logRef.current.length > 100) {\n logRef.current = logRef.current.slice(-100);\n }\n }, []);\n\n // Create stable cart items reference to prevent infinite recreations\n const stableCartItems = React.useMemo(() => {\n const currentCartItems = variables?.cart?.items ?? [];\n\n if (!currentCartItems || currentCartItems.length === 0) {\n return [];\n }\n\n const mappedItems = currentCartItems.map((item) => ({\n productId: item.productId,\n variantId: item.variantId,\n quantity: item.quantity,\n sellingPlanAllocation: item.sellingPlanAllocation,\n }));\n\n return mappedItems;\n }, [\n (variables?.cart?.items || [])\n ?.map((item) => `${item.productId}-${item.variantId}-${item.quantity}`)\n ?.join(\",\"),\n ]);\n\n const ids = React.useMemo(\n () => (stableCartItems ?? []).map((item) => item.productId),\n [stableCartItems],\n );\n\n // Get country from cart currency or tapcartData\n const country = React.useMemo(() => {\n return (\n Tapcart?.variables?.cart?.currency?.slice(0, 2) || tapcartData?.country\n );\n }, [Tapcart?.variables?.cart?.currency, tapcartData?.country]);\n\n const {\n products: cartItems,\n loading: cartItemsLoading,\n error: cartItemsError,\n } = useProductsCustom({\n ids,\n storeUrl: storeUrl,\n storeFrontAccessToken: storeFrontAccessToken,\n country: country,\n });\n\n // Render limiter to prevent infinite recreations\n renderCountRef.current += 1;\n\n // Create stable cart reference to prevent infinite recreations\n const stableCart = React.useMemo(() => {\n if (!variables?.cart) {\n return null;\n }\n if (cartItemsLoading || cartItemsError) {\n return variables.cart;\n }\n\n if (!cartItems || cartItems.length === 0) {\n return variables.cart;\n }\n\n const processedItems = (stableCartItems || []).map((item) => {\n const _cartItem = cartItems?.find(\n (cartItem) => getIdFromGid(cartItem?.id) === item.productId,\n );\n if (!_cartItem) {\n return item;\n }\n const _variant = _cartItem?.variants?.find(\n (variant) => getIdFromGid(variant?.id) === item?.variantId,\n );\n if (!_variant) {\n return item;\n }\n\n const processedItem = {\n ...item,\n handle: _cartItem?.handle,\n price: _variant?.price,\n };\n\n return processedItem;\n });\n\n const result = {\n ...variables.cart,\n items: processedItems,\n };\n\n return result;\n }, [\n cartItems,\n cartItemsLoading,\n cartItemsError,\n (variables?.cart?.items || [])\n ?.map((item) => `${item.variantId}-${item.quantity}`)\n ?.join(\",\"),\n ]);\n\n // Effect: Initialize from storage and observe changes\n React.useEffect(() => {\n const storage = Tapcart?.variables?.storage || {};\n const abraData = storage[\"abra\"] || {};\n const storedPromotion = parsePromotionIfActive(\n abraData[\"active-promotion\"],\n );\n\n log(\"Storage promotion retrieved\", { storedPromotion });\n\n // Only update activePromotion if the promotion has actually changed\n if (\n storedPromotion?.title &&\n JSON.stringify(activePromotion) !== JSON.stringify(storedPromotion)\n ) {\n setActivePromotion(storedPromotion);\n } else if (!storedPromotion?.title && activePromotion) {\n // Clear promotion if it was removed from storage\n setActivePromotion(undefined);\n }\n }, [Tapcart?.variables?.storage?.[\"abra\"]?.[\"active-promotion\"]]);\n\n let getProductWithDiscount = React.useCallback(\n (product) => {\n if (!activePromotion || !activePromotion.title || !product) {\n log(\"No active promotion or product, returning original product\", {\n hasActivePromotion: !!activePromotion,\n hasProduct: !!product,\n });\n return product;\n }\n\n const _product = JSON.parse(JSON.stringify(product));\n let currencyCode = undefined;\n const variants = _product.variants.map((variant) => {\n const selectedVariant = JSON.parse(JSON.stringify(variant));\n currencyCode = currencyCode || selectedVariant?.price?.currencyCode;\n let biggestDiscount = 0;\n try {\n biggestDiscount = getBiggestDiscount({\n activePromotion,\n product: _product,\n selectedVariant,\n cart: stableCart,\n log,\n });\n } catch (error) {\n log(\"Error calculating discount\", {\n error: error.message,\n variantId: selectedVariant?.id,\n });\n biggestDiscount = 0;\n }\n\n const originalPrice = parseFloat(selectedVariant?.price?.amount ?? 0);\n const compareAtPrice = parseFloat(\n selectedVariant?.compareAtPrice?.amount ?? 0,\n );\n\n let referencePrice = originalPrice;\n if (compareAtPrice) {\n referencePrice = Math.max(originalPrice, compareAtPrice ?? 0);\n }\n\n let discountedPrice = Math.max(originalPrice - biggestDiscount, 0);\n\n selectedVariant.price = {\n amount: discountedPrice,\n currencyCode: selectedVariant.price.currencyCode,\n };\n selectedVariant.compareAtPrice = {\n amount: referencePrice,\n currencyCode: selectedVariant.price.currencyCode,\n };\n return selectedVariant;\n });\n _product.variants = variants;\n currencyCode = currencyCode || \"USD\";\n _product.compareAtPriceRange = {\n maxVariantPrice: {\n amount: variants.reduce((max, variant) => {\n return Math.max(\n max,\n parseFloat(variant.compareAtPrice.amount ?? variant.price.amount),\n );\n }, 0),\n currencyCode: currencyCode,\n },\n minVariantPrice: {\n amount: variants.reduce((min, variant) => {\n return Math.min(\n min,\n parseFloat(variant.compareAtPrice.amount ?? variant.price.amount),\n );\n }, Infinity),\n currencyCode: currencyCode,\n },\n };\n _product.priceRange = {\n maxVariantPrice: {\n amount: variants.reduce((max, variant) => {\n return Math.max(max, parseFloat(variant.price.amount));\n }, 0),\n currencyCode: currencyCode || \"USD\",\n },\n minVariantPrice: {\n amount: variants.reduce((min, variant) => {\n return Math.min(min, parseFloat(variant.price.amount));\n }, Infinity),\n currencyCode: currencyCode || \"USD\",\n },\n };\n _product.abra = true;\n\n return _product;\n },\n [\n activePromotion?.title,\n activePromotion?.discounts?.map((discount) => discount.title).join(\",\"),\n stableCart,\n ],\n );\n\n // Discounted price for a single price point (e.g. a selling-plan option in a\n // subscription selector). hasSellingPlan forces the subscription vs one-time\n // price branch regardless of what the variant carries.\n const getDiscountedPrice = React.useCallback(\n (product, variant, price, hasSellingPlan = false) => {\n const basePrice = parseFloat(price ?? variant?.price?.amount ?? 0);\n if (!activePromotion || !activePromotion.title || !product || !variant) {\n return basePrice;\n }\n\n const selectedVariant = {\n ...variant,\n price: {\n amount: basePrice,\n currencyCode: variant?.price?.currencyCode,\n },\n sellingPlanAllocation: hasSellingPlan\n ? (variant?.sellingPlanAllocation ?? { sellingPlan: {} })\n : null,\n };\n\n try {\n const biggestDiscount = getBiggestDiscount({\n activePromotion,\n product,\n selectedVariant,\n cart: stableCart,\n log,\n });\n return Math.max(basePrice - biggestDiscount, 0);\n } catch (error) {\n log(\"Error calculating discounted price\", {\n error: error.message,\n variantId: variant?.id,\n });\n return basePrice;\n }\n },\n [\n activePromotion?.title,\n activePromotion?.discounts?.map((discount) => discount.title).join(\",\"),\n stableCart,\n ],\n );\n\n return React.useMemo(\n () => ({\n abra: {\n activePromotion,\n getProductWithDiscount,\n getDiscountedPrice,\n logs: logRef.current,\n },\n }),\n [activePromotion, getProductWithDiscount, getDiscountedPrice],\n );\n}\n"],"names":[],"mappings":"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"}
|
package/dist/index.esm.js
CHANGED
|
@@ -1171,13 +1171,13 @@ function useAbra({ React, useTapcart, tapcartData }) {
|
|
|
1171
1171
|
);
|
|
1172
1172
|
|
|
1173
1173
|
const graphqlDefaultBody = React.useCallback(
|
|
1174
|
-
(query, variables,
|
|
1174
|
+
(query, variables, storeFrontAccessToken) => {
|
|
1175
1175
|
return {
|
|
1176
1176
|
async: true,
|
|
1177
1177
|
crossDomain: true,
|
|
1178
1178
|
method: "POST",
|
|
1179
1179
|
headers: {
|
|
1180
|
-
"X-Shopify-Storefront-Access-Token":
|
|
1180
|
+
"X-Shopify-Storefront-Access-Token": storeFrontAccessToken,
|
|
1181
1181
|
"Content-Type": "application/json",
|
|
1182
1182
|
},
|
|
1183
1183
|
body: JSON.stringify({
|
|
@@ -1190,8 +1190,8 @@ function useAbra({ React, useTapcart, tapcartData }) {
|
|
|
1190
1190
|
);
|
|
1191
1191
|
|
|
1192
1192
|
const fetchProducts = React.useCallback(
|
|
1193
|
-
async (ids, storeUrl,
|
|
1194
|
-
if (!storeUrl || !
|
|
1193
|
+
async (ids, storeUrl, storeFrontAccessToken, country) => {
|
|
1194
|
+
if (!storeUrl || !storeFrontAccessToken) {
|
|
1195
1195
|
return { error: "Missing required configuration" };
|
|
1196
1196
|
}
|
|
1197
1197
|
|
|
@@ -1205,7 +1205,7 @@ function useAbra({ React, useTapcart, tapcartData }) {
|
|
|
1205
1205
|
try {
|
|
1206
1206
|
const response = await fetch(
|
|
1207
1207
|
GRAPHQL_URL,
|
|
1208
|
-
graphqlDefaultBody(query, {},
|
|
1208
|
+
graphqlDefaultBody(query, {}, storeFrontAccessToken),
|
|
1209
1209
|
);
|
|
1210
1210
|
|
|
1211
1211
|
if (response?.ok) {
|
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/discounts.js","../src/useAbra.js"],"sourcesContent":["// Pure discount math for useAbra. Moved verbatim from src/code-for-updating-custom-component.jsx.\n// getIdFromGid and productGidFromId are copied from @tapcart/mobile-components so the package has no imports.\nexport const getIdFromGid = (gid) => {\n if (!gid) return \"\";\n const arr = gid.split(\"/\");\n return arr[arr.length - 1] || \"\";\n};\n\nexport const productGidFromId = (id) => {\n if (!id) return null;\n if (id.startsWith(\"gid://shopify/Product/\")) return id;\n return \"gid://shopify/Product/\" + id;\n};\n\n// BXGY customer-gets: new payloads carry cards on customerGets.productCards,\n// legacy payloads a single {quantity, items} pair at the root.\nexport const getBxgyGetsCards = (customerGets) => {\n if (\n Array.isArray(customerGets?.productCards) &&\n customerGets.productCards.length > 0\n ) {\n return customerGets.productCards;\n }\n if (customerGets?.items != null) {\n return [\n {\n quantity: customerGets.quantity,\n items: customerGets.items,\n purchaseType: customerGets.purchaseType,\n },\n ];\n }\n return [];\n};\n\nexport const getDiscountForProductDiscount = ({\n targetDiscount,\n handle,\n variantId,\n selectedVariant,\n}) => {\n const isProductEntitledForProductDiscount = () => {\n if (targetDiscount.entitled?.all) {\n return true;\n }\n\n if (targetDiscount.entitled?.variants) {\n if (variantId && targetDiscount.entitled.variants.includes(variantId)) {\n return true;\n }\n }\n\n if (targetDiscount.entitled?.products) {\n if (handle && targetDiscount.entitled.products.includes(handle)) {\n return true;\n }\n }\n return false;\n };\n if (!isProductEntitledForProductDiscount()) return 0;\n\n if (targetDiscount.discountValue?.type === \"DiscountAmount\") {\n return targetDiscount.discountValue.discountAmount.cents / 100;\n } else if (targetDiscount.discountValue?.type === \"DiscountPercentage\") {\n return (\n parseFloat(selectedVariant.price.amount) *\n targetDiscount.discountValue.percentage\n );\n }\n};\n\nexport const getDiscountForMultiValueCollection = ({\n targetDiscount,\n handle,\n selectedVariant,\n}) => {\n if (\n !targetDiscount?.discountValue?.productDiscounts ||\n targetDiscount.discountValue.productDiscounts.length === 0\n )\n return 0;\n\n const entitledProductDiscounts =\n targetDiscount.discountValue.productDiscounts.filter((discount) =>\n (discount.products ?? []).includes(handle),\n ) || [];\n\n return entitledProductDiscounts.reduce((max, discountValue) => {\n let discountAmount = 0;\n\n if (discountValue.value.type === \"DiscountAmount\") {\n discountAmount = discountValue.value.discountAmount.cents / 100;\n } else if (discountValue.value.type === \"DiscountPercentage\") {\n discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (discountValue.value.percentage / 100);\n }\n\n return Math.max(max, discountAmount);\n }, 0);\n};\n\nexport const getDiscountForMultiValueProduct = ({\n targetDiscount,\n variantId,\n selectedVariant,\n}) => {\n if (!variantId) return 0;\n if (\n !targetDiscount?.discountValue?.variantDiscounts ||\n targetDiscount?.discountValue?.variantDiscounts.length === 0\n )\n return 0;\n\n const entitledVariantDiscounts =\n targetDiscount.discountValue.variantDiscounts.filter((discount) =>\n (discount.variants ?? []).includes(variantId),\n ) ?? [];\n\n return entitledVariantDiscounts.reduce((max, discountValue) => {\n let discountAmount = 0;\n\n if (discountValue.value.type === \"DiscountAmount\") {\n discountAmount = discountValue.value.discountAmount.cents / 100;\n } else if (discountValue.value.type === \"DiscountPercentage\") {\n discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (discountValue.value.percentage / 100);\n }\n\n return Math.max(max, discountAmount);\n }, 0);\n};\n\nexport const getDiscountForTierDiscount = ({\n targetDiscount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n}) => {\n if (!targetDiscount.discountValue?.tiers) return 0;\n if (targetDiscount.discountValue?.tiersType === \"FREE_GIFT\") return 0;\n\n const currentCollectionHandle = product.sourceCollection?.handle;\n const isProductEntitledToTierDiscount = () => {\n if (targetDiscount.discountValue?.entitled?.all) {\n return true;\n }\n\n if (targetDiscount.discountValue?.entitled?.collections) {\n if (\n currentCollectionHandle &&\n targetDiscount.discountValue?.entitled?.collections.includes(\n currentCollectionHandle,\n )\n ) {\n return true;\n }\n }\n\n if (targetDiscount.discountValue?.entitled?.products) {\n if (\n handle &&\n targetDiscount.discountValue?.entitled?.products.includes(handle)\n ) {\n return true;\n }\n }\n\n if (targetDiscount.discountValue?.entitled?.variants) {\n if (\n variantId &&\n targetDiscount.discountValue?.entitled?.variants.includes(variantId)\n ) {\n return true;\n }\n }\n\n return false;\n };\n if (!isProductEntitledToTierDiscount()) return 0;\n\n const getBiggestEligibleTier = () => {\n const isItemEligibleWithSelectedPurchaseType = (item, discount) => {\n if (\n discount.appliesOnSubscription &&\n !discount.appliesOnOneTimePurchase\n ) {\n return Boolean(item.sellingPlanAllocation);\n } else if (\n !discount.appliesOnSubscription &&\n discount.appliesOnOneTimePurchase\n ) {\n return !item.sellingPlanAllocation;\n } else {\n return true;\n }\n };\n const isCartItemEntitledToGiveDiscount = (item) => {\n if (!targetDiscount || !targetDiscount.entitled) {\n return false;\n }\n\n if (targetDiscount.entitled.all) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n\n if (targetDiscount.entitled.variants) {\n if (\n targetDiscount.entitled.variants?.includes(\n item.variantId.toString(),\n )\n ) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n if (targetDiscount.entitled.products) {\n if (targetDiscount.entitled.products?.includes(item.handle)) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n return false;\n };\n\n const getEntitledQuantityAndTotal = () => {\n const entitledItems = (cart?.items || []).filter((item) => {\n return isCartItemEntitledToGiveDiscount(item);\n });\n\n const { entitledQuantity, entitledTotal } = entitledItems.reduce(\n (acc, item) => {\n acc.entitledQuantity += item.quantity;\n acc.entitledTotal +=\n parseFloat((item.price?.amount ?? 0) * 100) * item.quantity;\n\n return acc;\n },\n { entitledQuantity: 0, entitledTotal: 0 },\n );\n\n return { entitledQuantity, entitledTotal };\n };\n\n const isPrerequisiteValid = (prerequisite, quantity, subtotal) => {\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToQuantity) {\n if (\n Number(quantity) <\n Number(prerequisite.minimumRequirement.greaterThanOrEqualToQuantity)\n ) {\n return false;\n }\n }\n\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToSubtotal) {\n if (\n subtotal <\n prerequisite.minimumRequirement.greaterThanOrEqualToSubtotal.cents\n ) {\n return false;\n }\n }\n\n return true;\n };\n\n const { entitledQuantity, entitledTotal } = getEntitledQuantityAndTotal();\n\n let currentBiggestTierIndex = -1;\n for (let i = 0; i < targetDiscount.discountValue?.tiers?.length; i++) {\n const currentTier = targetDiscount.discountValue.tiers[i];\n if (\n isPrerequisiteValid(\n currentTier.prerequisite,\n entitledQuantity,\n entitledTotal,\n )\n ) {\n currentBiggestTierIndex = i;\n } else {\n break;\n }\n }\n return currentBiggestTierIndex;\n };\n const biggestEligibleTierIndex = getBiggestEligibleTier();\n\n if (biggestEligibleTierIndex < 0) return 0;\n\n const biggestEligibleTier =\n targetDiscount.discountValue.tiers[biggestEligibleTierIndex];\n if (!biggestEligibleTier || !biggestEligibleTier.value) return 0;\n\n if (\n biggestEligibleTier.value.type === \"DiscountPercentage\" &&\n biggestEligibleTier.value.percentage\n ) {\n const discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (biggestEligibleTier.value.percentage / 100);\n\n return discountAmount;\n }\n};\n\nexport const getDiscountForVolumeDiscount = ({\n targetDiscount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n}) => {\n if (!targetDiscount.discountValue?.tiers) return 0;\n if (targetDiscount.discountValue?.tiersType === \"FREE_GIFT\") return 0;\n\n // customer-gets purchaseType gates the displayed price; per-variant mode\n // (ELIGIBLE_VARIANTS) ignores it\n const customerGets = targetDiscount.discountValue?.customerGets;\n const getsAppliesTo = customerGets?.appliesTo || \"ELIGIBLE_VARIANTS\";\n const getsPurchaseType =\n getsAppliesTo !== \"ELIGIBLE_VARIANTS\"\n ? customerGets?.purchaseType\n : undefined;\n const selectedHasSellingPlan = Boolean(\n selectedVariant?.sellingPlanAllocation,\n );\n if (getsPurchaseType === \"SUBSCRIPTION\" && !selectedHasSellingPlan)\n return 0;\n if (getsPurchaseType === \"ONE_TIME\" && selectedHasSellingPlan) return 0;\n\n const currentCollectionHandle = product.sourceCollection?.handle;\n const isProductEntitledToVolumeDiscount = () => {\n if (targetDiscount.discountValue?.entitled?.all) {\n return true;\n }\n\n if (targetDiscount.discountValue?.entitled?.collections) {\n if (\n currentCollectionHandle &&\n targetDiscount.discountValue?.entitled?.collections.includes(\n currentCollectionHandle,\n )\n ) {\n return true;\n }\n }\n\n if (targetDiscount?.entitled?.products) {\n if (handle && targetDiscount?.entitled?.products.includes(handle)) {\n return true;\n }\n }\n\n if (targetDiscount?.entitled?.variants) {\n if (\n variantId &&\n targetDiscount?.entitled?.variants.includes(variantId)\n ) {\n return true;\n }\n }\n\n return false;\n };\n if (!isProductEntitledToVolumeDiscount()) return 0;\n\n const getBiggestEligibleTier = () => {\n const isItemEligibleWithSelectedPurchaseType = (item, discount) => {\n if (\n discount.appliesOnSubscription &&\n !discount.appliesOnOneTimePurchase\n ) {\n return Boolean(item.sellingPlanAllocation);\n } else if (\n !discount.appliesOnSubscription &&\n discount.appliesOnOneTimePurchase\n ) {\n return !item.sellingPlanAllocation;\n } else {\n return true;\n }\n };\n const isCartItemEntitledToGiveDiscount = (item) => {\n if (!targetDiscount || !targetDiscount.entitled) {\n return false;\n }\n\n if (targetDiscount.entitled.all) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n\n if (targetDiscount.entitled.variants) {\n if (\n targetDiscount.entitled.variants?.includes(\n item.variantId.toString(),\n )\n ) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n if (targetDiscount.entitled.products) {\n if (targetDiscount.entitled.products?.includes(item.handle)) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n return false;\n };\n\n const getEntitledQuantityAndTotal = () => {\n const entitledItems = (cart?.items || []).filter((item) => {\n return isCartItemEntitledToGiveDiscount(item);\n });\n\n const { entitledQuantity, entitledTotal } = entitledItems.reduce(\n (acc, item) => {\n acc.entitledQuantity += item.quantity;\n acc.entitledTotal +=\n parseFloat((item.price?.amount ?? 0) * 100) * item.quantity;\n\n return acc;\n },\n { entitledQuantity: 0, entitledTotal: 0 },\n );\n\n return { entitledQuantity, entitledTotal };\n };\n\n const isPrerequisiteValid = (prerequisite, quantity, subtotal) => {\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToQuantity) {\n if (\n Number(quantity) <\n Number(prerequisite.minimumRequirement.greaterThanOrEqualToQuantity)\n ) {\n return false;\n }\n }\n\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToSubtotal) {\n if (\n subtotal <\n prerequisite.minimumRequirement.greaterThanOrEqualToSubtotal.cents\n ) {\n return false;\n }\n }\n\n return true;\n };\n\n const { entitledQuantity, entitledTotal } = getEntitledQuantityAndTotal();\n\n let currentBiggestTierIndex = -1;\n for (let i = 0; i < targetDiscount.discountValue?.tiers?.length; i++) {\n const currentTier = targetDiscount.discountValue.tiers[i];\n if (\n isPrerequisiteValid(\n currentTier.prerequisite,\n entitledQuantity,\n entitledTotal,\n )\n ) {\n currentBiggestTierIndex = i;\n } else {\n break;\n }\n }\n return currentBiggestTierIndex;\n };\n const biggestEligibleTierIndex = getBiggestEligibleTier();\n\n if (biggestEligibleTierIndex < 0) return 0;\n\n const biggestEligibleTier =\n targetDiscount.discountValue.tiers[biggestEligibleTierIndex];\n if (!biggestEligibleTier || !biggestEligibleTier.value) return 0;\n\n if (\n biggestEligibleTier.value.type === \"DiscountPercentage\" &&\n biggestEligibleTier.value.percentage\n ) {\n const discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (biggestEligibleTier.value.percentage / 100);\n\n return discountAmount;\n }\n};\n\nexport const getDiscountForMultiEffectTiers = ({\n targetDiscount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n log,\n}) => {\n const isProductEntitledToDiscount = (discount) => {\n if (discount.entitled?.all) {\n return true;\n }\n\n if (discount.entitled?.collections) {\n if (\n currentCollectionHandle &&\n discount.entitled?.collections.includes(currentCollectionHandle)\n ) {\n return true;\n }\n }\n\n if (discount.entitled?.products) {\n if (handle && discount.entitled?.products.includes(handle)) {\n return true;\n }\n }\n\n if (discount.entitled?.variants) {\n if (variantId && discount.entitled?.variants.includes(variantId)) {\n return true;\n }\n }\n\n return false;\n };\n const getBiggestEligibleTier = () => {\n const isItemEligibleWithSelectedPurchaseType = (item, discount) => {\n if (\n discount.appliesOnSubscription &&\n !discount.appliesOnOneTimePurchase\n ) {\n return Boolean(item.sellingPlanAllocation);\n } else if (\n !discount.appliesOnSubscription &&\n discount.appliesOnOneTimePurchase\n ) {\n return !item.sellingPlanAllocation;\n } else {\n return true;\n }\n };\n const isCartItemEntitledToGiveDiscount = (item) => {\n if (!targetDiscount || !targetDiscount.entitled) {\n return false;\n }\n\n if (targetDiscount.entitled.all) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n\n if (targetDiscount.entitled.variants) {\n if (\n targetDiscount.entitled.variants?.includes(\n item.variantId.toString(),\n )\n ) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n if (targetDiscount.entitled.products) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n\n return false;\n };\n\n const getEntitledQuantityAndTotal = () => {\n const entitledItems = (cart?.items || []).filter((item) => {\n return isCartItemEntitledToGiveDiscount(item);\n });\n\n const { entitledQuantity, entitledTotal } = entitledItems.reduce(\n (acc, item) => {\n acc.entitledQuantity += item.quantity;\n acc.entitledTotal +=\n parseFloat((item.price?.amount ?? 0) * 100) * item.quantity;\n\n return acc;\n },\n { entitledQuantity: 0, entitledTotal: 0 },\n );\n\n return { entitledQuantity, entitledTotal };\n };\n\n const isPrerequisiteValid = (prerequisite, quantity, subtotal) => {\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToQuantity) {\n if (\n Number(quantity) <\n Number(prerequisite.minimumRequirement.greaterThanOrEqualToQuantity)\n ) {\n return false;\n }\n }\n\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToSubtotal) {\n if (\n subtotal <\n prerequisite.minimumRequirement.greaterThanOrEqualToSubtotal.cents\n ) {\n return false;\n }\n }\n\n return true;\n };\n\n log(\"getEntitledQuantityAndTotal\");\n const { entitledQuantity, entitledTotal } = getEntitledQuantityAndTotal();\n\n log(\"getEntitledQuantityAndTotal\", { entitledQuantity, entitledTotal });\n\n let currentBiggestTierIndex = -1;\n for (let i = 0; i < targetDiscount.discountValue?.tiers?.length; i++) {\n const currentTier = targetDiscount.discountValue.tiers[i];\n if (\n isPrerequisiteValid(\n currentTier.prerequisite,\n entitledQuantity,\n entitledTotal,\n )\n ) {\n currentBiggestTierIndex = i;\n } else {\n break;\n }\n }\n return currentBiggestTierIndex;\n };\n\n if (\n !targetDiscount.discountValue?.tiers ||\n targetDiscount.discountValue?.tiers.length === 0\n )\n return 0;\n\n log(\"getBiggestEligibleTier\");\n const currentCollectionHandle = product?.sourceCollection?.handle;\n const biggestEligibleTierIndex = getBiggestEligibleTier();\n log(\"getBiggestEligibleTier\", { biggestEligibleTierIndex });\n\n if (biggestEligibleTierIndex < 0) return 0;\n\n const productDiscountsAvailableOnTier =\n targetDiscount.discountValue.tiers\n .slice(0, biggestEligibleTierIndex + 1)\n ?.filter((tier) =>\n tier.discounts.some(\n (discount) => discount.type === \"ProductDiscount\",\n ),\n )\n ?.flatMap(\n (tier) =>\n tier.discounts.find(\n (discount) => discount.type === \"ProductDiscount\",\n )?.value ?? [],\n ) ?? [];\n\n // Per-entry purchaseType replaces the promotion-level flags: an entry only\n // affects the price branch matching the selected purchase state.\n const selectedHasSellingPlan = Boolean(\n selectedVariant?.sellingPlanAllocation,\n );\n const eligibleProductDiscounts = productDiscountsAvailableOnTier.filter(\n (discount) => {\n if (discount.purchaseType === \"SUBSCRIPTION\" && !selectedHasSellingPlan)\n return false;\n if (discount.purchaseType === \"ONE_TIME\" && selectedHasSellingPlan)\n return false;\n return isProductEntitledToDiscount(discount);\n },\n );\n\n const maxDiscountAmount = eligibleProductDiscounts.reduce(\n (max, discount) => {\n let discountAmount = 0;\n if (discount.value.type === \"DiscountAmount\") {\n discountAmount = parseFloat(discount.value.discountAmount.amount);\n } else if (discount.value.type === \"DiscountPercentage\") {\n discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (discount.value.percentage / 100);\n }\n return Math.max(max, discountAmount);\n },\n 0,\n );\n return maxDiscountAmount;\n};\n\nexport const isProductMatchingBxgyCardItems = (handle, variantId, items) => {\n if (!items) return false;\n if (items.type === \"AllProducts\") return true;\n\n if (items.type === \"SpecificProducts\" && items.products) {\n for (const product of items.products) {\n if (product.handle === handle) {\n if (!product.variants || product.variants.length === 0) return true;\n for (const variant of product.variants) {\n const vId = variant.id?.includes(\"/\")\n ? variant.id.split(\"/\").pop()\n : variant.id;\n if (vId === variantId || variant.id === variantId) return true;\n }\n }\n }\n }\n\n if (items.type === \"SpecificCollections\" && items.collections) {\n for (const collection of items.collections) {\n if (collection.products?.includes(handle)) return true;\n }\n }\n\n return false;\n};\n\nexport const isCartItemMatchingBxgyCard = (item, card) => {\n const items = card.items;\n if (items.type === \"AllProducts\") return true;\n\n if (items.type === \"SpecificProducts\" && items.products) {\n const itemVariantId = item.variantId?.toString();\n for (const product of items.products) {\n if (product.variants && product.variants.length > 0) {\n for (const variant of product.variants) {\n const vId = variant.id?.includes(\"/\")\n ? variant.id.split(\"/\").pop()\n : variant.id;\n if (vId === itemVariantId || variant.id === itemVariantId)\n return true;\n }\n }\n if (item.handle && product.handle === item.handle) return true;\n }\n }\n\n if (items.type === \"SpecificCollections\" && items.collections) {\n for (const collection of items.collections) {\n if (item.handle && collection.products?.includes(item.handle))\n return true;\n }\n }\n\n return false;\n};\n\nexport const areAllBxgyProductCardsMet = (cart, bxgy) => {\n if (!bxgy?.productCards?.length || !cart?.items) return false;\n\n const globalRequirementType = bxgy.requirementType ?? \"QUANTITY\";\n\n for (const card of bxgy.productCards) {\n const requirementType = card.requirementType ?? globalRequirementType;\n let totalQuantity = 0;\n let totalSubtotal = 0;\n\n for (const item of cart.items) {\n if (isCartItemMatchingBxgyCard(item, card)) {\n // Check purchaseType on the card against the cart item\n const itemHasSellingPlan = Boolean(item.sellingPlanAllocation);\n if (card.purchaseType === \"SUBSCRIPTION\" && !itemHasSellingPlan) {\n continue;\n }\n if (card.purchaseType === \"ONE_TIME\" && itemHasSellingPlan) {\n continue;\n }\n\n totalQuantity += item.quantity || 0;\n totalSubtotal +=\n parseFloat(item.price?.amount || 0) * 100 * (item.quantity || 0);\n }\n }\n\n if (requirementType === \"SUBTOTAL\") {\n const required = card.minimumSubtotal?.cents || 0;\n if (required > 0 && totalSubtotal < required) return false;\n } else {\n const required = card.quantity || 0;\n if (required > 0 && totalQuantity < required) return false;\n }\n }\n\n return true;\n};\n\nexport const getDiscountForBxgyDiscount = ({\n targetDiscount,\n handle,\n variantId,\n selectedVariant,\n cart,\n}) => {\n const bxgy = targetDiscount.discountValue;\n if (!bxgy?.productCards || !bxgy?.customerGets) return 0;\n\n const customerGetsValueType = bxgy.customerGets.value?.type;\n\n if (\n customerGetsValueType === \"Gift\" ||\n customerGetsValueType === \"FixedPrice\"\n ) {\n return 0;\n }\n\n // Gets-card purchaseType gates the displayed price against the selected\n // purchase state (new payloads carry gets cards; legacy has plain items).\n const getsCards = getBxgyGetsCards(bxgy.customerGets);\n const selectedHasSellingPlan = Boolean(\n selectedVariant?.sellingPlanAllocation,\n );\n const matchesGetsPurchaseType = (card) => {\n if (card.purchaseType === \"SUBSCRIPTION\" && !selectedHasSellingPlan)\n return false;\n if (card.purchaseType === \"ONE_TIME\" && selectedHasSellingPlan)\n return false;\n return true;\n };\n\n const isEntitledToReceive = () => {\n if (bxgy.customerGets.applyToProductCardItems) {\n return bxgy.productCards.some((card) =>\n isProductMatchingBxgyCardItems(handle, variantId, card.items),\n );\n }\n return getsCards.some(\n (card) =>\n matchesGetsPurchaseType(card) &&\n isProductMatchingBxgyCardItems(handle, variantId, card.items),\n );\n };\n\n if (!isEntitledToReceive()) return 0;\n\n // Check if this product matches a productCard with purchase type requirement\n // Look up the actual cart item to check if it has a subscription selected\n const matchingCartItem = (cart?.items || []).find(\n (item) => item.variantId?.toString() === variantId?.toString() || item.handle === handle\n );\n const cartItemHasSellingPlan = Boolean(matchingCartItem?.sellingPlanAllocation);\n\n for (const card of bxgy.productCards) {\n if (isProductMatchingBxgyCardItems(handle, variantId, card.items)) {\n if (card.purchaseType === \"SUBSCRIPTION\" && !cartItemHasSellingPlan) {\n return 0;\n } else if (card.purchaseType === \"ONE_TIME\" && cartItemHasSellingPlan) {\n return 0;\n }\n }\n }\n\n\n if (!areAllBxgyProductCardsMet(cart, bxgy)) return 0;\n\n const originalPrice = parseFloat(selectedVariant?.price?.amount || 0);\n if (originalPrice <= 0) return 0;\n\n if (customerGetsValueType === \"DiscountPercentage\") {\n const percentage = bxgy.customerGets.value.percentage || 0;\n return originalPrice * (percentage / 100);\n } else if (customerGetsValueType === \"DiscountAmount\") {\n const cents = bxgy.customerGets.value.discountAmount?.cents || 0;\n return Math.min(cents / 100, originalPrice);\n }\n\n return 0;\n};\n\nexport const getDiscountValueForDiscount = ({\n product,\n selectedVariant,\n cart,\n discount,\n log,\n}) => {\n const handle = product?.handle;\n const variantId = getIdFromGid(selectedVariant?.id);\n\n if (!handle || !discount) return 0;\n\n if (discount.discountValue?.type === \"DiscountCodeBxgy\") {\n return 0;\n }\n\n if (discount.discountValue?.type === \"Gift\") {\n return 0;\n }\n\n if (discount.discountValue?.type === \"BxgyDiscount\") {\n return getDiscountForBxgyDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n selectedVariant,\n cart,\n });\n }\n\n if (discount.discountValue?.type === \"DiscountMultiValueProduct\") {\n return getDiscountForMultiValueProduct({\n targetDiscount: discount,\n variantId,\n selectedVariant,\n });\n }\n\n if (discount.discountValue?.type === \"DiscountMultiValueCollection\") {\n return getDiscountForMultiValueCollection({\n targetDiscount: discount,\n handle,\n selectedVariant,\n });\n }\n\n if (discount.discountValue?.type === \"TieredDiscount\") {\n return getDiscountForTierDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n });\n }\n\n if (discount.discountValue?.type === \"VolumeDiscount\") {\n return getDiscountForVolumeDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n });\n }\n\n if (discount.discountValue?.type === \"CollectionOrderDiscount\") {\n return 0;\n }\n\n if (discount.discountValue?.type === \"MultiEffectTiers\") {\n log(\"getDiscountForMultiEffectTiers\");\n return getDiscountForMultiEffectTiers({\n targetDiscount: discount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n log,\n });\n }\n\n if (discount.discountValue?.type === \"ProductDiscount\") {\n return getDiscountForProductDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n selectedVariant,\n });\n }\n\n if (discount.discountClass === \"ORDER\") {\n return 0;\n }\n if (discount.discountClass === \"SHIPPING\") {\n return 0;\n }\n\n if (discount.discountClass === \"PRODUCT\") {\n return getDiscountForProductDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n selectedVariant,\n });\n }\n\n return 0;\n};\n\nexport const getBiggestDiscount = ({\n activePromotion,\n product,\n selectedVariant,\n cart,\n log,\n}) => {\n const discounts = Object.values(activePromotion?.discounts ?? []);\n log(\"Calculating biggest discount\", {\n discountCount: discounts.length,\n productId: product?.handle,\n collectionId: product?.sourceCollection?.handle,\n variantId: selectedVariant?.id,\n hasSellingPlan: !!selectedVariant?.sellingPlanAllocation,\n });\n\n const biggestDiscount = discounts.reduce((max, discount) => {\n const hasSellingPlan = Boolean(selectedVariant?.sellingPlanAllocation);\n\n // For BXGY discounts, purchase type is checked PER CARD (card.purchaseType),\n // not at the top level. Skip top-level appliesOnSubscription/appliesOnOneTimePurchase.\n // For other discount types, still use the top-level flags — unless a\n // customer-gets purchaseType overrides them (checked per discount type below).\n if (discount.discountValue?.type !== \"BxgyDiscount\") {\n let appliesOnSubscription = discount.appliesOnSubscription;\n let appliesOnOneTimePurchase = discount.appliesOnOneTimePurchase;\n\n if (discount.discountValue?.type === \"VolumeDiscount\") {\n const customerGets = discount.discountValue.customerGets;\n const getsAppliesTo = customerGets?.appliesTo || \"ELIGIBLE_VARIANTS\";\n const getsPurchaseType =\n getsAppliesTo !== \"ELIGIBLE_VARIANTS\"\n ? customerGets?.purchaseType\n : undefined;\n if (getsPurchaseType) {\n appliesOnSubscription = getsPurchaseType !== \"ONE_TIME\";\n appliesOnOneTimePurchase = getsPurchaseType !== \"SUBSCRIPTION\";\n }\n }\n\n if (discount.discountValue?.type === \"MultiEffectTiers\") {\n // Entries with their own purchaseType filter themselves in\n // getDiscountForMultiEffectTiers; don't gate the whole discount here.\n const hasPerEntryPurchaseType = (\n discount.discountValue.tiers ?? []\n ).some((tier) =>\n (tier.discounts ?? []).some(\n (tierDiscount) =>\n tierDiscount.type === \"ProductDiscount\" &&\n (Array.isArray(tierDiscount.value)\n ? tierDiscount.value\n : []\n ).some((entry) => entry.purchaseType),\n ),\n );\n if (hasPerEntryPurchaseType) {\n appliesOnSubscription = true;\n appliesOnOneTimePurchase = true;\n }\n }\n\n if (appliesOnSubscription && !appliesOnOneTimePurchase) {\n if (!hasSellingPlan) {\n log(\"Skipping subscription-only discount (no subscription selected)\", {\n discountType: discount.discountValue?.type,\n });\n return max;\n }\n }\n\n if (!appliesOnSubscription && appliesOnOneTimePurchase) {\n if (hasSellingPlan) {\n log(\"Skipping one-time-only discount (subscription selected)\", {\n discountType: discount.discountValue?.type,\n });\n return max;\n }\n }\n }\n\n const discountValue = getDiscountValueForDiscount({\n product,\n selectedVariant,\n cart,\n discount,\n log,\n });\n log(\"Discount calculated\", {\n discountType: discount.discountValue?.type,\n discountValue,\n maxSoFar: max,\n appliesOnSubscription: discount.appliesOnSubscription,\n appliesOnOneTimePurchase: discount.appliesOnOneTimePurchase,\n hasSellingPlan,\n });\n return Math.max(max, discountValue);\n }, 0);\n\n log(\"Final biggest discount\", { biggestDiscount });\n return biggestDiscount;\n};\n\nexport const parsePromotionIfActive = (promotionObject, now = new Date()) => {\n try {\n // Handle both object and string cases for backward compatibility\n const promotion =\n typeof promotionObject === \"string\"\n ? JSON.parse(promotionObject ?? \"{}\")\n : promotionObject;\n\n if (!promotion.startsAt || !promotion.status || !promotion.title)\n return undefined;\n const startsAt = new Date(promotion.startsAt);\n const endsAt = promotion.endsAt ? new Date(promotion.endsAt) : null;\n\n if (\n (promotion.status === \"ACTIVE\" || promotion.status === \"SCHEDULED\") &&\n now >= startsAt &&\n (!endsAt || now <= endsAt)\n ) {\n return promotion;\n }\n\n return undefined;\n } catch (error) {\n console.error(\"Failed to parse promotion:\", error);\n return undefined;\n }\n};\n","import {\n getBiggestDiscount,\n parsePromotionIfActive,\n getIdFromGid,\n productGidFromId,\n} from \"./discounts.js\";\n\nexport default function useAbra({ React, useTapcart, tapcartData }) {\n const Tapcart = useTapcart();\n const [activePromotion, setActivePromotion] = React.useState(undefined);\n const renderCountRef = React.useRef(0);\n const logRef = React.useRef([]);\n const variables = Tapcart?.variables;\n const { storeFrontAccessToken, storeUrl } =\n tapcartData?.integrations?.find((x) => x.name === \"abra-promotions\") ?? {};\n\n // Stable GraphQL fragment and functions\n const PRODUCT_FRAGMENT = React.useMemo(\n () => `\n id\n handle\n variants(first: 100) {\n edges {\n node {\n id\n handle: title\n price {\n amount\n currencyCode\n }\n }\n }\n }\n `,\n [],\n );\n\n const generateProductsQuery = React.useCallback(\n (ids, country) => {\n const productQueries = ids\n .map(\n (id, index) =>\n `product_${index}: product(id: \"${productGidFromId(id)}\") {\n ${PRODUCT_FRAGMENT}\n }`,\n )\n .join(\"\\n \");\n\n const inContextDirective = country\n ? `@inContext(country: ${country})`\n : \"\";\n\n return `\n query Products ${inContextDirective} {\n ${productQueries}\n }\n `;\n },\n [PRODUCT_FRAGMENT],\n );\n\n const graphqlDefaultBody = React.useCallback(\n (query, variables, storefrontAccessToken) => {\n return {\n async: true,\n crossDomain: true,\n method: \"POST\",\n headers: {\n \"X-Shopify-Storefront-Access-Token\": storefrontAccessToken,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n query,\n variables,\n }),\n };\n },\n [],\n );\n\n const fetchProducts = React.useCallback(\n async (ids, storeUrl, storefrontAccessToken, country) => {\n if (!storeUrl || !storefrontAccessToken) {\n return { error: \"Missing required configuration\" };\n }\n\n if (!ids || ids.length === 0) {\n return { data: [], error: \"No ids\" };\n }\n\n const GRAPHQL_URL = `https://${storeUrl}/api/2024-04/graphql.json`;\n const query = generateProductsQuery(ids, country);\n\n try {\n const response = await fetch(\n GRAPHQL_URL,\n graphqlDefaultBody(query, {}, storefrontAccessToken),\n );\n\n if (response?.ok) {\n const responseBody = await response.json();\n const data = responseBody?.data;\n\n if (!data) {\n return { data: [], error: \"No data\" };\n }\n\n const products = Object.values(data).filter((item) => item !== null);\n\n return {\n data: products,\n error: null,\n };\n }\n\n const error = await response.text();\n return { data: [], error: error };\n } catch (err) {\n return { data: [], error: err.message };\n }\n },\n [generateProductsQuery, graphqlDefaultBody],\n );\n\n const useProductsCustom = React.useCallback(\n ({ ids, storeUrl, storeFrontAccessToken, country }) => {\n const [products, setProducts] = React.useState([]);\n const [loading, setLoading] = React.useState(true);\n const [error, setError] = React.useState(null);\n\n // Memoize ids to prevent infinite loops\n const idsString = React.useMemo(() => {\n if (!ids || !Array.isArray(ids) || ids.length === 0) return \"\";\n return [...ids].sort().join(\",\");\n }, [ids ? JSON.stringify([...ids].sort()) : \"\"]);\n\n React.useEffect(() => {\n const fetchData = async () => {\n if (!storeUrl || !storeFrontAccessToken) {\n if (!storeUrl) {\n setError(\"no store url\");\n }\n if (!storeFrontAccessToken) {\n setError(\"no store front access token\");\n }\n setProducts([]);\n setLoading(false);\n return;\n }\n\n if (!ids || ids.length === 0) {\n setProducts([]);\n setLoading(false);\n return;\n }\n\n const result = await fetchProducts(\n ids,\n storeUrl,\n storeFrontAccessToken,\n country,\n );\n\n try {\n if (result.data && result.data.length > 0) {\n const formattedProducts = result?.data?.map((product) => ({\n id: getIdFromGid(product.id),\n handle: product?.handle,\n variants: product?.variants?.edges?.map((variant) => ({\n id: getIdFromGid(variant?.node?.id),\n handle: variant?.node?.handle,\n price: variant?.node?.price,\n })),\n }));\n setProducts(formattedProducts);\n setError(result.error);\n } else {\n setProducts([]);\n setError(result.error);\n }\n } catch (error) {\n setError(error.message);\n }\n\n setLoading(false);\n };\n\n fetchData();\n }, [idsString, storeUrl, storeFrontAccessToken, country, fetchProducts]);\n\n return { products, loading, error };\n },\n [fetchProducts],\n );\n\n // Stable logging function that doesn't cause re-renders\n const log = React.useCallback((message, data = null) => {\n const timestamp = new Date().toISOString();\n const logEntry = {\n timestamp,\n message,\n data: data ? JSON.parse(JSON.stringify(data)) : null,\n renderCount: renderCountRef.current,\n };\n logRef.current.push(logEntry);\n\n // Keep only last 50 logs to prevent memory issues\n if (logRef.current.length > 100) {\n logRef.current = logRef.current.slice(-100);\n }\n }, []);\n\n // Create stable cart items reference to prevent infinite recreations\n const stableCartItems = React.useMemo(() => {\n const currentCartItems = variables?.cart?.items ?? [];\n\n if (!currentCartItems || currentCartItems.length === 0) {\n return [];\n }\n\n const mappedItems = currentCartItems.map((item) => ({\n productId: item.productId,\n variantId: item.variantId,\n quantity: item.quantity,\n sellingPlanAllocation: item.sellingPlanAllocation,\n }));\n\n return mappedItems;\n }, [\n (variables?.cart?.items || [])\n ?.map((item) => `${item.productId}-${item.variantId}-${item.quantity}`)\n ?.join(\",\"),\n ]);\n\n const ids = React.useMemo(\n () => (stableCartItems ?? []).map((item) => item.productId),\n [stableCartItems],\n );\n\n // Get country from cart currency or tapcartData\n const country = React.useMemo(() => {\n return (\n Tapcart?.variables?.cart?.currency?.slice(0, 2) || tapcartData?.country\n );\n }, [Tapcart?.variables?.cart?.currency, tapcartData?.country]);\n\n const {\n products: cartItems,\n loading: cartItemsLoading,\n error: cartItemsError,\n } = useProductsCustom({\n ids,\n storeUrl: storeUrl,\n storeFrontAccessToken: storeFrontAccessToken,\n country: country,\n });\n\n // Render limiter to prevent infinite recreations\n renderCountRef.current += 1;\n\n // Create stable cart reference to prevent infinite recreations\n const stableCart = React.useMemo(() => {\n if (!variables?.cart) {\n return null;\n }\n if (cartItemsLoading || cartItemsError) {\n return variables.cart;\n }\n\n if (!cartItems || cartItems.length === 0) {\n return variables.cart;\n }\n\n const processedItems = (stableCartItems || []).map((item) => {\n const _cartItem = cartItems?.find(\n (cartItem) => getIdFromGid(cartItem?.id) === item.productId,\n );\n if (!_cartItem) {\n return item;\n }\n const _variant = _cartItem?.variants?.find(\n (variant) => getIdFromGid(variant?.id) === item?.variantId,\n );\n if (!_variant) {\n return item;\n }\n\n const processedItem = {\n ...item,\n handle: _cartItem?.handle,\n price: _variant?.price,\n };\n\n return processedItem;\n });\n\n const result = {\n ...variables.cart,\n items: processedItems,\n };\n\n return result;\n }, [\n cartItems,\n cartItemsLoading,\n cartItemsError,\n (variables?.cart?.items || [])\n ?.map((item) => `${item.variantId}-${item.quantity}`)\n ?.join(\",\"),\n ]);\n\n // Effect: Initialize from storage and observe changes\n React.useEffect(() => {\n const storage = Tapcart?.variables?.storage || {};\n const abraData = storage[\"abra\"] || {};\n const storedPromotion = parsePromotionIfActive(\n abraData[\"active-promotion\"],\n );\n\n log(\"Storage promotion retrieved\", { storedPromotion });\n\n // Only update activePromotion if the promotion has actually changed\n if (\n storedPromotion?.title &&\n JSON.stringify(activePromotion) !== JSON.stringify(storedPromotion)\n ) {\n setActivePromotion(storedPromotion);\n } else if (!storedPromotion?.title && activePromotion) {\n // Clear promotion if it was removed from storage\n setActivePromotion(undefined);\n }\n }, [Tapcart?.variables?.storage?.[\"abra\"]?.[\"active-promotion\"]]);\n\n let getProductWithDiscount = React.useCallback(\n (product) => {\n if (!activePromotion || !activePromotion.title || !product) {\n log(\"No active promotion or product, returning original product\", {\n hasActivePromotion: !!activePromotion,\n hasProduct: !!product,\n });\n return product;\n }\n\n const _product = JSON.parse(JSON.stringify(product));\n let currencyCode = undefined;\n const variants = _product.variants.map((variant) => {\n const selectedVariant = JSON.parse(JSON.stringify(variant));\n currencyCode = currencyCode || selectedVariant?.price?.currencyCode;\n let biggestDiscount = 0;\n try {\n biggestDiscount = getBiggestDiscount({\n activePromotion,\n product: _product,\n selectedVariant,\n cart: stableCart,\n log,\n });\n } catch (error) {\n log(\"Error calculating discount\", {\n error: error.message,\n variantId: selectedVariant?.id,\n });\n biggestDiscount = 0;\n }\n\n const originalPrice = parseFloat(selectedVariant?.price?.amount ?? 0);\n const compareAtPrice = parseFloat(\n selectedVariant?.compareAtPrice?.amount ?? 0,\n );\n\n let referencePrice = originalPrice;\n if (compareAtPrice) {\n referencePrice = Math.max(originalPrice, compareAtPrice ?? 0);\n }\n\n let discountedPrice = Math.max(originalPrice - biggestDiscount, 0);\n\n selectedVariant.price = {\n amount: discountedPrice,\n currencyCode: selectedVariant.price.currencyCode,\n };\n selectedVariant.compareAtPrice = {\n amount: referencePrice,\n currencyCode: selectedVariant.price.currencyCode,\n };\n return selectedVariant;\n });\n _product.variants = variants;\n currencyCode = currencyCode || \"USD\";\n _product.compareAtPriceRange = {\n maxVariantPrice: {\n amount: variants.reduce((max, variant) => {\n return Math.max(\n max,\n parseFloat(variant.compareAtPrice.amount ?? variant.price.amount),\n );\n }, 0),\n currencyCode: currencyCode,\n },\n minVariantPrice: {\n amount: variants.reduce((min, variant) => {\n return Math.min(\n min,\n parseFloat(variant.compareAtPrice.amount ?? variant.price.amount),\n );\n }, Infinity),\n currencyCode: currencyCode,\n },\n };\n _product.priceRange = {\n maxVariantPrice: {\n amount: variants.reduce((max, variant) => {\n return Math.max(max, parseFloat(variant.price.amount));\n }, 0),\n currencyCode: currencyCode || \"USD\",\n },\n minVariantPrice: {\n amount: variants.reduce((min, variant) => {\n return Math.min(min, parseFloat(variant.price.amount));\n }, Infinity),\n currencyCode: currencyCode || \"USD\",\n },\n };\n _product.abra = true;\n\n return _product;\n },\n [\n activePromotion?.title,\n activePromotion?.discounts?.map((discount) => discount.title).join(\",\"),\n stableCart,\n ],\n );\n\n // Discounted price for a single price point (e.g. a selling-plan option in a\n // subscription selector). hasSellingPlan forces the subscription vs one-time\n // price branch regardless of what the variant carries.\n const getDiscountedPrice = React.useCallback(\n (product, variant, price, hasSellingPlan = false) => {\n const basePrice = parseFloat(price ?? variant?.price?.amount ?? 0);\n if (!activePromotion || !activePromotion.title || !product || !variant) {\n return basePrice;\n }\n\n const selectedVariant = {\n ...variant,\n price: {\n amount: basePrice,\n currencyCode: variant?.price?.currencyCode,\n },\n sellingPlanAllocation: hasSellingPlan\n ? (variant?.sellingPlanAllocation ?? { sellingPlan: {} })\n : null,\n };\n\n try {\n const biggestDiscount = getBiggestDiscount({\n activePromotion,\n product,\n selectedVariant,\n cart: stableCart,\n log,\n });\n return Math.max(basePrice - biggestDiscount, 0);\n } catch (error) {\n log(\"Error calculating discounted price\", {\n error: error.message,\n variantId: variant?.id,\n });\n return basePrice;\n }\n },\n [\n activePromotion?.title,\n activePromotion?.discounts?.map((discount) => discount.title).join(\",\"),\n stableCart,\n ],\n );\n\n return React.useMemo(\n () => ({\n abra: {\n activePromotion,\n getProductWithDiscount,\n getDiscountedPrice,\n logs: logRef.current,\n },\n }),\n [activePromotion, getProductWithDiscount, getDiscountedPrice],\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/discounts.js","../src/useAbra.js"],"sourcesContent":["// Pure discount math for useAbra. Moved verbatim from src/code-for-updating-custom-component.jsx.\n// getIdFromGid and productGidFromId are copied from @tapcart/mobile-components so the package has no imports.\nexport const getIdFromGid = (gid) => {\n if (!gid) return \"\";\n const arr = gid.split(\"/\");\n return arr[arr.length - 1] || \"\";\n};\n\nexport const productGidFromId = (id) => {\n if (!id) return null;\n if (id.startsWith(\"gid://shopify/Product/\")) return id;\n return \"gid://shopify/Product/\" + id;\n};\n\n// BXGY customer-gets: new payloads carry cards on customerGets.productCards,\n// legacy payloads a single {quantity, items} pair at the root.\nexport const getBxgyGetsCards = (customerGets) => {\n if (\n Array.isArray(customerGets?.productCards) &&\n customerGets.productCards.length > 0\n ) {\n return customerGets.productCards;\n }\n if (customerGets?.items != null) {\n return [\n {\n quantity: customerGets.quantity,\n items: customerGets.items,\n purchaseType: customerGets.purchaseType,\n },\n ];\n }\n return [];\n};\n\nexport const getDiscountForProductDiscount = ({\n targetDiscount,\n handle,\n variantId,\n selectedVariant,\n}) => {\n const isProductEntitledForProductDiscount = () => {\n if (targetDiscount.entitled?.all) {\n return true;\n }\n\n if (targetDiscount.entitled?.variants) {\n if (variantId && targetDiscount.entitled.variants.includes(variantId)) {\n return true;\n }\n }\n\n if (targetDiscount.entitled?.products) {\n if (handle && targetDiscount.entitled.products.includes(handle)) {\n return true;\n }\n }\n return false;\n };\n if (!isProductEntitledForProductDiscount()) return 0;\n\n if (targetDiscount.discountValue?.type === \"DiscountAmount\") {\n return targetDiscount.discountValue.discountAmount.cents / 100;\n } else if (targetDiscount.discountValue?.type === \"DiscountPercentage\") {\n return (\n parseFloat(selectedVariant.price.amount) *\n targetDiscount.discountValue.percentage\n );\n }\n};\n\nexport const getDiscountForMultiValueCollection = ({\n targetDiscount,\n handle,\n selectedVariant,\n}) => {\n if (\n !targetDiscount?.discountValue?.productDiscounts ||\n targetDiscount.discountValue.productDiscounts.length === 0\n )\n return 0;\n\n const entitledProductDiscounts =\n targetDiscount.discountValue.productDiscounts.filter((discount) =>\n (discount.products ?? []).includes(handle),\n ) || [];\n\n return entitledProductDiscounts.reduce((max, discountValue) => {\n let discountAmount = 0;\n\n if (discountValue.value.type === \"DiscountAmount\") {\n discountAmount = discountValue.value.discountAmount.cents / 100;\n } else if (discountValue.value.type === \"DiscountPercentage\") {\n discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (discountValue.value.percentage / 100);\n }\n\n return Math.max(max, discountAmount);\n }, 0);\n};\n\nexport const getDiscountForMultiValueProduct = ({\n targetDiscount,\n variantId,\n selectedVariant,\n}) => {\n if (!variantId) return 0;\n if (\n !targetDiscount?.discountValue?.variantDiscounts ||\n targetDiscount?.discountValue?.variantDiscounts.length === 0\n )\n return 0;\n\n const entitledVariantDiscounts =\n targetDiscount.discountValue.variantDiscounts.filter((discount) =>\n (discount.variants ?? []).includes(variantId),\n ) ?? [];\n\n return entitledVariantDiscounts.reduce((max, discountValue) => {\n let discountAmount = 0;\n\n if (discountValue.value.type === \"DiscountAmount\") {\n discountAmount = discountValue.value.discountAmount.cents / 100;\n } else if (discountValue.value.type === \"DiscountPercentage\") {\n discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (discountValue.value.percentage / 100);\n }\n\n return Math.max(max, discountAmount);\n }, 0);\n};\n\nexport const getDiscountForTierDiscount = ({\n targetDiscount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n}) => {\n if (!targetDiscount.discountValue?.tiers) return 0;\n if (targetDiscount.discountValue?.tiersType === \"FREE_GIFT\") return 0;\n\n const currentCollectionHandle = product.sourceCollection?.handle;\n const isProductEntitledToTierDiscount = () => {\n if (targetDiscount.discountValue?.entitled?.all) {\n return true;\n }\n\n if (targetDiscount.discountValue?.entitled?.collections) {\n if (\n currentCollectionHandle &&\n targetDiscount.discountValue?.entitled?.collections.includes(\n currentCollectionHandle,\n )\n ) {\n return true;\n }\n }\n\n if (targetDiscount.discountValue?.entitled?.products) {\n if (\n handle &&\n targetDiscount.discountValue?.entitled?.products.includes(handle)\n ) {\n return true;\n }\n }\n\n if (targetDiscount.discountValue?.entitled?.variants) {\n if (\n variantId &&\n targetDiscount.discountValue?.entitled?.variants.includes(variantId)\n ) {\n return true;\n }\n }\n\n return false;\n };\n if (!isProductEntitledToTierDiscount()) return 0;\n\n const getBiggestEligibleTier = () => {\n const isItemEligibleWithSelectedPurchaseType = (item, discount) => {\n if (\n discount.appliesOnSubscription &&\n !discount.appliesOnOneTimePurchase\n ) {\n return Boolean(item.sellingPlanAllocation);\n } else if (\n !discount.appliesOnSubscription &&\n discount.appliesOnOneTimePurchase\n ) {\n return !item.sellingPlanAllocation;\n } else {\n return true;\n }\n };\n const isCartItemEntitledToGiveDiscount = (item) => {\n if (!targetDiscount || !targetDiscount.entitled) {\n return false;\n }\n\n if (targetDiscount.entitled.all) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n\n if (targetDiscount.entitled.variants) {\n if (\n targetDiscount.entitled.variants?.includes(\n item.variantId.toString(),\n )\n ) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n if (targetDiscount.entitled.products) {\n if (targetDiscount.entitled.products?.includes(item.handle)) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n return false;\n };\n\n const getEntitledQuantityAndTotal = () => {\n const entitledItems = (cart?.items || []).filter((item) => {\n return isCartItemEntitledToGiveDiscount(item);\n });\n\n const { entitledQuantity, entitledTotal } = entitledItems.reduce(\n (acc, item) => {\n acc.entitledQuantity += item.quantity;\n acc.entitledTotal +=\n parseFloat((item.price?.amount ?? 0) * 100) * item.quantity;\n\n return acc;\n },\n { entitledQuantity: 0, entitledTotal: 0 },\n );\n\n return { entitledQuantity, entitledTotal };\n };\n\n const isPrerequisiteValid = (prerequisite, quantity, subtotal) => {\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToQuantity) {\n if (\n Number(quantity) <\n Number(prerequisite.minimumRequirement.greaterThanOrEqualToQuantity)\n ) {\n return false;\n }\n }\n\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToSubtotal) {\n if (\n subtotal <\n prerequisite.minimumRequirement.greaterThanOrEqualToSubtotal.cents\n ) {\n return false;\n }\n }\n\n return true;\n };\n\n const { entitledQuantity, entitledTotal } = getEntitledQuantityAndTotal();\n\n let currentBiggestTierIndex = -1;\n for (let i = 0; i < targetDiscount.discountValue?.tiers?.length; i++) {\n const currentTier = targetDiscount.discountValue.tiers[i];\n if (\n isPrerequisiteValid(\n currentTier.prerequisite,\n entitledQuantity,\n entitledTotal,\n )\n ) {\n currentBiggestTierIndex = i;\n } else {\n break;\n }\n }\n return currentBiggestTierIndex;\n };\n const biggestEligibleTierIndex = getBiggestEligibleTier();\n\n if (biggestEligibleTierIndex < 0) return 0;\n\n const biggestEligibleTier =\n targetDiscount.discountValue.tiers[biggestEligibleTierIndex];\n if (!biggestEligibleTier || !biggestEligibleTier.value) return 0;\n\n if (\n biggestEligibleTier.value.type === \"DiscountPercentage\" &&\n biggestEligibleTier.value.percentage\n ) {\n const discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (biggestEligibleTier.value.percentage / 100);\n\n return discountAmount;\n }\n};\n\nexport const getDiscountForVolumeDiscount = ({\n targetDiscount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n}) => {\n if (!targetDiscount.discountValue?.tiers) return 0;\n if (targetDiscount.discountValue?.tiersType === \"FREE_GIFT\") return 0;\n\n // customer-gets purchaseType gates the displayed price; per-variant mode\n // (ELIGIBLE_VARIANTS) ignores it\n const customerGets = targetDiscount.discountValue?.customerGets;\n const getsAppliesTo = customerGets?.appliesTo || \"ELIGIBLE_VARIANTS\";\n const getsPurchaseType =\n getsAppliesTo !== \"ELIGIBLE_VARIANTS\"\n ? customerGets?.purchaseType\n : undefined;\n const selectedHasSellingPlan = Boolean(\n selectedVariant?.sellingPlanAllocation,\n );\n if (getsPurchaseType === \"SUBSCRIPTION\" && !selectedHasSellingPlan)\n return 0;\n if (getsPurchaseType === \"ONE_TIME\" && selectedHasSellingPlan) return 0;\n\n const currentCollectionHandle = product.sourceCollection?.handle;\n const isProductEntitledToVolumeDiscount = () => {\n if (targetDiscount.discountValue?.entitled?.all) {\n return true;\n }\n\n if (targetDiscount.discountValue?.entitled?.collections) {\n if (\n currentCollectionHandle &&\n targetDiscount.discountValue?.entitled?.collections.includes(\n currentCollectionHandle,\n )\n ) {\n return true;\n }\n }\n\n if (targetDiscount?.entitled?.products) {\n if (handle && targetDiscount?.entitled?.products.includes(handle)) {\n return true;\n }\n }\n\n if (targetDiscount?.entitled?.variants) {\n if (\n variantId &&\n targetDiscount?.entitled?.variants.includes(variantId)\n ) {\n return true;\n }\n }\n\n return false;\n };\n if (!isProductEntitledToVolumeDiscount()) return 0;\n\n const getBiggestEligibleTier = () => {\n const isItemEligibleWithSelectedPurchaseType = (item, discount) => {\n if (\n discount.appliesOnSubscription &&\n !discount.appliesOnOneTimePurchase\n ) {\n return Boolean(item.sellingPlanAllocation);\n } else if (\n !discount.appliesOnSubscription &&\n discount.appliesOnOneTimePurchase\n ) {\n return !item.sellingPlanAllocation;\n } else {\n return true;\n }\n };\n const isCartItemEntitledToGiveDiscount = (item) => {\n if (!targetDiscount || !targetDiscount.entitled) {\n return false;\n }\n\n if (targetDiscount.entitled.all) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n\n if (targetDiscount.entitled.variants) {\n if (\n targetDiscount.entitled.variants?.includes(\n item.variantId.toString(),\n )\n ) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n if (targetDiscount.entitled.products) {\n if (targetDiscount.entitled.products?.includes(item.handle)) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n return false;\n };\n\n const getEntitledQuantityAndTotal = () => {\n const entitledItems = (cart?.items || []).filter((item) => {\n return isCartItemEntitledToGiveDiscount(item);\n });\n\n const { entitledQuantity, entitledTotal } = entitledItems.reduce(\n (acc, item) => {\n acc.entitledQuantity += item.quantity;\n acc.entitledTotal +=\n parseFloat((item.price?.amount ?? 0) * 100) * item.quantity;\n\n return acc;\n },\n { entitledQuantity: 0, entitledTotal: 0 },\n );\n\n return { entitledQuantity, entitledTotal };\n };\n\n const isPrerequisiteValid = (prerequisite, quantity, subtotal) => {\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToQuantity) {\n if (\n Number(quantity) <\n Number(prerequisite.minimumRequirement.greaterThanOrEqualToQuantity)\n ) {\n return false;\n }\n }\n\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToSubtotal) {\n if (\n subtotal <\n prerequisite.minimumRequirement.greaterThanOrEqualToSubtotal.cents\n ) {\n return false;\n }\n }\n\n return true;\n };\n\n const { entitledQuantity, entitledTotal } = getEntitledQuantityAndTotal();\n\n let currentBiggestTierIndex = -1;\n for (let i = 0; i < targetDiscount.discountValue?.tiers?.length; i++) {\n const currentTier = targetDiscount.discountValue.tiers[i];\n if (\n isPrerequisiteValid(\n currentTier.prerequisite,\n entitledQuantity,\n entitledTotal,\n )\n ) {\n currentBiggestTierIndex = i;\n } else {\n break;\n }\n }\n return currentBiggestTierIndex;\n };\n const biggestEligibleTierIndex = getBiggestEligibleTier();\n\n if (biggestEligibleTierIndex < 0) return 0;\n\n const biggestEligibleTier =\n targetDiscount.discountValue.tiers[biggestEligibleTierIndex];\n if (!biggestEligibleTier || !biggestEligibleTier.value) return 0;\n\n if (\n biggestEligibleTier.value.type === \"DiscountPercentage\" &&\n biggestEligibleTier.value.percentage\n ) {\n const discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (biggestEligibleTier.value.percentage / 100);\n\n return discountAmount;\n }\n};\n\nexport const getDiscountForMultiEffectTiers = ({\n targetDiscount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n log,\n}) => {\n const isProductEntitledToDiscount = (discount) => {\n if (discount.entitled?.all) {\n return true;\n }\n\n if (discount.entitled?.collections) {\n if (\n currentCollectionHandle &&\n discount.entitled?.collections.includes(currentCollectionHandle)\n ) {\n return true;\n }\n }\n\n if (discount.entitled?.products) {\n if (handle && discount.entitled?.products.includes(handle)) {\n return true;\n }\n }\n\n if (discount.entitled?.variants) {\n if (variantId && discount.entitled?.variants.includes(variantId)) {\n return true;\n }\n }\n\n return false;\n };\n const getBiggestEligibleTier = () => {\n const isItemEligibleWithSelectedPurchaseType = (item, discount) => {\n if (\n discount.appliesOnSubscription &&\n !discount.appliesOnOneTimePurchase\n ) {\n return Boolean(item.sellingPlanAllocation);\n } else if (\n !discount.appliesOnSubscription &&\n discount.appliesOnOneTimePurchase\n ) {\n return !item.sellingPlanAllocation;\n } else {\n return true;\n }\n };\n const isCartItemEntitledToGiveDiscount = (item) => {\n if (!targetDiscount || !targetDiscount.entitled) {\n return false;\n }\n\n if (targetDiscount.entitled.all) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n\n if (targetDiscount.entitled.variants) {\n if (\n targetDiscount.entitled.variants?.includes(\n item.variantId.toString(),\n )\n ) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n if (targetDiscount.entitled.products) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n\n return false;\n };\n\n const getEntitledQuantityAndTotal = () => {\n const entitledItems = (cart?.items || []).filter((item) => {\n return isCartItemEntitledToGiveDiscount(item);\n });\n\n const { entitledQuantity, entitledTotal } = entitledItems.reduce(\n (acc, item) => {\n acc.entitledQuantity += item.quantity;\n acc.entitledTotal +=\n parseFloat((item.price?.amount ?? 0) * 100) * item.quantity;\n\n return acc;\n },\n { entitledQuantity: 0, entitledTotal: 0 },\n );\n\n return { entitledQuantity, entitledTotal };\n };\n\n const isPrerequisiteValid = (prerequisite, quantity, subtotal) => {\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToQuantity) {\n if (\n Number(quantity) <\n Number(prerequisite.minimumRequirement.greaterThanOrEqualToQuantity)\n ) {\n return false;\n }\n }\n\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToSubtotal) {\n if (\n subtotal <\n prerequisite.minimumRequirement.greaterThanOrEqualToSubtotal.cents\n ) {\n return false;\n }\n }\n\n return true;\n };\n\n log(\"getEntitledQuantityAndTotal\");\n const { entitledQuantity, entitledTotal } = getEntitledQuantityAndTotal();\n\n log(\"getEntitledQuantityAndTotal\", { entitledQuantity, entitledTotal });\n\n let currentBiggestTierIndex = -1;\n for (let i = 0; i < targetDiscount.discountValue?.tiers?.length; i++) {\n const currentTier = targetDiscount.discountValue.tiers[i];\n if (\n isPrerequisiteValid(\n currentTier.prerequisite,\n entitledQuantity,\n entitledTotal,\n )\n ) {\n currentBiggestTierIndex = i;\n } else {\n break;\n }\n }\n return currentBiggestTierIndex;\n };\n\n if (\n !targetDiscount.discountValue?.tiers ||\n targetDiscount.discountValue?.tiers.length === 0\n )\n return 0;\n\n log(\"getBiggestEligibleTier\");\n const currentCollectionHandle = product?.sourceCollection?.handle;\n const biggestEligibleTierIndex = getBiggestEligibleTier();\n log(\"getBiggestEligibleTier\", { biggestEligibleTierIndex });\n\n if (biggestEligibleTierIndex < 0) return 0;\n\n const productDiscountsAvailableOnTier =\n targetDiscount.discountValue.tiers\n .slice(0, biggestEligibleTierIndex + 1)\n ?.filter((tier) =>\n tier.discounts.some(\n (discount) => discount.type === \"ProductDiscount\",\n ),\n )\n ?.flatMap(\n (tier) =>\n tier.discounts.find(\n (discount) => discount.type === \"ProductDiscount\",\n )?.value ?? [],\n ) ?? [];\n\n // Per-entry purchaseType replaces the promotion-level flags: an entry only\n // affects the price branch matching the selected purchase state.\n const selectedHasSellingPlan = Boolean(\n selectedVariant?.sellingPlanAllocation,\n );\n const eligibleProductDiscounts = productDiscountsAvailableOnTier.filter(\n (discount) => {\n if (discount.purchaseType === \"SUBSCRIPTION\" && !selectedHasSellingPlan)\n return false;\n if (discount.purchaseType === \"ONE_TIME\" && selectedHasSellingPlan)\n return false;\n return isProductEntitledToDiscount(discount);\n },\n );\n\n const maxDiscountAmount = eligibleProductDiscounts.reduce(\n (max, discount) => {\n let discountAmount = 0;\n if (discount.value.type === \"DiscountAmount\") {\n discountAmount = parseFloat(discount.value.discountAmount.amount);\n } else if (discount.value.type === \"DiscountPercentage\") {\n discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (discount.value.percentage / 100);\n }\n return Math.max(max, discountAmount);\n },\n 0,\n );\n return maxDiscountAmount;\n};\n\nexport const isProductMatchingBxgyCardItems = (handle, variantId, items) => {\n if (!items) return false;\n if (items.type === \"AllProducts\") return true;\n\n if (items.type === \"SpecificProducts\" && items.products) {\n for (const product of items.products) {\n if (product.handle === handle) {\n if (!product.variants || product.variants.length === 0) return true;\n for (const variant of product.variants) {\n const vId = variant.id?.includes(\"/\")\n ? variant.id.split(\"/\").pop()\n : variant.id;\n if (vId === variantId || variant.id === variantId) return true;\n }\n }\n }\n }\n\n if (items.type === \"SpecificCollections\" && items.collections) {\n for (const collection of items.collections) {\n if (collection.products?.includes(handle)) return true;\n }\n }\n\n return false;\n};\n\nexport const isCartItemMatchingBxgyCard = (item, card) => {\n const items = card.items;\n if (items.type === \"AllProducts\") return true;\n\n if (items.type === \"SpecificProducts\" && items.products) {\n const itemVariantId = item.variantId?.toString();\n for (const product of items.products) {\n if (product.variants && product.variants.length > 0) {\n for (const variant of product.variants) {\n const vId = variant.id?.includes(\"/\")\n ? variant.id.split(\"/\").pop()\n : variant.id;\n if (vId === itemVariantId || variant.id === itemVariantId)\n return true;\n }\n }\n if (item.handle && product.handle === item.handle) return true;\n }\n }\n\n if (items.type === \"SpecificCollections\" && items.collections) {\n for (const collection of items.collections) {\n if (item.handle && collection.products?.includes(item.handle))\n return true;\n }\n }\n\n return false;\n};\n\nexport const areAllBxgyProductCardsMet = (cart, bxgy) => {\n if (!bxgy?.productCards?.length || !cart?.items) return false;\n\n const globalRequirementType = bxgy.requirementType ?? \"QUANTITY\";\n\n for (const card of bxgy.productCards) {\n const requirementType = card.requirementType ?? globalRequirementType;\n let totalQuantity = 0;\n let totalSubtotal = 0;\n\n for (const item of cart.items) {\n if (isCartItemMatchingBxgyCard(item, card)) {\n // Check purchaseType on the card against the cart item\n const itemHasSellingPlan = Boolean(item.sellingPlanAllocation);\n if (card.purchaseType === \"SUBSCRIPTION\" && !itemHasSellingPlan) {\n continue;\n }\n if (card.purchaseType === \"ONE_TIME\" && itemHasSellingPlan) {\n continue;\n }\n\n totalQuantity += item.quantity || 0;\n totalSubtotal +=\n parseFloat(item.price?.amount || 0) * 100 * (item.quantity || 0);\n }\n }\n\n if (requirementType === \"SUBTOTAL\") {\n const required = card.minimumSubtotal?.cents || 0;\n if (required > 0 && totalSubtotal < required) return false;\n } else {\n const required = card.quantity || 0;\n if (required > 0 && totalQuantity < required) return false;\n }\n }\n\n return true;\n};\n\nexport const getDiscountForBxgyDiscount = ({\n targetDiscount,\n handle,\n variantId,\n selectedVariant,\n cart,\n}) => {\n const bxgy = targetDiscount.discountValue;\n if (!bxgy?.productCards || !bxgy?.customerGets) return 0;\n\n const customerGetsValueType = bxgy.customerGets.value?.type;\n\n if (\n customerGetsValueType === \"Gift\" ||\n customerGetsValueType === \"FixedPrice\"\n ) {\n return 0;\n }\n\n // Gets-card purchaseType gates the displayed price against the selected\n // purchase state (new payloads carry gets cards; legacy has plain items).\n const getsCards = getBxgyGetsCards(bxgy.customerGets);\n const selectedHasSellingPlan = Boolean(\n selectedVariant?.sellingPlanAllocation,\n );\n const matchesGetsPurchaseType = (card) => {\n if (card.purchaseType === \"SUBSCRIPTION\" && !selectedHasSellingPlan)\n return false;\n if (card.purchaseType === \"ONE_TIME\" && selectedHasSellingPlan)\n return false;\n return true;\n };\n\n const isEntitledToReceive = () => {\n if (bxgy.customerGets.applyToProductCardItems) {\n return bxgy.productCards.some((card) =>\n isProductMatchingBxgyCardItems(handle, variantId, card.items),\n );\n }\n return getsCards.some(\n (card) =>\n matchesGetsPurchaseType(card) &&\n isProductMatchingBxgyCardItems(handle, variantId, card.items),\n );\n };\n\n if (!isEntitledToReceive()) return 0;\n\n // Check if this product matches a productCard with purchase type requirement\n // Look up the actual cart item to check if it has a subscription selected\n const matchingCartItem = (cart?.items || []).find(\n (item) => item.variantId?.toString() === variantId?.toString() || item.handle === handle\n );\n const cartItemHasSellingPlan = Boolean(matchingCartItem?.sellingPlanAllocation);\n\n for (const card of bxgy.productCards) {\n if (isProductMatchingBxgyCardItems(handle, variantId, card.items)) {\n if (card.purchaseType === \"SUBSCRIPTION\" && !cartItemHasSellingPlan) {\n return 0;\n } else if (card.purchaseType === \"ONE_TIME\" && cartItemHasSellingPlan) {\n return 0;\n }\n }\n }\n\n\n if (!areAllBxgyProductCardsMet(cart, bxgy)) return 0;\n\n const originalPrice = parseFloat(selectedVariant?.price?.amount || 0);\n if (originalPrice <= 0) return 0;\n\n if (customerGetsValueType === \"DiscountPercentage\") {\n const percentage = bxgy.customerGets.value.percentage || 0;\n return originalPrice * (percentage / 100);\n } else if (customerGetsValueType === \"DiscountAmount\") {\n const cents = bxgy.customerGets.value.discountAmount?.cents || 0;\n return Math.min(cents / 100, originalPrice);\n }\n\n return 0;\n};\n\nexport const getDiscountValueForDiscount = ({\n product,\n selectedVariant,\n cart,\n discount,\n log,\n}) => {\n const handle = product?.handle;\n const variantId = getIdFromGid(selectedVariant?.id);\n\n if (!handle || !discount) return 0;\n\n if (discount.discountValue?.type === \"DiscountCodeBxgy\") {\n return 0;\n }\n\n if (discount.discountValue?.type === \"Gift\") {\n return 0;\n }\n\n if (discount.discountValue?.type === \"BxgyDiscount\") {\n return getDiscountForBxgyDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n selectedVariant,\n cart,\n });\n }\n\n if (discount.discountValue?.type === \"DiscountMultiValueProduct\") {\n return getDiscountForMultiValueProduct({\n targetDiscount: discount,\n variantId,\n selectedVariant,\n });\n }\n\n if (discount.discountValue?.type === \"DiscountMultiValueCollection\") {\n return getDiscountForMultiValueCollection({\n targetDiscount: discount,\n handle,\n selectedVariant,\n });\n }\n\n if (discount.discountValue?.type === \"TieredDiscount\") {\n return getDiscountForTierDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n });\n }\n\n if (discount.discountValue?.type === \"VolumeDiscount\") {\n return getDiscountForVolumeDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n });\n }\n\n if (discount.discountValue?.type === \"CollectionOrderDiscount\") {\n return 0;\n }\n\n if (discount.discountValue?.type === \"MultiEffectTiers\") {\n log(\"getDiscountForMultiEffectTiers\");\n return getDiscountForMultiEffectTiers({\n targetDiscount: discount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n log,\n });\n }\n\n if (discount.discountValue?.type === \"ProductDiscount\") {\n return getDiscountForProductDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n selectedVariant,\n });\n }\n\n if (discount.discountClass === \"ORDER\") {\n return 0;\n }\n if (discount.discountClass === \"SHIPPING\") {\n return 0;\n }\n\n if (discount.discountClass === \"PRODUCT\") {\n return getDiscountForProductDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n selectedVariant,\n });\n }\n\n return 0;\n};\n\nexport const getBiggestDiscount = ({\n activePromotion,\n product,\n selectedVariant,\n cart,\n log,\n}) => {\n const discounts = Object.values(activePromotion?.discounts ?? []);\n log(\"Calculating biggest discount\", {\n discountCount: discounts.length,\n productId: product?.handle,\n collectionId: product?.sourceCollection?.handle,\n variantId: selectedVariant?.id,\n hasSellingPlan: !!selectedVariant?.sellingPlanAllocation,\n });\n\n const biggestDiscount = discounts.reduce((max, discount) => {\n const hasSellingPlan = Boolean(selectedVariant?.sellingPlanAllocation);\n\n // For BXGY discounts, purchase type is checked PER CARD (card.purchaseType),\n // not at the top level. Skip top-level appliesOnSubscription/appliesOnOneTimePurchase.\n // For other discount types, still use the top-level flags — unless a\n // customer-gets purchaseType overrides them (checked per discount type below).\n if (discount.discountValue?.type !== \"BxgyDiscount\") {\n let appliesOnSubscription = discount.appliesOnSubscription;\n let appliesOnOneTimePurchase = discount.appliesOnOneTimePurchase;\n\n if (discount.discountValue?.type === \"VolumeDiscount\") {\n const customerGets = discount.discountValue.customerGets;\n const getsAppliesTo = customerGets?.appliesTo || \"ELIGIBLE_VARIANTS\";\n const getsPurchaseType =\n getsAppliesTo !== \"ELIGIBLE_VARIANTS\"\n ? customerGets?.purchaseType\n : undefined;\n if (getsPurchaseType) {\n appliesOnSubscription = getsPurchaseType !== \"ONE_TIME\";\n appliesOnOneTimePurchase = getsPurchaseType !== \"SUBSCRIPTION\";\n }\n }\n\n if (discount.discountValue?.type === \"MultiEffectTiers\") {\n // Entries with their own purchaseType filter themselves in\n // getDiscountForMultiEffectTiers; don't gate the whole discount here.\n const hasPerEntryPurchaseType = (\n discount.discountValue.tiers ?? []\n ).some((tier) =>\n (tier.discounts ?? []).some(\n (tierDiscount) =>\n tierDiscount.type === \"ProductDiscount\" &&\n (Array.isArray(tierDiscount.value)\n ? tierDiscount.value\n : []\n ).some((entry) => entry.purchaseType),\n ),\n );\n if (hasPerEntryPurchaseType) {\n appliesOnSubscription = true;\n appliesOnOneTimePurchase = true;\n }\n }\n\n if (appliesOnSubscription && !appliesOnOneTimePurchase) {\n if (!hasSellingPlan) {\n log(\"Skipping subscription-only discount (no subscription selected)\", {\n discountType: discount.discountValue?.type,\n });\n return max;\n }\n }\n\n if (!appliesOnSubscription && appliesOnOneTimePurchase) {\n if (hasSellingPlan) {\n log(\"Skipping one-time-only discount (subscription selected)\", {\n discountType: discount.discountValue?.type,\n });\n return max;\n }\n }\n }\n\n const discountValue = getDiscountValueForDiscount({\n product,\n selectedVariant,\n cart,\n discount,\n log,\n });\n log(\"Discount calculated\", {\n discountType: discount.discountValue?.type,\n discountValue,\n maxSoFar: max,\n appliesOnSubscription: discount.appliesOnSubscription,\n appliesOnOneTimePurchase: discount.appliesOnOneTimePurchase,\n hasSellingPlan,\n });\n return Math.max(max, discountValue);\n }, 0);\n\n log(\"Final biggest discount\", { biggestDiscount });\n return biggestDiscount;\n};\n\nexport const parsePromotionIfActive = (promotionObject, now = new Date()) => {\n try {\n // Handle both object and string cases for backward compatibility\n const promotion =\n typeof promotionObject === \"string\"\n ? JSON.parse(promotionObject ?? \"{}\")\n : promotionObject;\n\n if (!promotion.startsAt || !promotion.status || !promotion.title)\n return undefined;\n const startsAt = new Date(promotion.startsAt);\n const endsAt = promotion.endsAt ? new Date(promotion.endsAt) : null;\n\n if (\n (promotion.status === \"ACTIVE\" || promotion.status === \"SCHEDULED\") &&\n now >= startsAt &&\n (!endsAt || now <= endsAt)\n ) {\n return promotion;\n }\n\n return undefined;\n } catch (error) {\n console.error(\"Failed to parse promotion:\", error);\n return undefined;\n }\n};\n","import {\n getBiggestDiscount,\n parsePromotionIfActive,\n getIdFromGid,\n productGidFromId,\n} from \"./discounts.js\";\n\nexport default function useAbra({ React, useTapcart, tapcartData }) {\n const Tapcart = useTapcart();\n const [activePromotion, setActivePromotion] = React.useState(undefined);\n const renderCountRef = React.useRef(0);\n const logRef = React.useRef([]);\n const variables = Tapcart?.variables;\n const { storeFrontAccessToken, storeUrl } =\n tapcartData?.integrations?.find((x) => x.name === \"abra-promotions\") ?? {};\n\n // Stable GraphQL fragment and functions\n const PRODUCT_FRAGMENT = React.useMemo(\n () => `\n id\n handle\n variants(first: 100) {\n edges {\n node {\n id\n handle: title\n price {\n amount\n currencyCode\n }\n }\n }\n }\n `,\n [],\n );\n\n const generateProductsQuery = React.useCallback(\n (ids, country) => {\n const productQueries = ids\n .map(\n (id, index) =>\n `product_${index}: product(id: \"${productGidFromId(id)}\") {\n ${PRODUCT_FRAGMENT}\n }`,\n )\n .join(\"\\n \");\n\n const inContextDirective = country\n ? `@inContext(country: ${country})`\n : \"\";\n\n return `\n query Products ${inContextDirective} {\n ${productQueries}\n }\n `;\n },\n [PRODUCT_FRAGMENT],\n );\n\n const graphqlDefaultBody = React.useCallback(\n (query, variables, storeFrontAccessToken) => {\n return {\n async: true,\n crossDomain: true,\n method: \"POST\",\n headers: {\n \"X-Shopify-Storefront-Access-Token\": storeFrontAccessToken,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n query,\n variables,\n }),\n };\n },\n [],\n );\n\n const fetchProducts = React.useCallback(\n async (ids, storeUrl, storeFrontAccessToken, country) => {\n if (!storeUrl || !storeFrontAccessToken) {\n return { error: \"Missing required configuration\" };\n }\n\n if (!ids || ids.length === 0) {\n return { data: [], error: \"No ids\" };\n }\n\n const GRAPHQL_URL = `https://${storeUrl}/api/2024-04/graphql.json`;\n const query = generateProductsQuery(ids, country);\n\n try {\n const response = await fetch(\n GRAPHQL_URL,\n graphqlDefaultBody(query, {}, storeFrontAccessToken),\n );\n\n if (response?.ok) {\n const responseBody = await response.json();\n const data = responseBody?.data;\n\n if (!data) {\n return { data: [], error: \"No data\" };\n }\n\n const products = Object.values(data).filter((item) => item !== null);\n\n return {\n data: products,\n error: null,\n };\n }\n\n const error = await response.text();\n return { data: [], error: error };\n } catch (err) {\n return { data: [], error: err.message };\n }\n },\n [generateProductsQuery, graphqlDefaultBody],\n );\n\n const useProductsCustom = React.useCallback(\n ({ ids, storeUrl, storeFrontAccessToken, country }) => {\n const [products, setProducts] = React.useState([]);\n const [loading, setLoading] = React.useState(true);\n const [error, setError] = React.useState(null);\n\n // Memoize ids to prevent infinite loops\n const idsString = React.useMemo(() => {\n if (!ids || !Array.isArray(ids) || ids.length === 0) return \"\";\n return [...ids].sort().join(\",\");\n }, [ids ? JSON.stringify([...ids].sort()) : \"\"]);\n\n React.useEffect(() => {\n const fetchData = async () => {\n if (!storeUrl || !storeFrontAccessToken) {\n if (!storeUrl) {\n setError(\"no store url\");\n }\n if (!storeFrontAccessToken) {\n setError(\"no store front access token\");\n }\n setProducts([]);\n setLoading(false);\n return;\n }\n\n if (!ids || ids.length === 0) {\n setProducts([]);\n setLoading(false);\n return;\n }\n\n const result = await fetchProducts(\n ids,\n storeUrl,\n storeFrontAccessToken,\n country,\n );\n\n try {\n if (result.data && result.data.length > 0) {\n const formattedProducts = result?.data?.map((product) => ({\n id: getIdFromGid(product.id),\n handle: product?.handle,\n variants: product?.variants?.edges?.map((variant) => ({\n id: getIdFromGid(variant?.node?.id),\n handle: variant?.node?.handle,\n price: variant?.node?.price,\n })),\n }));\n setProducts(formattedProducts);\n setError(result.error);\n } else {\n setProducts([]);\n setError(result.error);\n }\n } catch (error) {\n setError(error.message);\n }\n\n setLoading(false);\n };\n\n fetchData();\n }, [idsString, storeUrl, storeFrontAccessToken, country, fetchProducts]);\n\n return { products, loading, error };\n },\n [fetchProducts],\n );\n\n // Stable logging function that doesn't cause re-renders\n const log = React.useCallback((message, data = null) => {\n const timestamp = new Date().toISOString();\n const logEntry = {\n timestamp,\n message,\n data: data ? JSON.parse(JSON.stringify(data)) : null,\n renderCount: renderCountRef.current,\n };\n logRef.current.push(logEntry);\n\n // Keep only last 50 logs to prevent memory issues\n if (logRef.current.length > 100) {\n logRef.current = logRef.current.slice(-100);\n }\n }, []);\n\n // Create stable cart items reference to prevent infinite recreations\n const stableCartItems = React.useMemo(() => {\n const currentCartItems = variables?.cart?.items ?? [];\n\n if (!currentCartItems || currentCartItems.length === 0) {\n return [];\n }\n\n const mappedItems = currentCartItems.map((item) => ({\n productId: item.productId,\n variantId: item.variantId,\n quantity: item.quantity,\n sellingPlanAllocation: item.sellingPlanAllocation,\n }));\n\n return mappedItems;\n }, [\n (variables?.cart?.items || [])\n ?.map((item) => `${item.productId}-${item.variantId}-${item.quantity}`)\n ?.join(\",\"),\n ]);\n\n const ids = React.useMemo(\n () => (stableCartItems ?? []).map((item) => item.productId),\n [stableCartItems],\n );\n\n // Get country from cart currency or tapcartData\n const country = React.useMemo(() => {\n return (\n Tapcart?.variables?.cart?.currency?.slice(0, 2) || tapcartData?.country\n );\n }, [Tapcart?.variables?.cart?.currency, tapcartData?.country]);\n\n const {\n products: cartItems,\n loading: cartItemsLoading,\n error: cartItemsError,\n } = useProductsCustom({\n ids,\n storeUrl: storeUrl,\n storeFrontAccessToken: storeFrontAccessToken,\n country: country,\n });\n\n // Render limiter to prevent infinite recreations\n renderCountRef.current += 1;\n\n // Create stable cart reference to prevent infinite recreations\n const stableCart = React.useMemo(() => {\n if (!variables?.cart) {\n return null;\n }\n if (cartItemsLoading || cartItemsError) {\n return variables.cart;\n }\n\n if (!cartItems || cartItems.length === 0) {\n return variables.cart;\n }\n\n const processedItems = (stableCartItems || []).map((item) => {\n const _cartItem = cartItems?.find(\n (cartItem) => getIdFromGid(cartItem?.id) === item.productId,\n );\n if (!_cartItem) {\n return item;\n }\n const _variant = _cartItem?.variants?.find(\n (variant) => getIdFromGid(variant?.id) === item?.variantId,\n );\n if (!_variant) {\n return item;\n }\n\n const processedItem = {\n ...item,\n handle: _cartItem?.handle,\n price: _variant?.price,\n };\n\n return processedItem;\n });\n\n const result = {\n ...variables.cart,\n items: processedItems,\n };\n\n return result;\n }, [\n cartItems,\n cartItemsLoading,\n cartItemsError,\n (variables?.cart?.items || [])\n ?.map((item) => `${item.variantId}-${item.quantity}`)\n ?.join(\",\"),\n ]);\n\n // Effect: Initialize from storage and observe changes\n React.useEffect(() => {\n const storage = Tapcart?.variables?.storage || {};\n const abraData = storage[\"abra\"] || {};\n const storedPromotion = parsePromotionIfActive(\n abraData[\"active-promotion\"],\n );\n\n log(\"Storage promotion retrieved\", { storedPromotion });\n\n // Only update activePromotion if the promotion has actually changed\n if (\n storedPromotion?.title &&\n JSON.stringify(activePromotion) !== JSON.stringify(storedPromotion)\n ) {\n setActivePromotion(storedPromotion);\n } else if (!storedPromotion?.title && activePromotion) {\n // Clear promotion if it was removed from storage\n setActivePromotion(undefined);\n }\n }, [Tapcart?.variables?.storage?.[\"abra\"]?.[\"active-promotion\"]]);\n\n let getProductWithDiscount = React.useCallback(\n (product) => {\n if (!activePromotion || !activePromotion.title || !product) {\n log(\"No active promotion or product, returning original product\", {\n hasActivePromotion: !!activePromotion,\n hasProduct: !!product,\n });\n return product;\n }\n\n const _product = JSON.parse(JSON.stringify(product));\n let currencyCode = undefined;\n const variants = _product.variants.map((variant) => {\n const selectedVariant = JSON.parse(JSON.stringify(variant));\n currencyCode = currencyCode || selectedVariant?.price?.currencyCode;\n let biggestDiscount = 0;\n try {\n biggestDiscount = getBiggestDiscount({\n activePromotion,\n product: _product,\n selectedVariant,\n cart: stableCart,\n log,\n });\n } catch (error) {\n log(\"Error calculating discount\", {\n error: error.message,\n variantId: selectedVariant?.id,\n });\n biggestDiscount = 0;\n }\n\n const originalPrice = parseFloat(selectedVariant?.price?.amount ?? 0);\n const compareAtPrice = parseFloat(\n selectedVariant?.compareAtPrice?.amount ?? 0,\n );\n\n let referencePrice = originalPrice;\n if (compareAtPrice) {\n referencePrice = Math.max(originalPrice, compareAtPrice ?? 0);\n }\n\n let discountedPrice = Math.max(originalPrice - biggestDiscount, 0);\n\n selectedVariant.price = {\n amount: discountedPrice,\n currencyCode: selectedVariant.price.currencyCode,\n };\n selectedVariant.compareAtPrice = {\n amount: referencePrice,\n currencyCode: selectedVariant.price.currencyCode,\n };\n return selectedVariant;\n });\n _product.variants = variants;\n currencyCode = currencyCode || \"USD\";\n _product.compareAtPriceRange = {\n maxVariantPrice: {\n amount: variants.reduce((max, variant) => {\n return Math.max(\n max,\n parseFloat(variant.compareAtPrice.amount ?? variant.price.amount),\n );\n }, 0),\n currencyCode: currencyCode,\n },\n minVariantPrice: {\n amount: variants.reduce((min, variant) => {\n return Math.min(\n min,\n parseFloat(variant.compareAtPrice.amount ?? variant.price.amount),\n );\n }, Infinity),\n currencyCode: currencyCode,\n },\n };\n _product.priceRange = {\n maxVariantPrice: {\n amount: variants.reduce((max, variant) => {\n return Math.max(max, parseFloat(variant.price.amount));\n }, 0),\n currencyCode: currencyCode || \"USD\",\n },\n minVariantPrice: {\n amount: variants.reduce((min, variant) => {\n return Math.min(min, parseFloat(variant.price.amount));\n }, Infinity),\n currencyCode: currencyCode || \"USD\",\n },\n };\n _product.abra = true;\n\n return _product;\n },\n [\n activePromotion?.title,\n activePromotion?.discounts?.map((discount) => discount.title).join(\",\"),\n stableCart,\n ],\n );\n\n // Discounted price for a single price point (e.g. a selling-plan option in a\n // subscription selector). hasSellingPlan forces the subscription vs one-time\n // price branch regardless of what the variant carries.\n const getDiscountedPrice = React.useCallback(\n (product, variant, price, hasSellingPlan = false) => {\n const basePrice = parseFloat(price ?? variant?.price?.amount ?? 0);\n if (!activePromotion || !activePromotion.title || !product || !variant) {\n return basePrice;\n }\n\n const selectedVariant = {\n ...variant,\n price: {\n amount: basePrice,\n currencyCode: variant?.price?.currencyCode,\n },\n sellingPlanAllocation: hasSellingPlan\n ? (variant?.sellingPlanAllocation ?? { sellingPlan: {} })\n : null,\n };\n\n try {\n const biggestDiscount = getBiggestDiscount({\n activePromotion,\n product,\n selectedVariant,\n cart: stableCart,\n log,\n });\n return Math.max(basePrice - biggestDiscount, 0);\n } catch (error) {\n log(\"Error calculating discounted price\", {\n error: error.message,\n variantId: variant?.id,\n });\n return basePrice;\n }\n },\n [\n activePromotion?.title,\n activePromotion?.discounts?.map((discount) => discount.title).join(\",\"),\n stableCart,\n ],\n );\n\n return React.useMemo(\n () => ({\n abra: {\n activePromotion,\n getProductWithDiscount,\n getDiscountedPrice,\n logs: logRef.current,\n },\n }),\n [activePromotion, getProductWithDiscount, getDiscountedPrice],\n );\n}\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@abra-promotions/webhooks-for-tapcart",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Abra webhooks for enabling abra promotions inside the Tapcart platform",
|
|
6
|
-
"main": "dist/index.
|
|
6
|
+
"main": "dist/index.cjs",
|
|
7
7
|
"module": "dist/index.esm.js",
|
|
8
8
|
"types": "dist/index.d.ts",
|
|
9
|
+
"react-native": "dist/index.esm.js",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"react-native": "./dist/index.esm.js",
|
|
14
|
+
"import": "./dist/index.esm.js",
|
|
15
|
+
"require": "./dist/index.cjs",
|
|
16
|
+
"default": "./dist/index.esm.js"
|
|
17
|
+
},
|
|
18
|
+
"./package.json": "./package.json"
|
|
19
|
+
},
|
|
9
20
|
"files": [
|
|
10
21
|
"dist"
|
|
11
22
|
],
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/discounts.js","../src/useAbra.js"],"sourcesContent":["// Pure discount math for useAbra. Moved verbatim from src/code-for-updating-custom-component.jsx.\n// getIdFromGid and productGidFromId are copied from @tapcart/mobile-components so the package has no imports.\nexport const getIdFromGid = (gid) => {\n if (!gid) return \"\";\n const arr = gid.split(\"/\");\n return arr[arr.length - 1] || \"\";\n};\n\nexport const productGidFromId = (id) => {\n if (!id) return null;\n if (id.startsWith(\"gid://shopify/Product/\")) return id;\n return \"gid://shopify/Product/\" + id;\n};\n\n// BXGY customer-gets: new payloads carry cards on customerGets.productCards,\n// legacy payloads a single {quantity, items} pair at the root.\nexport const getBxgyGetsCards = (customerGets) => {\n if (\n Array.isArray(customerGets?.productCards) &&\n customerGets.productCards.length > 0\n ) {\n return customerGets.productCards;\n }\n if (customerGets?.items != null) {\n return [\n {\n quantity: customerGets.quantity,\n items: customerGets.items,\n purchaseType: customerGets.purchaseType,\n },\n ];\n }\n return [];\n};\n\nexport const getDiscountForProductDiscount = ({\n targetDiscount,\n handle,\n variantId,\n selectedVariant,\n}) => {\n const isProductEntitledForProductDiscount = () => {\n if (targetDiscount.entitled?.all) {\n return true;\n }\n\n if (targetDiscount.entitled?.variants) {\n if (variantId && targetDiscount.entitled.variants.includes(variantId)) {\n return true;\n }\n }\n\n if (targetDiscount.entitled?.products) {\n if (handle && targetDiscount.entitled.products.includes(handle)) {\n return true;\n }\n }\n return false;\n };\n if (!isProductEntitledForProductDiscount()) return 0;\n\n if (targetDiscount.discountValue?.type === \"DiscountAmount\") {\n return targetDiscount.discountValue.discountAmount.cents / 100;\n } else if (targetDiscount.discountValue?.type === \"DiscountPercentage\") {\n return (\n parseFloat(selectedVariant.price.amount) *\n targetDiscount.discountValue.percentage\n );\n }\n};\n\nexport const getDiscountForMultiValueCollection = ({\n targetDiscount,\n handle,\n selectedVariant,\n}) => {\n if (\n !targetDiscount?.discountValue?.productDiscounts ||\n targetDiscount.discountValue.productDiscounts.length === 0\n )\n return 0;\n\n const entitledProductDiscounts =\n targetDiscount.discountValue.productDiscounts.filter((discount) =>\n (discount.products ?? []).includes(handle),\n ) || [];\n\n return entitledProductDiscounts.reduce((max, discountValue) => {\n let discountAmount = 0;\n\n if (discountValue.value.type === \"DiscountAmount\") {\n discountAmount = discountValue.value.discountAmount.cents / 100;\n } else if (discountValue.value.type === \"DiscountPercentage\") {\n discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (discountValue.value.percentage / 100);\n }\n\n return Math.max(max, discountAmount);\n }, 0);\n};\n\nexport const getDiscountForMultiValueProduct = ({\n targetDiscount,\n variantId,\n selectedVariant,\n}) => {\n if (!variantId) return 0;\n if (\n !targetDiscount?.discountValue?.variantDiscounts ||\n targetDiscount?.discountValue?.variantDiscounts.length === 0\n )\n return 0;\n\n const entitledVariantDiscounts =\n targetDiscount.discountValue.variantDiscounts.filter((discount) =>\n (discount.variants ?? []).includes(variantId),\n ) ?? [];\n\n return entitledVariantDiscounts.reduce((max, discountValue) => {\n let discountAmount = 0;\n\n if (discountValue.value.type === \"DiscountAmount\") {\n discountAmount = discountValue.value.discountAmount.cents / 100;\n } else if (discountValue.value.type === \"DiscountPercentage\") {\n discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (discountValue.value.percentage / 100);\n }\n\n return Math.max(max, discountAmount);\n }, 0);\n};\n\nexport const getDiscountForTierDiscount = ({\n targetDiscount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n}) => {\n if (!targetDiscount.discountValue?.tiers) return 0;\n if (targetDiscount.discountValue?.tiersType === \"FREE_GIFT\") return 0;\n\n const currentCollectionHandle = product.sourceCollection?.handle;\n const isProductEntitledToTierDiscount = () => {\n if (targetDiscount.discountValue?.entitled?.all) {\n return true;\n }\n\n if (targetDiscount.discountValue?.entitled?.collections) {\n if (\n currentCollectionHandle &&\n targetDiscount.discountValue?.entitled?.collections.includes(\n currentCollectionHandle,\n )\n ) {\n return true;\n }\n }\n\n if (targetDiscount.discountValue?.entitled?.products) {\n if (\n handle &&\n targetDiscount.discountValue?.entitled?.products.includes(handle)\n ) {\n return true;\n }\n }\n\n if (targetDiscount.discountValue?.entitled?.variants) {\n if (\n variantId &&\n targetDiscount.discountValue?.entitled?.variants.includes(variantId)\n ) {\n return true;\n }\n }\n\n return false;\n };\n if (!isProductEntitledToTierDiscount()) return 0;\n\n const getBiggestEligibleTier = () => {\n const isItemEligibleWithSelectedPurchaseType = (item, discount) => {\n if (\n discount.appliesOnSubscription &&\n !discount.appliesOnOneTimePurchase\n ) {\n return Boolean(item.sellingPlanAllocation);\n } else if (\n !discount.appliesOnSubscription &&\n discount.appliesOnOneTimePurchase\n ) {\n return !item.sellingPlanAllocation;\n } else {\n return true;\n }\n };\n const isCartItemEntitledToGiveDiscount = (item) => {\n if (!targetDiscount || !targetDiscount.entitled) {\n return false;\n }\n\n if (targetDiscount.entitled.all) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n\n if (targetDiscount.entitled.variants) {\n if (\n targetDiscount.entitled.variants?.includes(\n item.variantId.toString(),\n )\n ) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n if (targetDiscount.entitled.products) {\n if (targetDiscount.entitled.products?.includes(item.handle)) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n return false;\n };\n\n const getEntitledQuantityAndTotal = () => {\n const entitledItems = (cart?.items || []).filter((item) => {\n return isCartItemEntitledToGiveDiscount(item);\n });\n\n const { entitledQuantity, entitledTotal } = entitledItems.reduce(\n (acc, item) => {\n acc.entitledQuantity += item.quantity;\n acc.entitledTotal +=\n parseFloat((item.price?.amount ?? 0) * 100) * item.quantity;\n\n return acc;\n },\n { entitledQuantity: 0, entitledTotal: 0 },\n );\n\n return { entitledQuantity, entitledTotal };\n };\n\n const isPrerequisiteValid = (prerequisite, quantity, subtotal) => {\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToQuantity) {\n if (\n Number(quantity) <\n Number(prerequisite.minimumRequirement.greaterThanOrEqualToQuantity)\n ) {\n return false;\n }\n }\n\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToSubtotal) {\n if (\n subtotal <\n prerequisite.minimumRequirement.greaterThanOrEqualToSubtotal.cents\n ) {\n return false;\n }\n }\n\n return true;\n };\n\n const { entitledQuantity, entitledTotal } = getEntitledQuantityAndTotal();\n\n let currentBiggestTierIndex = -1;\n for (let i = 0; i < targetDiscount.discountValue?.tiers?.length; i++) {\n const currentTier = targetDiscount.discountValue.tiers[i];\n if (\n isPrerequisiteValid(\n currentTier.prerequisite,\n entitledQuantity,\n entitledTotal,\n )\n ) {\n currentBiggestTierIndex = i;\n } else {\n break;\n }\n }\n return currentBiggestTierIndex;\n };\n const biggestEligibleTierIndex = getBiggestEligibleTier();\n\n if (biggestEligibleTierIndex < 0) return 0;\n\n const biggestEligibleTier =\n targetDiscount.discountValue.tiers[biggestEligibleTierIndex];\n if (!biggestEligibleTier || !biggestEligibleTier.value) return 0;\n\n if (\n biggestEligibleTier.value.type === \"DiscountPercentage\" &&\n biggestEligibleTier.value.percentage\n ) {\n const discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (biggestEligibleTier.value.percentage / 100);\n\n return discountAmount;\n }\n};\n\nexport const getDiscountForVolumeDiscount = ({\n targetDiscount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n}) => {\n if (!targetDiscount.discountValue?.tiers) return 0;\n if (targetDiscount.discountValue?.tiersType === \"FREE_GIFT\") return 0;\n\n // customer-gets purchaseType gates the displayed price; per-variant mode\n // (ELIGIBLE_VARIANTS) ignores it\n const customerGets = targetDiscount.discountValue?.customerGets;\n const getsAppliesTo = customerGets?.appliesTo || \"ELIGIBLE_VARIANTS\";\n const getsPurchaseType =\n getsAppliesTo !== \"ELIGIBLE_VARIANTS\"\n ? customerGets?.purchaseType\n : undefined;\n const selectedHasSellingPlan = Boolean(\n selectedVariant?.sellingPlanAllocation,\n );\n if (getsPurchaseType === \"SUBSCRIPTION\" && !selectedHasSellingPlan)\n return 0;\n if (getsPurchaseType === \"ONE_TIME\" && selectedHasSellingPlan) return 0;\n\n const currentCollectionHandle = product.sourceCollection?.handle;\n const isProductEntitledToVolumeDiscount = () => {\n if (targetDiscount.discountValue?.entitled?.all) {\n return true;\n }\n\n if (targetDiscount.discountValue?.entitled?.collections) {\n if (\n currentCollectionHandle &&\n targetDiscount.discountValue?.entitled?.collections.includes(\n currentCollectionHandle,\n )\n ) {\n return true;\n }\n }\n\n if (targetDiscount?.entitled?.products) {\n if (handle && targetDiscount?.entitled?.products.includes(handle)) {\n return true;\n }\n }\n\n if (targetDiscount?.entitled?.variants) {\n if (\n variantId &&\n targetDiscount?.entitled?.variants.includes(variantId)\n ) {\n return true;\n }\n }\n\n return false;\n };\n if (!isProductEntitledToVolumeDiscount()) return 0;\n\n const getBiggestEligibleTier = () => {\n const isItemEligibleWithSelectedPurchaseType = (item, discount) => {\n if (\n discount.appliesOnSubscription &&\n !discount.appliesOnOneTimePurchase\n ) {\n return Boolean(item.sellingPlanAllocation);\n } else if (\n !discount.appliesOnSubscription &&\n discount.appliesOnOneTimePurchase\n ) {\n return !item.sellingPlanAllocation;\n } else {\n return true;\n }\n };\n const isCartItemEntitledToGiveDiscount = (item) => {\n if (!targetDiscount || !targetDiscount.entitled) {\n return false;\n }\n\n if (targetDiscount.entitled.all) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n\n if (targetDiscount.entitled.variants) {\n if (\n targetDiscount.entitled.variants?.includes(\n item.variantId.toString(),\n )\n ) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n if (targetDiscount.entitled.products) {\n if (targetDiscount.entitled.products?.includes(item.handle)) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n return false;\n };\n\n const getEntitledQuantityAndTotal = () => {\n const entitledItems = (cart?.items || []).filter((item) => {\n return isCartItemEntitledToGiveDiscount(item);\n });\n\n const { entitledQuantity, entitledTotal } = entitledItems.reduce(\n (acc, item) => {\n acc.entitledQuantity += item.quantity;\n acc.entitledTotal +=\n parseFloat((item.price?.amount ?? 0) * 100) * item.quantity;\n\n return acc;\n },\n { entitledQuantity: 0, entitledTotal: 0 },\n );\n\n return { entitledQuantity, entitledTotal };\n };\n\n const isPrerequisiteValid = (prerequisite, quantity, subtotal) => {\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToQuantity) {\n if (\n Number(quantity) <\n Number(prerequisite.minimumRequirement.greaterThanOrEqualToQuantity)\n ) {\n return false;\n }\n }\n\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToSubtotal) {\n if (\n subtotal <\n prerequisite.minimumRequirement.greaterThanOrEqualToSubtotal.cents\n ) {\n return false;\n }\n }\n\n return true;\n };\n\n const { entitledQuantity, entitledTotal } = getEntitledQuantityAndTotal();\n\n let currentBiggestTierIndex = -1;\n for (let i = 0; i < targetDiscount.discountValue?.tiers?.length; i++) {\n const currentTier = targetDiscount.discountValue.tiers[i];\n if (\n isPrerequisiteValid(\n currentTier.prerequisite,\n entitledQuantity,\n entitledTotal,\n )\n ) {\n currentBiggestTierIndex = i;\n } else {\n break;\n }\n }\n return currentBiggestTierIndex;\n };\n const biggestEligibleTierIndex = getBiggestEligibleTier();\n\n if (biggestEligibleTierIndex < 0) return 0;\n\n const biggestEligibleTier =\n targetDiscount.discountValue.tiers[biggestEligibleTierIndex];\n if (!biggestEligibleTier || !biggestEligibleTier.value) return 0;\n\n if (\n biggestEligibleTier.value.type === \"DiscountPercentage\" &&\n biggestEligibleTier.value.percentage\n ) {\n const discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (biggestEligibleTier.value.percentage / 100);\n\n return discountAmount;\n }\n};\n\nexport const getDiscountForMultiEffectTiers = ({\n targetDiscount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n log,\n}) => {\n const isProductEntitledToDiscount = (discount) => {\n if (discount.entitled?.all) {\n return true;\n }\n\n if (discount.entitled?.collections) {\n if (\n currentCollectionHandle &&\n discount.entitled?.collections.includes(currentCollectionHandle)\n ) {\n return true;\n }\n }\n\n if (discount.entitled?.products) {\n if (handle && discount.entitled?.products.includes(handle)) {\n return true;\n }\n }\n\n if (discount.entitled?.variants) {\n if (variantId && discount.entitled?.variants.includes(variantId)) {\n return true;\n }\n }\n\n return false;\n };\n const getBiggestEligibleTier = () => {\n const isItemEligibleWithSelectedPurchaseType = (item, discount) => {\n if (\n discount.appliesOnSubscription &&\n !discount.appliesOnOneTimePurchase\n ) {\n return Boolean(item.sellingPlanAllocation);\n } else if (\n !discount.appliesOnSubscription &&\n discount.appliesOnOneTimePurchase\n ) {\n return !item.sellingPlanAllocation;\n } else {\n return true;\n }\n };\n const isCartItemEntitledToGiveDiscount = (item) => {\n if (!targetDiscount || !targetDiscount.entitled) {\n return false;\n }\n\n if (targetDiscount.entitled.all) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n\n if (targetDiscount.entitled.variants) {\n if (\n targetDiscount.entitled.variants?.includes(\n item.variantId.toString(),\n )\n ) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n if (targetDiscount.entitled.products) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n\n return false;\n };\n\n const getEntitledQuantityAndTotal = () => {\n const entitledItems = (cart?.items || []).filter((item) => {\n return isCartItemEntitledToGiveDiscount(item);\n });\n\n const { entitledQuantity, entitledTotal } = entitledItems.reduce(\n (acc, item) => {\n acc.entitledQuantity += item.quantity;\n acc.entitledTotal +=\n parseFloat((item.price?.amount ?? 0) * 100) * item.quantity;\n\n return acc;\n },\n { entitledQuantity: 0, entitledTotal: 0 },\n );\n\n return { entitledQuantity, entitledTotal };\n };\n\n const isPrerequisiteValid = (prerequisite, quantity, subtotal) => {\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToQuantity) {\n if (\n Number(quantity) <\n Number(prerequisite.minimumRequirement.greaterThanOrEqualToQuantity)\n ) {\n return false;\n }\n }\n\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToSubtotal) {\n if (\n subtotal <\n prerequisite.minimumRequirement.greaterThanOrEqualToSubtotal.cents\n ) {\n return false;\n }\n }\n\n return true;\n };\n\n log(\"getEntitledQuantityAndTotal\");\n const { entitledQuantity, entitledTotal } = getEntitledQuantityAndTotal();\n\n log(\"getEntitledQuantityAndTotal\", { entitledQuantity, entitledTotal });\n\n let currentBiggestTierIndex = -1;\n for (let i = 0; i < targetDiscount.discountValue?.tiers?.length; i++) {\n const currentTier = targetDiscount.discountValue.tiers[i];\n if (\n isPrerequisiteValid(\n currentTier.prerequisite,\n entitledQuantity,\n entitledTotal,\n )\n ) {\n currentBiggestTierIndex = i;\n } else {\n break;\n }\n }\n return currentBiggestTierIndex;\n };\n\n if (\n !targetDiscount.discountValue?.tiers ||\n targetDiscount.discountValue?.tiers.length === 0\n )\n return 0;\n\n log(\"getBiggestEligibleTier\");\n const currentCollectionHandle = product?.sourceCollection?.handle;\n const biggestEligibleTierIndex = getBiggestEligibleTier();\n log(\"getBiggestEligibleTier\", { biggestEligibleTierIndex });\n\n if (biggestEligibleTierIndex < 0) return 0;\n\n const productDiscountsAvailableOnTier =\n targetDiscount.discountValue.tiers\n .slice(0, biggestEligibleTierIndex + 1)\n ?.filter((tier) =>\n tier.discounts.some(\n (discount) => discount.type === \"ProductDiscount\",\n ),\n )\n ?.flatMap(\n (tier) =>\n tier.discounts.find(\n (discount) => discount.type === \"ProductDiscount\",\n )?.value ?? [],\n ) ?? [];\n\n // Per-entry purchaseType replaces the promotion-level flags: an entry only\n // affects the price branch matching the selected purchase state.\n const selectedHasSellingPlan = Boolean(\n selectedVariant?.sellingPlanAllocation,\n );\n const eligibleProductDiscounts = productDiscountsAvailableOnTier.filter(\n (discount) => {\n if (discount.purchaseType === \"SUBSCRIPTION\" && !selectedHasSellingPlan)\n return false;\n if (discount.purchaseType === \"ONE_TIME\" && selectedHasSellingPlan)\n return false;\n return isProductEntitledToDiscount(discount);\n },\n );\n\n const maxDiscountAmount = eligibleProductDiscounts.reduce(\n (max, discount) => {\n let discountAmount = 0;\n if (discount.value.type === \"DiscountAmount\") {\n discountAmount = parseFloat(discount.value.discountAmount.amount);\n } else if (discount.value.type === \"DiscountPercentage\") {\n discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (discount.value.percentage / 100);\n }\n return Math.max(max, discountAmount);\n },\n 0,\n );\n return maxDiscountAmount;\n};\n\nexport const isProductMatchingBxgyCardItems = (handle, variantId, items) => {\n if (!items) return false;\n if (items.type === \"AllProducts\") return true;\n\n if (items.type === \"SpecificProducts\" && items.products) {\n for (const product of items.products) {\n if (product.handle === handle) {\n if (!product.variants || product.variants.length === 0) return true;\n for (const variant of product.variants) {\n const vId = variant.id?.includes(\"/\")\n ? variant.id.split(\"/\").pop()\n : variant.id;\n if (vId === variantId || variant.id === variantId) return true;\n }\n }\n }\n }\n\n if (items.type === \"SpecificCollections\" && items.collections) {\n for (const collection of items.collections) {\n if (collection.products?.includes(handle)) return true;\n }\n }\n\n return false;\n};\n\nexport const isCartItemMatchingBxgyCard = (item, card) => {\n const items = card.items;\n if (items.type === \"AllProducts\") return true;\n\n if (items.type === \"SpecificProducts\" && items.products) {\n const itemVariantId = item.variantId?.toString();\n for (const product of items.products) {\n if (product.variants && product.variants.length > 0) {\n for (const variant of product.variants) {\n const vId = variant.id?.includes(\"/\")\n ? variant.id.split(\"/\").pop()\n : variant.id;\n if (vId === itemVariantId || variant.id === itemVariantId)\n return true;\n }\n }\n if (item.handle && product.handle === item.handle) return true;\n }\n }\n\n if (items.type === \"SpecificCollections\" && items.collections) {\n for (const collection of items.collections) {\n if (item.handle && collection.products?.includes(item.handle))\n return true;\n }\n }\n\n return false;\n};\n\nexport const areAllBxgyProductCardsMet = (cart, bxgy) => {\n if (!bxgy?.productCards?.length || !cart?.items) return false;\n\n const globalRequirementType = bxgy.requirementType ?? \"QUANTITY\";\n\n for (const card of bxgy.productCards) {\n const requirementType = card.requirementType ?? globalRequirementType;\n let totalQuantity = 0;\n let totalSubtotal = 0;\n\n for (const item of cart.items) {\n if (isCartItemMatchingBxgyCard(item, card)) {\n // Check purchaseType on the card against the cart item\n const itemHasSellingPlan = Boolean(item.sellingPlanAllocation);\n if (card.purchaseType === \"SUBSCRIPTION\" && !itemHasSellingPlan) {\n continue;\n }\n if (card.purchaseType === \"ONE_TIME\" && itemHasSellingPlan) {\n continue;\n }\n\n totalQuantity += item.quantity || 0;\n totalSubtotal +=\n parseFloat(item.price?.amount || 0) * 100 * (item.quantity || 0);\n }\n }\n\n if (requirementType === \"SUBTOTAL\") {\n const required = card.minimumSubtotal?.cents || 0;\n if (required > 0 && totalSubtotal < required) return false;\n } else {\n const required = card.quantity || 0;\n if (required > 0 && totalQuantity < required) return false;\n }\n }\n\n return true;\n};\n\nexport const getDiscountForBxgyDiscount = ({\n targetDiscount,\n handle,\n variantId,\n selectedVariant,\n cart,\n}) => {\n const bxgy = targetDiscount.discountValue;\n if (!bxgy?.productCards || !bxgy?.customerGets) return 0;\n\n const customerGetsValueType = bxgy.customerGets.value?.type;\n\n if (\n customerGetsValueType === \"Gift\" ||\n customerGetsValueType === \"FixedPrice\"\n ) {\n return 0;\n }\n\n // Gets-card purchaseType gates the displayed price against the selected\n // purchase state (new payloads carry gets cards; legacy has plain items).\n const getsCards = getBxgyGetsCards(bxgy.customerGets);\n const selectedHasSellingPlan = Boolean(\n selectedVariant?.sellingPlanAllocation,\n );\n const matchesGetsPurchaseType = (card) => {\n if (card.purchaseType === \"SUBSCRIPTION\" && !selectedHasSellingPlan)\n return false;\n if (card.purchaseType === \"ONE_TIME\" && selectedHasSellingPlan)\n return false;\n return true;\n };\n\n const isEntitledToReceive = () => {\n if (bxgy.customerGets.applyToProductCardItems) {\n return bxgy.productCards.some((card) =>\n isProductMatchingBxgyCardItems(handle, variantId, card.items),\n );\n }\n return getsCards.some(\n (card) =>\n matchesGetsPurchaseType(card) &&\n isProductMatchingBxgyCardItems(handle, variantId, card.items),\n );\n };\n\n if (!isEntitledToReceive()) return 0;\n\n // Check if this product matches a productCard with purchase type requirement\n // Look up the actual cart item to check if it has a subscription selected\n const matchingCartItem = (cart?.items || []).find(\n (item) => item.variantId?.toString() === variantId?.toString() || item.handle === handle\n );\n const cartItemHasSellingPlan = Boolean(matchingCartItem?.sellingPlanAllocation);\n\n for (const card of bxgy.productCards) {\n if (isProductMatchingBxgyCardItems(handle, variantId, card.items)) {\n if (card.purchaseType === \"SUBSCRIPTION\" && !cartItemHasSellingPlan) {\n return 0;\n } else if (card.purchaseType === \"ONE_TIME\" && cartItemHasSellingPlan) {\n return 0;\n }\n }\n }\n\n\n if (!areAllBxgyProductCardsMet(cart, bxgy)) return 0;\n\n const originalPrice = parseFloat(selectedVariant?.price?.amount || 0);\n if (originalPrice <= 0) return 0;\n\n if (customerGetsValueType === \"DiscountPercentage\") {\n const percentage = bxgy.customerGets.value.percentage || 0;\n return originalPrice * (percentage / 100);\n } else if (customerGetsValueType === \"DiscountAmount\") {\n const cents = bxgy.customerGets.value.discountAmount?.cents || 0;\n return Math.min(cents / 100, originalPrice);\n }\n\n return 0;\n};\n\nexport const getDiscountValueForDiscount = ({\n product,\n selectedVariant,\n cart,\n discount,\n log,\n}) => {\n const handle = product?.handle;\n const variantId = getIdFromGid(selectedVariant?.id);\n\n if (!handle || !discount) return 0;\n\n if (discount.discountValue?.type === \"DiscountCodeBxgy\") {\n return 0;\n }\n\n if (discount.discountValue?.type === \"Gift\") {\n return 0;\n }\n\n if (discount.discountValue?.type === \"BxgyDiscount\") {\n return getDiscountForBxgyDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n selectedVariant,\n cart,\n });\n }\n\n if (discount.discountValue?.type === \"DiscountMultiValueProduct\") {\n return getDiscountForMultiValueProduct({\n targetDiscount: discount,\n variantId,\n selectedVariant,\n });\n }\n\n if (discount.discountValue?.type === \"DiscountMultiValueCollection\") {\n return getDiscountForMultiValueCollection({\n targetDiscount: discount,\n handle,\n selectedVariant,\n });\n }\n\n if (discount.discountValue?.type === \"TieredDiscount\") {\n return getDiscountForTierDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n });\n }\n\n if (discount.discountValue?.type === \"VolumeDiscount\") {\n return getDiscountForVolumeDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n });\n }\n\n if (discount.discountValue?.type === \"CollectionOrderDiscount\") {\n return 0;\n }\n\n if (discount.discountValue?.type === \"MultiEffectTiers\") {\n log(\"getDiscountForMultiEffectTiers\");\n return getDiscountForMultiEffectTiers({\n targetDiscount: discount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n log,\n });\n }\n\n if (discount.discountValue?.type === \"ProductDiscount\") {\n return getDiscountForProductDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n selectedVariant,\n });\n }\n\n if (discount.discountClass === \"ORDER\") {\n return 0;\n }\n if (discount.discountClass === \"SHIPPING\") {\n return 0;\n }\n\n if (discount.discountClass === \"PRODUCT\") {\n return getDiscountForProductDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n selectedVariant,\n });\n }\n\n return 0;\n};\n\nexport const getBiggestDiscount = ({\n activePromotion,\n product,\n selectedVariant,\n cart,\n log,\n}) => {\n const discounts = Object.values(activePromotion?.discounts ?? []);\n log(\"Calculating biggest discount\", {\n discountCount: discounts.length,\n productId: product?.handle,\n collectionId: product?.sourceCollection?.handle,\n variantId: selectedVariant?.id,\n hasSellingPlan: !!selectedVariant?.sellingPlanAllocation,\n });\n\n const biggestDiscount = discounts.reduce((max, discount) => {\n const hasSellingPlan = Boolean(selectedVariant?.sellingPlanAllocation);\n\n // For BXGY discounts, purchase type is checked PER CARD (card.purchaseType),\n // not at the top level. Skip top-level appliesOnSubscription/appliesOnOneTimePurchase.\n // For other discount types, still use the top-level flags — unless a\n // customer-gets purchaseType overrides them (checked per discount type below).\n if (discount.discountValue?.type !== \"BxgyDiscount\") {\n let appliesOnSubscription = discount.appliesOnSubscription;\n let appliesOnOneTimePurchase = discount.appliesOnOneTimePurchase;\n\n if (discount.discountValue?.type === \"VolumeDiscount\") {\n const customerGets = discount.discountValue.customerGets;\n const getsAppliesTo = customerGets?.appliesTo || \"ELIGIBLE_VARIANTS\";\n const getsPurchaseType =\n getsAppliesTo !== \"ELIGIBLE_VARIANTS\"\n ? customerGets?.purchaseType\n : undefined;\n if (getsPurchaseType) {\n appliesOnSubscription = getsPurchaseType !== \"ONE_TIME\";\n appliesOnOneTimePurchase = getsPurchaseType !== \"SUBSCRIPTION\";\n }\n }\n\n if (discount.discountValue?.type === \"MultiEffectTiers\") {\n // Entries with their own purchaseType filter themselves in\n // getDiscountForMultiEffectTiers; don't gate the whole discount here.\n const hasPerEntryPurchaseType = (\n discount.discountValue.tiers ?? []\n ).some((tier) =>\n (tier.discounts ?? []).some(\n (tierDiscount) =>\n tierDiscount.type === \"ProductDiscount\" &&\n (Array.isArray(tierDiscount.value)\n ? tierDiscount.value\n : []\n ).some((entry) => entry.purchaseType),\n ),\n );\n if (hasPerEntryPurchaseType) {\n appliesOnSubscription = true;\n appliesOnOneTimePurchase = true;\n }\n }\n\n if (appliesOnSubscription && !appliesOnOneTimePurchase) {\n if (!hasSellingPlan) {\n log(\"Skipping subscription-only discount (no subscription selected)\", {\n discountType: discount.discountValue?.type,\n });\n return max;\n }\n }\n\n if (!appliesOnSubscription && appliesOnOneTimePurchase) {\n if (hasSellingPlan) {\n log(\"Skipping one-time-only discount (subscription selected)\", {\n discountType: discount.discountValue?.type,\n });\n return max;\n }\n }\n }\n\n const discountValue = getDiscountValueForDiscount({\n product,\n selectedVariant,\n cart,\n discount,\n log,\n });\n log(\"Discount calculated\", {\n discountType: discount.discountValue?.type,\n discountValue,\n maxSoFar: max,\n appliesOnSubscription: discount.appliesOnSubscription,\n appliesOnOneTimePurchase: discount.appliesOnOneTimePurchase,\n hasSellingPlan,\n });\n return Math.max(max, discountValue);\n }, 0);\n\n log(\"Final biggest discount\", { biggestDiscount });\n return biggestDiscount;\n};\n\nexport const parsePromotionIfActive = (promotionObject, now = new Date()) => {\n try {\n // Handle both object and string cases for backward compatibility\n const promotion =\n typeof promotionObject === \"string\"\n ? JSON.parse(promotionObject ?? \"{}\")\n : promotionObject;\n\n if (!promotion.startsAt || !promotion.status || !promotion.title)\n return undefined;\n const startsAt = new Date(promotion.startsAt);\n const endsAt = promotion.endsAt ? new Date(promotion.endsAt) : null;\n\n if (\n (promotion.status === \"ACTIVE\" || promotion.status === \"SCHEDULED\") &&\n now >= startsAt &&\n (!endsAt || now <= endsAt)\n ) {\n return promotion;\n }\n\n return undefined;\n } catch (error) {\n console.error(\"Failed to parse promotion:\", error);\n return undefined;\n }\n};\n","import {\n getBiggestDiscount,\n parsePromotionIfActive,\n getIdFromGid,\n productGidFromId,\n} from \"./discounts.js\";\n\nexport default function useAbra({ React, useTapcart, tapcartData }) {\n const Tapcart = useTapcart();\n const [activePromotion, setActivePromotion] = React.useState(undefined);\n const renderCountRef = React.useRef(0);\n const logRef = React.useRef([]);\n const variables = Tapcart?.variables;\n const { storeFrontAccessToken, storeUrl } =\n tapcartData?.integrations?.find((x) => x.name === \"abra-promotions\") ?? {};\n\n // Stable GraphQL fragment and functions\n const PRODUCT_FRAGMENT = React.useMemo(\n () => `\n id\n handle\n variants(first: 100) {\n edges {\n node {\n id\n handle: title\n price {\n amount\n currencyCode\n }\n }\n }\n }\n `,\n [],\n );\n\n const generateProductsQuery = React.useCallback(\n (ids, country) => {\n const productQueries = ids\n .map(\n (id, index) =>\n `product_${index}: product(id: \"${productGidFromId(id)}\") {\n ${PRODUCT_FRAGMENT}\n }`,\n )\n .join(\"\\n \");\n\n const inContextDirective = country\n ? `@inContext(country: ${country})`\n : \"\";\n\n return `\n query Products ${inContextDirective} {\n ${productQueries}\n }\n `;\n },\n [PRODUCT_FRAGMENT],\n );\n\n const graphqlDefaultBody = React.useCallback(\n (query, variables, storefrontAccessToken) => {\n return {\n async: true,\n crossDomain: true,\n method: \"POST\",\n headers: {\n \"X-Shopify-Storefront-Access-Token\": storefrontAccessToken,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n query,\n variables,\n }),\n };\n },\n [],\n );\n\n const fetchProducts = React.useCallback(\n async (ids, storeUrl, storefrontAccessToken, country) => {\n if (!storeUrl || !storefrontAccessToken) {\n return { error: \"Missing required configuration\" };\n }\n\n if (!ids || ids.length === 0) {\n return { data: [], error: \"No ids\" };\n }\n\n const GRAPHQL_URL = `https://${storeUrl}/api/2024-04/graphql.json`;\n const query = generateProductsQuery(ids, country);\n\n try {\n const response = await fetch(\n GRAPHQL_URL,\n graphqlDefaultBody(query, {}, storefrontAccessToken),\n );\n\n if (response?.ok) {\n const responseBody = await response.json();\n const data = responseBody?.data;\n\n if (!data) {\n return { data: [], error: \"No data\" };\n }\n\n const products = Object.values(data).filter((item) => item !== null);\n\n return {\n data: products,\n error: null,\n };\n }\n\n const error = await response.text();\n return { data: [], error: error };\n } catch (err) {\n return { data: [], error: err.message };\n }\n },\n [generateProductsQuery, graphqlDefaultBody],\n );\n\n const useProductsCustom = React.useCallback(\n ({ ids, storeUrl, storeFrontAccessToken, country }) => {\n const [products, setProducts] = React.useState([]);\n const [loading, setLoading] = React.useState(true);\n const [error, setError] = React.useState(null);\n\n // Memoize ids to prevent infinite loops\n const idsString = React.useMemo(() => {\n if (!ids || !Array.isArray(ids) || ids.length === 0) return \"\";\n return [...ids].sort().join(\",\");\n }, [ids ? JSON.stringify([...ids].sort()) : \"\"]);\n\n React.useEffect(() => {\n const fetchData = async () => {\n if (!storeUrl || !storeFrontAccessToken) {\n if (!storeUrl) {\n setError(\"no store url\");\n }\n if (!storeFrontAccessToken) {\n setError(\"no store front access token\");\n }\n setProducts([]);\n setLoading(false);\n return;\n }\n\n if (!ids || ids.length === 0) {\n setProducts([]);\n setLoading(false);\n return;\n }\n\n const result = await fetchProducts(\n ids,\n storeUrl,\n storeFrontAccessToken,\n country,\n );\n\n try {\n if (result.data && result.data.length > 0) {\n const formattedProducts = result?.data?.map((product) => ({\n id: getIdFromGid(product.id),\n handle: product?.handle,\n variants: product?.variants?.edges?.map((variant) => ({\n id: getIdFromGid(variant?.node?.id),\n handle: variant?.node?.handle,\n price: variant?.node?.price,\n })),\n }));\n setProducts(formattedProducts);\n setError(result.error);\n } else {\n setProducts([]);\n setError(result.error);\n }\n } catch (error) {\n setError(error.message);\n }\n\n setLoading(false);\n };\n\n fetchData();\n }, [idsString, storeUrl, storeFrontAccessToken, country, fetchProducts]);\n\n return { products, loading, error };\n },\n [fetchProducts],\n );\n\n // Stable logging function that doesn't cause re-renders\n const log = React.useCallback((message, data = null) => {\n const timestamp = new Date().toISOString();\n const logEntry = {\n timestamp,\n message,\n data: data ? JSON.parse(JSON.stringify(data)) : null,\n renderCount: renderCountRef.current,\n };\n logRef.current.push(logEntry);\n\n // Keep only last 50 logs to prevent memory issues\n if (logRef.current.length > 100) {\n logRef.current = logRef.current.slice(-100);\n }\n }, []);\n\n // Create stable cart items reference to prevent infinite recreations\n const stableCartItems = React.useMemo(() => {\n const currentCartItems = variables?.cart?.items ?? [];\n\n if (!currentCartItems || currentCartItems.length === 0) {\n return [];\n }\n\n const mappedItems = currentCartItems.map((item) => ({\n productId: item.productId,\n variantId: item.variantId,\n quantity: item.quantity,\n sellingPlanAllocation: item.sellingPlanAllocation,\n }));\n\n return mappedItems;\n }, [\n (variables?.cart?.items || [])\n ?.map((item) => `${item.productId}-${item.variantId}-${item.quantity}`)\n ?.join(\",\"),\n ]);\n\n const ids = React.useMemo(\n () => (stableCartItems ?? []).map((item) => item.productId),\n [stableCartItems],\n );\n\n // Get country from cart currency or tapcartData\n const country = React.useMemo(() => {\n return (\n Tapcart?.variables?.cart?.currency?.slice(0, 2) || tapcartData?.country\n );\n }, [Tapcart?.variables?.cart?.currency, tapcartData?.country]);\n\n const {\n products: cartItems,\n loading: cartItemsLoading,\n error: cartItemsError,\n } = useProductsCustom({\n ids,\n storeUrl: storeUrl,\n storeFrontAccessToken: storeFrontAccessToken,\n country: country,\n });\n\n // Render limiter to prevent infinite recreations\n renderCountRef.current += 1;\n\n // Create stable cart reference to prevent infinite recreations\n const stableCart = React.useMemo(() => {\n if (!variables?.cart) {\n return null;\n }\n if (cartItemsLoading || cartItemsError) {\n return variables.cart;\n }\n\n if (!cartItems || cartItems.length === 0) {\n return variables.cart;\n }\n\n const processedItems = (stableCartItems || []).map((item) => {\n const _cartItem = cartItems?.find(\n (cartItem) => getIdFromGid(cartItem?.id) === item.productId,\n );\n if (!_cartItem) {\n return item;\n }\n const _variant = _cartItem?.variants?.find(\n (variant) => getIdFromGid(variant?.id) === item?.variantId,\n );\n if (!_variant) {\n return item;\n }\n\n const processedItem = {\n ...item,\n handle: _cartItem?.handle,\n price: _variant?.price,\n };\n\n return processedItem;\n });\n\n const result = {\n ...variables.cart,\n items: processedItems,\n };\n\n return result;\n }, [\n cartItems,\n cartItemsLoading,\n cartItemsError,\n (variables?.cart?.items || [])\n ?.map((item) => `${item.variantId}-${item.quantity}`)\n ?.join(\",\"),\n ]);\n\n // Effect: Initialize from storage and observe changes\n React.useEffect(() => {\n const storage = Tapcart?.variables?.storage || {};\n const abraData = storage[\"abra\"] || {};\n const storedPromotion = parsePromotionIfActive(\n abraData[\"active-promotion\"],\n );\n\n log(\"Storage promotion retrieved\", { storedPromotion });\n\n // Only update activePromotion if the promotion has actually changed\n if (\n storedPromotion?.title &&\n JSON.stringify(activePromotion) !== JSON.stringify(storedPromotion)\n ) {\n setActivePromotion(storedPromotion);\n } else if (!storedPromotion?.title && activePromotion) {\n // Clear promotion if it was removed from storage\n setActivePromotion(undefined);\n }\n }, [Tapcart?.variables?.storage?.[\"abra\"]?.[\"active-promotion\"]]);\n\n let getProductWithDiscount = React.useCallback(\n (product) => {\n if (!activePromotion || !activePromotion.title || !product) {\n log(\"No active promotion or product, returning original product\", {\n hasActivePromotion: !!activePromotion,\n hasProduct: !!product,\n });\n return product;\n }\n\n const _product = JSON.parse(JSON.stringify(product));\n let currencyCode = undefined;\n const variants = _product.variants.map((variant) => {\n const selectedVariant = JSON.parse(JSON.stringify(variant));\n currencyCode = currencyCode || selectedVariant?.price?.currencyCode;\n let biggestDiscount = 0;\n try {\n biggestDiscount = getBiggestDiscount({\n activePromotion,\n product: _product,\n selectedVariant,\n cart: stableCart,\n log,\n });\n } catch (error) {\n log(\"Error calculating discount\", {\n error: error.message,\n variantId: selectedVariant?.id,\n });\n biggestDiscount = 0;\n }\n\n const originalPrice = parseFloat(selectedVariant?.price?.amount ?? 0);\n const compareAtPrice = parseFloat(\n selectedVariant?.compareAtPrice?.amount ?? 0,\n );\n\n let referencePrice = originalPrice;\n if (compareAtPrice) {\n referencePrice = Math.max(originalPrice, compareAtPrice ?? 0);\n }\n\n let discountedPrice = Math.max(originalPrice - biggestDiscount, 0);\n\n selectedVariant.price = {\n amount: discountedPrice,\n currencyCode: selectedVariant.price.currencyCode,\n };\n selectedVariant.compareAtPrice = {\n amount: referencePrice,\n currencyCode: selectedVariant.price.currencyCode,\n };\n return selectedVariant;\n });\n _product.variants = variants;\n currencyCode = currencyCode || \"USD\";\n _product.compareAtPriceRange = {\n maxVariantPrice: {\n amount: variants.reduce((max, variant) => {\n return Math.max(\n max,\n parseFloat(variant.compareAtPrice.amount ?? variant.price.amount),\n );\n }, 0),\n currencyCode: currencyCode,\n },\n minVariantPrice: {\n amount: variants.reduce((min, variant) => {\n return Math.min(\n min,\n parseFloat(variant.compareAtPrice.amount ?? variant.price.amount),\n );\n }, Infinity),\n currencyCode: currencyCode,\n },\n };\n _product.priceRange = {\n maxVariantPrice: {\n amount: variants.reduce((max, variant) => {\n return Math.max(max, parseFloat(variant.price.amount));\n }, 0),\n currencyCode: currencyCode || \"USD\",\n },\n minVariantPrice: {\n amount: variants.reduce((min, variant) => {\n return Math.min(min, parseFloat(variant.price.amount));\n }, Infinity),\n currencyCode: currencyCode || \"USD\",\n },\n };\n _product.abra = true;\n\n return _product;\n },\n [\n activePromotion?.title,\n activePromotion?.discounts?.map((discount) => discount.title).join(\",\"),\n stableCart,\n ],\n );\n\n // Discounted price for a single price point (e.g. a selling-plan option in a\n // subscription selector). hasSellingPlan forces the subscription vs one-time\n // price branch regardless of what the variant carries.\n const getDiscountedPrice = React.useCallback(\n (product, variant, price, hasSellingPlan = false) => {\n const basePrice = parseFloat(price ?? variant?.price?.amount ?? 0);\n if (!activePromotion || !activePromotion.title || !product || !variant) {\n return basePrice;\n }\n\n const selectedVariant = {\n ...variant,\n price: {\n amount: basePrice,\n currencyCode: variant?.price?.currencyCode,\n },\n sellingPlanAllocation: hasSellingPlan\n ? (variant?.sellingPlanAllocation ?? { sellingPlan: {} })\n : null,\n };\n\n try {\n const biggestDiscount = getBiggestDiscount({\n activePromotion,\n product,\n selectedVariant,\n cart: stableCart,\n log,\n });\n return Math.max(basePrice - biggestDiscount, 0);\n } catch (error) {\n log(\"Error calculating discounted price\", {\n error: error.message,\n variantId: variant?.id,\n });\n return basePrice;\n }\n },\n [\n activePromotion?.title,\n activePromotion?.discounts?.map((discount) => discount.title).join(\",\"),\n stableCart,\n ],\n );\n\n return React.useMemo(\n () => ({\n abra: {\n activePromotion,\n getProductWithDiscount,\n getDiscountedPrice,\n logs: logRef.current,\n },\n }),\n [activePromotion, getProductWithDiscount, getDiscountedPrice],\n );\n}\n"],"names":[],"mappings":"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"}
|