@anker-in/campaign-ui 0.2.1 → 0.2.2-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/cjs/components/credits/context/hooks/useActivities.js +1 -1
- package/dist/cjs/components/credits/context/hooks/useActivities.js.map +3 -3
- package/dist/cjs/components/credits/context/hooks/useAlpcFetch.js +1 -1
- package/dist/cjs/components/credits/context/hooks/useAlpcFetch.js.map +3 -3
- package/dist/cjs/components/credits/context/hooks/useFunctionMemberPrice.d.ts +7 -0
- package/dist/cjs/components/credits/context/hooks/useFunctionMemberPrice.js +2 -0
- package/dist/cjs/components/credits/context/hooks/useFunctionMemberPrice.js.map +7 -0
- package/dist/cjs/components/credits/context/hooks/useMyRewards.js +1 -1
- package/dist/cjs/components/credits/context/hooks/useMyRewards.js.map +3 -3
- package/dist/cjs/components/credits/context/hooks/useRedeemCoupon.js +1 -1
- package/dist/cjs/components/credits/context/hooks/useRedeemCoupon.js.map +3 -3
- package/dist/cjs/components/credits/context/hooks/useRedeemProduct.js +1 -1
- package/dist/cjs/components/credits/context/hooks/useRedeemProduct.js.map +3 -3
- package/dist/cjs/components/credits/context/hooks/useRedeemableList.js +1 -1
- package/dist/cjs/components/credits/context/hooks/useRedeemableList.js.map +3 -3
- package/dist/cjs/components/credits/context/memberPriceConst.d.ts +10 -0
- package/dist/cjs/components/credits/context/memberPriceConst.js +2 -0
- package/dist/cjs/components/credits/context/memberPriceConst.js.map +7 -0
- package/dist/cjs/components/credits/context/memberPriceTypes.d.ts +46 -0
- package/dist/cjs/components/credits/context/memberPriceTypes.js +2 -0
- package/dist/cjs/components/credits/context/memberPriceTypes.js.map +7 -0
- package/dist/cjs/components/credits/context/provider.d.ts +4 -1
- package/dist/cjs/components/credits/context/provider.js +1 -1
- package/dist/cjs/components/credits/context/provider.js.map +3 -3
- package/dist/cjs/components/credits/context/utils/atobID.d.ts +1 -0
- package/dist/cjs/components/credits/context/utils/atobID.js +2 -0
- package/dist/cjs/components/credits/context/utils/atobID.js.map +7 -0
- package/dist/cjs/components/credits/context/utils/functionDiscountCalculate.d.ts +5 -0
- package/dist/cjs/components/credits/context/utils/functionDiscountCalculate.js +2 -0
- package/dist/cjs/components/credits/context/utils/functionDiscountCalculate.js.map +7 -0
- package/dist/cjs/components/credits/context/utils/getFunctionMemberPrice.d.ts +8 -0
- package/dist/cjs/components/credits/context/utils/getFunctionMemberPrice.js +2 -0
- package/dist/cjs/components/credits/context/utils/getFunctionMemberPrice.js.map +7 -0
- package/dist/cjs/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.d.ts +9 -0
- package/dist/cjs/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.js +2 -0
- package/dist/cjs/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.js.map +7 -0
- package/dist/cjs/components/credits/context/utils/variantGetCoupon.d.ts +6 -0
- package/dist/cjs/components/credits/context/utils/variantGetCoupon.js +2 -0
- package/dist/cjs/components/credits/context/utils/variantGetCoupon.js.map +7 -0
- package/dist/cjs/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.d.ts +4 -0
- package/dist/cjs/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.js +2 -0
- package/dist/cjs/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.js.map +7 -0
- package/dist/cjs/components/credits/creditsAnkersolixTask/index.d.ts +2 -0
- package/dist/cjs/components/credits/creditsAnkersolixTask/index.js +2 -0
- package/dist/cjs/components/credits/creditsAnkersolixTask/index.js.map +7 -0
- package/dist/cjs/components/credits/creditsAnkersolixTask/type.d.ts +1 -0
- package/dist/cjs/components/credits/creditsAnkersolixTask/type.js +2 -0
- package/dist/cjs/components/credits/creditsAnkersolixTask/type.js.map +7 -0
- package/dist/cjs/components/credits/creditsBanner/index.d.ts +2 -1
- package/dist/cjs/components/credits/creditsBanner/index.js +1 -1
- package/dist/cjs/components/credits/creditsBanner/index.js.map +3 -3
- package/dist/cjs/components/credits/creditsBenefits/benefitItem.d.ts +4 -1
- package/dist/cjs/components/credits/creditsBenefits/benefitItem.js +2 -2
- package/dist/cjs/components/credits/creditsBenefits/benefitItem.js.map +4 -4
- package/dist/cjs/components/credits/creditsBenefits/iconInfo.js +1 -1
- package/dist/cjs/components/credits/creditsBenefits/iconInfo.js.map +2 -2
- package/dist/cjs/components/credits/creditsBenefits/index.d.ts +6 -2
- package/dist/cjs/components/credits/creditsBenefits/index.js +3 -3
- package/dist/cjs/components/credits/creditsBenefits/index.js.map +3 -3
- package/dist/cjs/components/credits/creditsCash/CreditsCash.d.ts +2 -1
- package/dist/cjs/components/credits/creditsCash/CreditsCash.js +1 -1
- package/dist/cjs/components/credits/creditsCash/CreditsCash.js.map +3 -3
- package/dist/cjs/components/credits/creditsCash/RedeemableItem.js +1 -1
- package/dist/cjs/components/credits/creditsCash/RedeemableItem.js.map +2 -2
- package/dist/cjs/components/credits/creditsFaq/index.d.ts +2 -1
- package/dist/cjs/components/credits/creditsFaq/index.js +1 -1
- package/dist/cjs/components/credits/creditsFaq/index.js.map +3 -3
- package/dist/cjs/components/credits/creditsInfoCard/index.d.ts +2 -1
- package/dist/cjs/components/credits/creditsInfoCard/index.js +1 -1
- package/dist/cjs/components/credits/creditsInfoCard/index.js.map +3 -3
- package/dist/cjs/components/credits/creditsMemberPrice/CreditsMemberPrice.d.ts +5 -0
- package/dist/cjs/components/credits/creditsMemberPrice/CreditsMemberPrice.js +2 -0
- package/dist/cjs/components/credits/creditsMemberPrice/CreditsMemberPrice.js.map +7 -0
- package/dist/cjs/components/credits/creditsMemberPrice/MemberPriceItem.d.ts +7 -0
- package/dist/cjs/components/credits/creditsMemberPrice/MemberPriceItem.js +2 -0
- package/dist/cjs/components/credits/creditsMemberPrice/MemberPriceItem.js.map +7 -0
- package/dist/cjs/components/credits/creditsMemberPrice/index.d.ts +2 -0
- package/dist/cjs/components/credits/creditsMemberPrice/index.js +2 -0
- package/dist/cjs/components/credits/creditsMemberPrice/index.js.map +7 -0
- package/dist/cjs/components/credits/creditsMemberPrice/type.d.ts +64 -0
- package/dist/cjs/components/credits/creditsMemberPrice/type.js +2 -0
- package/dist/cjs/components/credits/creditsMemberPrice/type.js.map +7 -0
- package/dist/cjs/components/credits/creditsNavigation/CreditsNavigation.d.ts +4 -0
- package/dist/cjs/components/credits/creditsNavigation/CreditsNavigation.js +2 -0
- package/dist/cjs/components/credits/creditsNavigation/CreditsNavigation.js.map +7 -0
- package/dist/cjs/components/credits/creditsNavigation/index.d.ts +2 -0
- package/dist/cjs/components/credits/creditsNavigation/index.js +2 -0
- package/dist/cjs/components/credits/creditsNavigation/index.js.map +7 -0
- package/dist/cjs/components/credits/creditsNavigation/type.d.ts +7 -0
- package/dist/cjs/components/credits/creditsNavigation/type.js +2 -0
- package/dist/cjs/components/credits/creditsNavigation/type.js.map +7 -0
- package/dist/cjs/components/credits/creditsRedeemList/CreditsRedeemList.d.ts +2 -1
- package/dist/cjs/components/credits/creditsRedeemList/CreditsRedeemList.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/CreditsRedeemList.js.map +3 -3
- package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/Error.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/Error.js.map +2 -2
- package/dist/cjs/components/credits/creditsRedeemList/type.d.ts +1 -0
- package/dist/cjs/components/credits/creditsRedeemList/type.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/type.js.map +1 -1
- package/dist/cjs/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.d.ts +3 -1
- package/dist/cjs/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.js +1 -1
- package/dist/cjs/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.js.map +3 -3
- package/dist/cjs/templates/credits.d.ts +15 -1
- package/dist/cjs/templates/credits.js +2 -2
- package/dist/cjs/templates/credits.js.map +4 -4
- package/dist/cjs/templates/index.d.ts +1 -1
- package/dist/cjs/templates/index.js +1 -1
- package/dist/cjs/templates/index.js.map +1 -1
- package/dist/esm/components/credits/context/hooks/useActivities.js +1 -1
- package/dist/esm/components/credits/context/hooks/useActivities.js.map +3 -3
- package/dist/esm/components/credits/context/hooks/useAlpcFetch.js +1 -1
- package/dist/esm/components/credits/context/hooks/useAlpcFetch.js.map +3 -3
- package/dist/esm/components/credits/context/hooks/useFunctionMemberPrice.d.ts +7 -0
- package/dist/esm/components/credits/context/hooks/useFunctionMemberPrice.js +2 -0
- package/dist/esm/components/credits/context/hooks/useFunctionMemberPrice.js.map +7 -0
- package/dist/esm/components/credits/context/hooks/useMyRewards.js +1 -1
- package/dist/esm/components/credits/context/hooks/useMyRewards.js.map +3 -3
- package/dist/esm/components/credits/context/hooks/useRedeemCoupon.js +1 -1
- package/dist/esm/components/credits/context/hooks/useRedeemCoupon.js.map +3 -3
- package/dist/esm/components/credits/context/hooks/useRedeemProduct.js +1 -1
- package/dist/esm/components/credits/context/hooks/useRedeemProduct.js.map +3 -3
- package/dist/esm/components/credits/context/hooks/useRedeemableList.js +1 -1
- package/dist/esm/components/credits/context/hooks/useRedeemableList.js.map +3 -3
- package/dist/esm/components/credits/context/memberPriceConst.d.ts +10 -0
- package/dist/esm/components/credits/context/memberPriceConst.js +2 -0
- package/dist/esm/components/credits/context/memberPriceConst.js.map +7 -0
- package/dist/esm/components/credits/context/memberPriceTypes.d.ts +46 -0
- package/dist/esm/components/credits/context/memberPriceTypes.js +1 -0
- package/dist/esm/components/credits/context/memberPriceTypes.js.map +7 -0
- package/dist/esm/components/credits/context/provider.d.ts +4 -1
- package/dist/esm/components/credits/context/provider.js +1 -1
- package/dist/esm/components/credits/context/provider.js.map +3 -3
- package/dist/esm/components/credits/context/utils/atobID.d.ts +1 -0
- package/dist/esm/components/credits/context/utils/atobID.js +2 -0
- package/dist/esm/components/credits/context/utils/atobID.js.map +7 -0
- package/dist/esm/components/credits/context/utils/functionDiscountCalculate.d.ts +5 -0
- package/dist/esm/components/credits/context/utils/functionDiscountCalculate.js +2 -0
- package/dist/esm/components/credits/context/utils/functionDiscountCalculate.js.map +7 -0
- package/dist/esm/components/credits/context/utils/getFunctionMemberPrice.d.ts +8 -0
- package/dist/esm/components/credits/context/utils/getFunctionMemberPrice.js +2 -0
- package/dist/esm/components/credits/context/utils/getFunctionMemberPrice.js.map +7 -0
- package/dist/esm/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.d.ts +9 -0
- package/dist/esm/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.js +2 -0
- package/dist/esm/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.js.map +7 -0
- package/dist/esm/components/credits/context/utils/variantGetCoupon.d.ts +6 -0
- package/dist/esm/components/credits/context/utils/variantGetCoupon.js +2 -0
- package/dist/esm/components/credits/context/utils/variantGetCoupon.js.map +7 -0
- package/dist/esm/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.d.ts +4 -0
- package/dist/esm/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.js +2 -0
- package/dist/esm/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.js.map +7 -0
- package/dist/esm/components/credits/creditsAnkersolixTask/index.d.ts +2 -0
- package/dist/esm/components/credits/creditsAnkersolixTask/index.js +2 -0
- package/dist/esm/components/credits/creditsAnkersolixTask/index.js.map +7 -0
- package/dist/esm/components/credits/creditsAnkersolixTask/type.d.ts +1 -0
- package/dist/esm/components/credits/creditsAnkersolixTask/type.js +2 -0
- package/dist/esm/components/credits/creditsAnkersolixTask/type.js.map +7 -0
- package/dist/esm/components/credits/creditsBanner/index.d.ts +2 -1
- package/dist/esm/components/credits/creditsBanner/index.js +1 -1
- package/dist/esm/components/credits/creditsBanner/index.js.map +3 -3
- package/dist/esm/components/credits/creditsBenefits/benefitItem.d.ts +4 -1
- package/dist/esm/components/credits/creditsBenefits/benefitItem.js +2 -2
- package/dist/esm/components/credits/creditsBenefits/benefitItem.js.map +4 -4
- package/dist/esm/components/credits/creditsBenefits/iconInfo.js +1 -1
- package/dist/esm/components/credits/creditsBenefits/iconInfo.js.map +2 -2
- package/dist/esm/components/credits/creditsBenefits/index.d.ts +6 -2
- package/dist/esm/components/credits/creditsBenefits/index.js +3 -3
- package/dist/esm/components/credits/creditsBenefits/index.js.map +3 -3
- package/dist/esm/components/credits/creditsCash/CreditsCash.d.ts +2 -1
- package/dist/esm/components/credits/creditsCash/CreditsCash.js +1 -1
- package/dist/esm/components/credits/creditsCash/CreditsCash.js.map +3 -3
- package/dist/esm/components/credits/creditsCash/RedeemableItem.js +1 -1
- package/dist/esm/components/credits/creditsCash/RedeemableItem.js.map +2 -2
- package/dist/esm/components/credits/creditsFaq/index.d.ts +2 -1
- package/dist/esm/components/credits/creditsFaq/index.js +1 -1
- package/dist/esm/components/credits/creditsFaq/index.js.map +3 -3
- package/dist/esm/components/credits/creditsInfoCard/index.d.ts +2 -1
- package/dist/esm/components/credits/creditsInfoCard/index.js +1 -1
- package/dist/esm/components/credits/creditsInfoCard/index.js.map +3 -3
- package/dist/esm/components/credits/creditsMemberPrice/CreditsMemberPrice.d.ts +5 -0
- package/dist/esm/components/credits/creditsMemberPrice/CreditsMemberPrice.js +2 -0
- package/dist/esm/components/credits/creditsMemberPrice/CreditsMemberPrice.js.map +7 -0
- package/dist/esm/components/credits/creditsMemberPrice/MemberPriceItem.d.ts +7 -0
- package/dist/esm/components/credits/creditsMemberPrice/MemberPriceItem.js +2 -0
- package/dist/esm/components/credits/creditsMemberPrice/MemberPriceItem.js.map +7 -0
- package/dist/esm/components/credits/creditsMemberPrice/index.d.ts +2 -0
- package/dist/esm/components/credits/creditsMemberPrice/index.js +2 -0
- package/dist/esm/components/credits/creditsMemberPrice/index.js.map +7 -0
- package/dist/esm/components/credits/creditsMemberPrice/type.d.ts +64 -0
- package/dist/esm/components/credits/creditsMemberPrice/type.js +1 -0
- package/dist/esm/components/credits/creditsMemberPrice/type.js.map +7 -0
- package/dist/esm/components/credits/creditsNavigation/CreditsNavigation.d.ts +4 -0
- package/dist/esm/components/credits/creditsNavigation/CreditsNavigation.js +2 -0
- package/dist/esm/components/credits/creditsNavigation/CreditsNavigation.js.map +7 -0
- package/dist/esm/components/credits/creditsNavigation/index.d.ts +2 -0
- package/dist/esm/components/credits/creditsNavigation/index.js +2 -0
- package/dist/esm/components/credits/creditsNavigation/index.js.map +7 -0
- package/dist/esm/components/credits/creditsNavigation/type.d.ts +7 -0
- package/dist/esm/components/credits/creditsNavigation/type.js +1 -0
- package/dist/esm/components/credits/creditsNavigation/type.js.map +7 -0
- package/dist/esm/components/credits/creditsRedeemList/CreditsRedeemList.d.ts +2 -1
- package/dist/esm/components/credits/creditsRedeemList/CreditsRedeemList.js +1 -1
- package/dist/esm/components/credits/creditsRedeemList/CreditsRedeemList.js.map +3 -3
- package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/Error.js +1 -1
- package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/Error.js.map +2 -2
- package/dist/esm/components/credits/creditsRedeemList/type.d.ts +1 -0
- package/dist/esm/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.d.ts +3 -1
- package/dist/esm/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.js +1 -1
- package/dist/esm/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.js.map +3 -3
- package/dist/esm/templates/credits.d.ts +15 -1
- package/dist/esm/templates/credits.js +2 -2
- package/dist/esm/templates/credits.js.map +4 -4
- package/dist/esm/templates/index.d.ts +1 -1
- package/dist/esm/templates/index.js +1 -1
- package/dist/esm/templates/index.js.map +1 -1
- package/dist/index.js +40660 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +40648 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +21 -20
- package/src/components/credits/context/hooks/useActivities.ts +3 -2
- package/src/components/credits/context/hooks/useAlpcFetch.ts +8 -4
- package/src/components/credits/context/hooks/useFunctionMemberPrice.ts +33 -0
- package/src/components/credits/context/hooks/useMyRewards.ts +3 -2
- package/src/components/credits/context/hooks/useRedeemCoupon.ts +4 -1
- package/src/components/credits/context/hooks/useRedeemProduct.ts +4 -1
- package/src/components/credits/context/hooks/useRedeemableList.ts +3 -3
- package/src/components/credits/context/memberPriceConst.ts +13 -0
- package/src/components/credits/context/memberPriceTypes.ts +54 -0
- package/src/components/credits/context/provider.tsx +9 -0
- package/src/components/credits/context/utils/atobID.ts +8 -0
- package/src/components/credits/context/utils/functionDiscountCalculate.ts +57 -0
- package/src/components/credits/context/utils/getFunctionMemberPrice.ts +135 -0
- package/src/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.ts +51 -0
- package/src/components/credits/context/utils/variantGetCoupon.ts +34 -0
- package/src/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.tsx +270 -0
- package/src/components/credits/creditsAnkersolixTask/index.ts +2 -0
- package/src/components/credits/creditsAnkersolixTask/type.ts +7 -0
- package/src/components/credits/creditsBanner/index.tsx +2 -2
- package/src/components/credits/creditsBenefits/{benefitItem.tsx → BenefitItem.tsx} +28 -9
- package/src/components/credits/creditsBenefits/index.tsx +12 -3
- package/src/components/credits/creditsCash/CreditsCash.tsx +5 -3
- package/src/components/credits/creditsCash/RedeemableItem.tsx +19 -15
- package/src/components/credits/creditsFaq/index.tsx +2 -2
- package/src/components/credits/creditsInfoCard/index.tsx +2 -2
- package/src/components/credits/creditsMemberPrice/CreditsMemberPrice.tsx +389 -0
- package/src/components/credits/creditsMemberPrice/MemberPriceItem.tsx +158 -0
- package/src/components/credits/creditsMemberPrice/index.ts +2 -0
- package/src/components/credits/creditsMemberPrice/type.ts +75 -0
- package/src/components/credits/creditsNavigation/CreditsNavigation.tsx +123 -0
- package/src/components/credits/creditsNavigation/index.ts +2 -0
- package/src/components/credits/creditsNavigation/type.ts +10 -0
- package/src/components/credits/creditsRedeemList/CreditsRedeemList.tsx +17 -3
- package/src/components/credits/creditsRedeemList/RedeemProductModal/Error.tsx +1 -1
- package/src/components/credits/creditsRedeemList/type.ts +1 -0
- package/src/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.tsx +2 -2
- package/src/templates/{credits.tsx → Credits.tsx} +38 -7
- package/src/templates/index.ts +1 -1
- package/dist/cjs/components/credits/const.d.ts +0 -1
- package/dist/cjs/components/credits/const.js +0 -2
- package/dist/cjs/components/credits/const.js.map +0 -7
- package/dist/esm/components/credits/const.d.ts +0 -1
- package/dist/esm/components/credits/const.js +0 -2
- package/dist/esm/components/credits/const.js.map +0 -7
- /package/src/components/credits/creditsBenefits/{iconInfo.tsx → IconInfo.tsx} +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@anker-in/campaign-ui",
|
|
3
|
-
"version": "0.2.1",
|
|
3
|
+
"version": "0.2.2-beta.1",
|
|
4
4
|
"description": "Campaign UI components and utilities for Anker projects",
|
|
5
5
|
"main": "./dist/cjs/index.js",
|
|
6
6
|
"module": "./dist/esm/index.js",
|
|
@@ -35,6 +35,20 @@
|
|
|
35
35
|
"**/*.css",
|
|
36
36
|
"**/**/*.css"
|
|
37
37
|
],
|
|
38
|
+
"scripts": {
|
|
39
|
+
"dev": "pnpm run dev:css & tsup --watch",
|
|
40
|
+
"dev:css": "postcss src/styles/global.css -o style.css --watch",
|
|
41
|
+
"build": "pnpm run build:css & pnpm run build:js:esm & pnpm run build:js:cjs & pnpm run build:js:esm:types & pnpm run build:js:cjs:types",
|
|
42
|
+
"build:js:cjs": "node esbuild-cjs.mjs",
|
|
43
|
+
"build:js:cjs:types": "tsc --outdir dist/cjs",
|
|
44
|
+
"build:js:esm": "node esbuild-esm.mjs",
|
|
45
|
+
"build:js:esm:types": "tsc --outdir dist/esm",
|
|
46
|
+
"build:css": "postcss src/styles/global.css -o style.css",
|
|
47
|
+
"lint": "eslint \"src/**/*.ts*\"",
|
|
48
|
+
"test": "echo run @anker-in/campaign-ui tests",
|
|
49
|
+
"type-check": "tsc --noEmit",
|
|
50
|
+
"clean": "rm -rf .turbo node_modules dist style.css"
|
|
51
|
+
},
|
|
38
52
|
"keywords": [],
|
|
39
53
|
"author": "",
|
|
40
54
|
"license": "ISC",
|
|
@@ -63,6 +77,8 @@
|
|
|
63
77
|
"crypto-js": "^4.1.1"
|
|
64
78
|
},
|
|
65
79
|
"dependencies": {
|
|
80
|
+
"@anker-in/headless-ui": "workspace:*",
|
|
81
|
+
"@anker-in/lib": "workspace:*",
|
|
66
82
|
"@copilotkit/react-core": "1.1.2",
|
|
67
83
|
"@copilotkit/react-ui": "1.1.2",
|
|
68
84
|
"@copilotkit/runtime-client-gql": "1.1.2",
|
|
@@ -80,15 +96,14 @@
|
|
|
80
96
|
"clsx": "^2.1.1",
|
|
81
97
|
"crypto-js": "^4.2.0",
|
|
82
98
|
"dayjs": "^1.11.7",
|
|
99
|
+
"decimal.js": "^10.4.3",
|
|
83
100
|
"gsap": "^3.12.5",
|
|
84
101
|
"monaco-editor": "^0.52.0",
|
|
85
102
|
"postcss": "^8.4.38",
|
|
86
103
|
"react-codepen-embed": "^1.1.0",
|
|
87
104
|
"swiper": "^11.1.3",
|
|
88
105
|
"tailwind-merge": "^2.3.0",
|
|
89
|
-
"tailwindcss": "^3.4.3"
|
|
90
|
-
"@anker-in/headless-ui": "1.0.26",
|
|
91
|
-
"@anker-in/lib": "1.1.1"
|
|
106
|
+
"tailwindcss": "^3.4.3"
|
|
92
107
|
},
|
|
93
108
|
"publishConfig": {
|
|
94
109
|
"access": "public",
|
|
@@ -96,19 +111,5 @@
|
|
|
96
111
|
},
|
|
97
112
|
"exclude": [
|
|
98
113
|
"dist/**/*"
|
|
99
|
-
]
|
|
100
|
-
|
|
101
|
-
"dev": "pnpm run dev:css & tsup --watch",
|
|
102
|
-
"dev:css": "postcss src/styles/global.css -o style.css --watch",
|
|
103
|
-
"build": "pnpm run build:css & pnpm run build:js:esm & pnpm run build:js:cjs & pnpm run build:js:esm:types & pnpm run build:js:cjs:types",
|
|
104
|
-
"build:js:cjs": "node esbuild-cjs.mjs",
|
|
105
|
-
"build:js:cjs:types": "tsc --outdir dist/cjs",
|
|
106
|
-
"build:js:esm": "node esbuild-esm.mjs",
|
|
107
|
-
"build:js:esm:types": "tsc --outdir dist/esm",
|
|
108
|
-
"build:css": "postcss src/styles/global.css -o style.css",
|
|
109
|
-
"lint": "eslint \"src/**/*.ts*\"",
|
|
110
|
-
"test": "echo run @anker-in/campaign-ui tests",
|
|
111
|
-
"type-check": "tsc --noEmit",
|
|
112
|
-
"clean": "rm -rf .turbo node_modules dist style.css"
|
|
113
|
-
}
|
|
114
|
-
}
|
|
114
|
+
]
|
|
115
|
+
}
|
|
@@ -6,8 +6,9 @@ import { useCreditsContext } from '../provider'
|
|
|
6
6
|
import { useHeadlessContext } from '@anker-in/lib'
|
|
7
7
|
|
|
8
8
|
function useActivities({ page, pageSize, options = {} }: { page: number; pageSize: number; options?: any }) {
|
|
9
|
-
const { profile, isLoadingProfile } = useCreditsContext()
|
|
10
|
-
const { brand } = useHeadlessContext()
|
|
9
|
+
const { profile, isLoadingProfile, alpcBrand } = useCreditsContext()
|
|
10
|
+
const { brand: headlessBrand } = useHeadlessContext()
|
|
11
|
+
const brand = alpcBrand || headlessBrand
|
|
11
12
|
const [activities, setActivities] = useState<CreditLogResponse[]>([])
|
|
12
13
|
const [total, setTotal] = useState(0)
|
|
13
14
|
|
|
@@ -192,11 +192,13 @@ export const useAlpcFetch = <TData>(
|
|
|
192
192
|
swrOptions?: UseAlpcFetchOptionsSwrOptions<TData, Error>
|
|
193
193
|
) => {
|
|
194
194
|
const [retry, setRetry] = useState(false)
|
|
195
|
-
const { removeProfile } = useCreditsContext()
|
|
195
|
+
const { removeProfile, alpcBrand } = useCreditsContext()
|
|
196
196
|
|
|
197
197
|
const { enable, ...otherSwrOptions } = swrOptions || {}
|
|
198
198
|
|
|
199
|
-
const { locale = '', brand } = useHeadlessContext()
|
|
199
|
+
const { locale = '', brand: headlessBrand } = useHeadlessContext()
|
|
200
|
+
// 优先使用 creditsContext 中的 alpcBrand,如果没有则使用 headlessConfig 中的 brand
|
|
201
|
+
const brand = alpcBrand || headlessBrand
|
|
200
202
|
|
|
201
203
|
const { queryKey = [], body: fetchBody = {}, headers, ...fetchOptions } = options
|
|
202
204
|
const fetchEnable = enable ?? true
|
|
@@ -249,9 +251,11 @@ export const useAlpcFetch = <TData>(
|
|
|
249
251
|
|
|
250
252
|
export const useAlpcMutation = <TData, TBody>(options: MutationOptions, mutationOptions?: UseMutationConfig<TData>) => {
|
|
251
253
|
const [retry, setRetry] = useState(false)
|
|
252
|
-
const { removeProfile } = useCreditsContext()
|
|
254
|
+
const { removeProfile, alpcBrand } = useCreditsContext()
|
|
253
255
|
|
|
254
|
-
const { locale = '', brand } = useHeadlessContext()
|
|
256
|
+
const { locale = '', brand: headlessBrand } = useHeadlessContext()
|
|
257
|
+
// 优先使用 creditsContext 中的 alpcBrand,如果没有则使用 headlessConfig 中的 brand
|
|
258
|
+
const brand = alpcBrand || headlessBrand
|
|
255
259
|
|
|
256
260
|
const { url, initData, headers, ...fetchOptions } = options
|
|
257
261
|
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { ProductVariant } from '@anker-in/lib'
|
|
2
|
+
import { FunctionMemberPriceResult } from '../memberPriceTypes'
|
|
3
|
+
import { getFunctionMemberPrice } from '../utils/getFunctionMemberPrice'
|
|
4
|
+
import { useMemo } from 'react'
|
|
5
|
+
import { useCreditsContext } from '../provider'
|
|
6
|
+
import { useHeadlessContext } from '@anker-in/lib'
|
|
7
|
+
|
|
8
|
+
// 计算单件商品的会员价
|
|
9
|
+
export const useFunctionMemberPrice = ({ variant }: { variant?: ProductVariant }) => {
|
|
10
|
+
const { memberPriceDiscount } = useCreditsContext()
|
|
11
|
+
const { locale = '' } = useHeadlessContext()
|
|
12
|
+
|
|
13
|
+
const memberPrice:
|
|
14
|
+
| FunctionMemberPriceResult
|
|
15
|
+
| (Partial<FunctionMemberPriceResult> & {
|
|
16
|
+
hasMemberPrice: false
|
|
17
|
+
}) = useMemo(() => {
|
|
18
|
+
const result = getFunctionMemberPrice({
|
|
19
|
+
memberPriceDiscount: memberPriceDiscount,
|
|
20
|
+
currencyCode: variant?.price.currencyCode,
|
|
21
|
+
variant,
|
|
22
|
+
locale,
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
if (result) {
|
|
26
|
+
return result as FunctionMemberPriceResult
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return { hasMemberPrice: false }
|
|
30
|
+
}, [locale, memberPriceDiscount, variant])
|
|
31
|
+
|
|
32
|
+
return memberPrice
|
|
33
|
+
}
|
|
@@ -15,8 +15,9 @@ function useMyRewards({
|
|
|
15
15
|
pageSize: number
|
|
16
16
|
consumeType?: AlpcConsumeType
|
|
17
17
|
}) {
|
|
18
|
-
const { isLoadingProfile, profile } = useCreditsContext()
|
|
19
|
-
const { brand, locale, appName } = useHeadlessContext()
|
|
18
|
+
const { isLoadingProfile, profile, alpcBrand } = useCreditsContext()
|
|
19
|
+
const { brand: headlessBrand, locale, appName } = useHeadlessContext()
|
|
20
|
+
const brand = alpcBrand || headlessBrand
|
|
20
21
|
const isLogin = !!profile
|
|
21
22
|
|
|
22
23
|
const [myRewards, setMyRewards] = useState<RedeemLogResponse[]>([])
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ALPC_COUNTRY_MAP } from '../const'
|
|
2
2
|
import { useAlpcMutation, type UseMutationConfig } from './useAlpcFetch'
|
|
3
3
|
import { useHeadlessContext } from '@anker-in/lib'
|
|
4
|
+
import { useCreditsContext } from '../provider'
|
|
4
5
|
|
|
5
6
|
type RedeemCouponResponse = {
|
|
6
7
|
data: {
|
|
@@ -12,7 +13,9 @@ type RedeemCouponResponse = {
|
|
|
12
13
|
}
|
|
13
14
|
|
|
14
15
|
export const useRedeemCoupon = (mutationOptions: UseMutationConfig<RedeemCouponResponse> = {}) => {
|
|
15
|
-
const {
|
|
16
|
+
const { alpcBrand } = useCreditsContext()
|
|
17
|
+
const { locale, appName, brand: headlessBrand } = useHeadlessContext()
|
|
18
|
+
const brand = alpcBrand || headlessBrand
|
|
16
19
|
|
|
17
20
|
return useAlpcMutation<
|
|
18
21
|
RedeemCouponResponse,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ALPC_COUNTRY_MAP } from '../const'
|
|
2
2
|
import { useAlpcMutation, type UseMutationConfig } from './useAlpcFetch'
|
|
3
3
|
import { useHeadlessContext } from '@anker-in/lib'
|
|
4
|
+
import { useCreditsContext } from '../provider'
|
|
4
5
|
|
|
5
6
|
type RedeemProductResponse = {
|
|
6
7
|
code: number
|
|
@@ -10,7 +11,9 @@ type RedeemProductResponse = {
|
|
|
10
11
|
}
|
|
11
12
|
|
|
12
13
|
export const useRedeemProduct = (mutationOptions: UseMutationConfig<RedeemProductResponse> = {}) => {
|
|
13
|
-
const {
|
|
14
|
+
const { alpcBrand } = useCreditsContext()
|
|
15
|
+
const { storeDomain, locale, appName, brand: headlessBrand } = useHeadlessContext()
|
|
16
|
+
const brand = alpcBrand || headlessBrand
|
|
14
17
|
|
|
15
18
|
return useAlpcMutation<
|
|
16
19
|
RedeemProductResponse,
|
|
@@ -8,8 +8,9 @@ import { useHeadlessContext } from '@anker-in/lib'
|
|
|
8
8
|
|
|
9
9
|
function useRedeemableList() {
|
|
10
10
|
let locale = '' as string
|
|
11
|
-
const { profile, isLoadingProfile } = useCreditsContext()
|
|
12
|
-
const { locale: contextLocale, brand } = useHeadlessContext()
|
|
11
|
+
const { profile, isLoadingProfile, alpcBrand } = useCreditsContext()
|
|
12
|
+
const { locale: contextLocale, brand: headlessBrand } = useHeadlessContext()
|
|
13
|
+
const brand = alpcBrand || headlessBrand
|
|
13
14
|
|
|
14
15
|
if (contextLocale === 'pl') {
|
|
15
16
|
locale = 'eu'
|
|
@@ -30,7 +31,6 @@ function useRedeemableList() {
|
|
|
30
31
|
page: 1,
|
|
31
32
|
page_size: 20,
|
|
32
33
|
country: (ALPC_COUNTRY_MAP.get(locale) || locale)?.toUpperCase(),
|
|
33
|
-
task_target: 1, // 1: 'app', 2: 'website'
|
|
34
34
|
},
|
|
35
35
|
})
|
|
36
36
|
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// Function 折扣类型
|
|
2
|
+
export enum FunctionDiscountType {
|
|
3
|
+
Percentage = 1,
|
|
4
|
+
FixedAmount,
|
|
5
|
+
FixedPrice,
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
// 小数位取舍方式
|
|
9
|
+
export enum RoundSelected {
|
|
10
|
+
RoundHighest = 'round_highest',
|
|
11
|
+
RoundLowest = 'round_lowest',
|
|
12
|
+
RoundNearest = 'round_nearest',
|
|
13
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { FunctionDiscountType, RoundSelected } from './memberPriceConst'
|
|
2
|
+
|
|
3
|
+
// 价格结尾配置
|
|
4
|
+
export type PriceEndingConf = {
|
|
5
|
+
apply_price_ending: boolean
|
|
6
|
+
one_decimal_place: string
|
|
7
|
+
two_decimal_place: string
|
|
8
|
+
round_selected: RoundSelected
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
// 折扣配置
|
|
12
|
+
export type DiscountConfig = {
|
|
13
|
+
discount_type: FunctionDiscountType
|
|
14
|
+
discount_value: number
|
|
15
|
+
price_ending_conf?: PriceEndingConf
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// 会员价配置类型
|
|
19
|
+
export type FunctionMemberPriceConfig = {
|
|
20
|
+
rule_id: string
|
|
21
|
+
result_detail: {
|
|
22
|
+
member_discounts?: {
|
|
23
|
+
user_identity: number // 用户身份:1-普通会员,2-高级会员等
|
|
24
|
+
main_products: {
|
|
25
|
+
all_store_variant: boolean
|
|
26
|
+
variants: {
|
|
27
|
+
variant_id: string
|
|
28
|
+
sku: string
|
|
29
|
+
handle: string
|
|
30
|
+
}[]
|
|
31
|
+
}
|
|
32
|
+
discount_conf: DiscountConfig
|
|
33
|
+
}[]
|
|
34
|
+
}
|
|
35
|
+
discount_combinations: {
|
|
36
|
+
other_product_discounts: boolean
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// 会员价计算结果
|
|
41
|
+
export type FunctionMemberPriceResult = {
|
|
42
|
+
hasMemberPrice: boolean
|
|
43
|
+
useCoupon: boolean
|
|
44
|
+
originalPrice: number
|
|
45
|
+
originalPriceWithCurrency: string
|
|
46
|
+
salePrice: number
|
|
47
|
+
salePriceWithCurrency: string
|
|
48
|
+
salePriceWithoutCoupon: number
|
|
49
|
+
salePriceWithoutCouponWithCurrency: string
|
|
50
|
+
savePrice: number
|
|
51
|
+
savePriceWithCurrency: string
|
|
52
|
+
savePriceWithoutCoupon: number
|
|
53
|
+
savePriceWithoutCouponWithCurrency: string
|
|
54
|
+
}
|
|
@@ -2,6 +2,7 @@ import { createContext, PropsWithChildren, useContext } from 'react'
|
|
|
2
2
|
import type { DTC_TASK_TYPE } from './const'
|
|
3
3
|
import type { CreditInfoResponse } from './response'
|
|
4
4
|
import { CreditsPageCommon } from '../type'
|
|
5
|
+
import { FunctionMemberPriceConfig } from './memberPriceTypes'
|
|
5
6
|
|
|
6
7
|
type Context = {
|
|
7
8
|
profile: any
|
|
@@ -18,6 +19,8 @@ type Context = {
|
|
|
18
19
|
pageGroup: string
|
|
19
20
|
}
|
|
20
21
|
pageCommon: CreditsPageCommon
|
|
22
|
+
memberPriceDiscount?: FunctionMemberPriceConfig[]
|
|
23
|
+
alpcBrand?: string
|
|
21
24
|
}
|
|
22
25
|
|
|
23
26
|
export const CreditsContext = createContext<Context>({
|
|
@@ -34,6 +37,8 @@ export const CreditsContext = createContext<Context>({
|
|
|
34
37
|
pageGroup: '',
|
|
35
38
|
},
|
|
36
39
|
pageCommon: {},
|
|
40
|
+
memberPriceDiscount: undefined,
|
|
41
|
+
alpcBrand: undefined,
|
|
37
42
|
})
|
|
38
43
|
|
|
39
44
|
export function CreditsProvider({
|
|
@@ -50,6 +55,8 @@ export function CreditsProvider({
|
|
|
50
55
|
fetchCreditInfo,
|
|
51
56
|
gtm,
|
|
52
57
|
pageCommon,
|
|
58
|
+
memberPriceDiscount,
|
|
59
|
+
alpcBrand,
|
|
53
60
|
}: PropsWithChildren<Context>) {
|
|
54
61
|
return (
|
|
55
62
|
<CreditsContext.Provider
|
|
@@ -66,6 +73,8 @@ export function CreditsProvider({
|
|
|
66
73
|
customerLoading,
|
|
67
74
|
gtm,
|
|
68
75
|
pageCommon,
|
|
76
|
+
memberPriceDiscount,
|
|
77
|
+
alpcBrand,
|
|
69
78
|
}}
|
|
70
79
|
>
|
|
71
80
|
{children}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { FunctionDiscountType, RoundSelected } from '../memberPriceConst'
|
|
2
|
+
import { DiscountConfig } from '../memberPriceTypes'
|
|
3
|
+
import Decimal from 'decimal.js'
|
|
4
|
+
|
|
5
|
+
// Function 计算折后价
|
|
6
|
+
export const functionDiscountCalculate = ({
|
|
7
|
+
config,
|
|
8
|
+
price,
|
|
9
|
+
}: {
|
|
10
|
+
config: DiscountConfig
|
|
11
|
+
price: number
|
|
12
|
+
}) => {
|
|
13
|
+
const { apply_price_ending, one_decimal_place, two_decimal_place, round_selected } =
|
|
14
|
+
config.price_ending_conf || {}
|
|
15
|
+
|
|
16
|
+
let salePrice = new Decimal(price)
|
|
17
|
+
|
|
18
|
+
switch (config.discount_type) {
|
|
19
|
+
// 百分比折扣
|
|
20
|
+
case FunctionDiscountType.Percentage:
|
|
21
|
+
salePrice = salePrice.mul(100 - config.discount_value).div(100)
|
|
22
|
+
break
|
|
23
|
+
// 固定金额折扣
|
|
24
|
+
case FunctionDiscountType.FixedAmount:
|
|
25
|
+
salePrice = salePrice.sub(config.discount_value)
|
|
26
|
+
break
|
|
27
|
+
// 固定价格折扣
|
|
28
|
+
case FunctionDiscountType.FixedPrice:
|
|
29
|
+
salePrice = new Decimal(config.discount_value)
|
|
30
|
+
break
|
|
31
|
+
default:
|
|
32
|
+
break
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (apply_price_ending) {
|
|
36
|
+
// 小数位取舍
|
|
37
|
+
switch (round_selected) {
|
|
38
|
+
case RoundSelected.RoundHighest:
|
|
39
|
+
salePrice = salePrice.ceil()
|
|
40
|
+
break
|
|
41
|
+
case RoundSelected.RoundLowest:
|
|
42
|
+
salePrice = salePrice.floor()
|
|
43
|
+
break
|
|
44
|
+
case RoundSelected.RoundNearest:
|
|
45
|
+
salePrice = salePrice.round()
|
|
46
|
+
break
|
|
47
|
+
default:
|
|
48
|
+
salePrice = new Decimal(salePrice.toFixed(2, Decimal.ROUND_DOWN))
|
|
49
|
+
break
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const priceEnding = salePrice.toString().split('.')
|
|
53
|
+
salePrice = new Decimal(priceEnding[0] + '.' + one_decimal_place + two_decimal_place)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return salePrice.toNumber()
|
|
57
|
+
}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { formatPrice } from '../utils'
|
|
2
|
+
import { FunctionMemberPriceConfig, FunctionMemberPriceResult } from '../memberPriceTypes'
|
|
3
|
+
import { ProductVariant } from '@anker-in/lib'
|
|
4
|
+
import { functionDiscountCalculate } from './functionDiscountCalculate'
|
|
5
|
+
import Decimal from 'decimal.js'
|
|
6
|
+
import { getFunctionMemberPriceDiscountConfig } from './getFunctionMemberPriceDiscountConfig'
|
|
7
|
+
import variantGetCoupon from './variantGetCoupon'
|
|
8
|
+
|
|
9
|
+
// 计算单件商品的会员价
|
|
10
|
+
export const getFunctionMemberPrice = ({
|
|
11
|
+
memberPriceDiscount,
|
|
12
|
+
currencyCode,
|
|
13
|
+
variant,
|
|
14
|
+
locale,
|
|
15
|
+
}: {
|
|
16
|
+
memberPriceDiscount?: FunctionMemberPriceConfig[]
|
|
17
|
+
currencyCode?: string
|
|
18
|
+
variant?: ProductVariant
|
|
19
|
+
locale: string
|
|
20
|
+
}) => {
|
|
21
|
+
const couponData = variantGetCoupon({ variant })
|
|
22
|
+
|
|
23
|
+
// variant对应的会员价折扣配置
|
|
24
|
+
const { memberPriceDiscountConfig, activeMemberPriceConfig } = getFunctionMemberPriceDiscountConfig({
|
|
25
|
+
config: memberPriceDiscount,
|
|
26
|
+
variant,
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
const useCoupon = !!activeMemberPriceConfig?.discount_combinations.other_product_discounts
|
|
30
|
+
|
|
31
|
+
if (!memberPriceDiscountConfig) {
|
|
32
|
+
return false as false
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const originalPrice = {
|
|
36
|
+
amount: variant?.price.amount || 0,
|
|
37
|
+
priceWithCurrency: formatPrice({
|
|
38
|
+
amount: variant?.price.amount || 0,
|
|
39
|
+
currencyCode: currencyCode || 'USD',
|
|
40
|
+
locale,
|
|
41
|
+
}),
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const salePriceWithoutCouponAmount = memberPriceDiscountConfig
|
|
45
|
+
? functionDiscountCalculate({
|
|
46
|
+
config: memberPriceDiscountConfig,
|
|
47
|
+
price: variant?.price.amount || 0,
|
|
48
|
+
})
|
|
49
|
+
: variant?.price.amount || 0
|
|
50
|
+
const salePriceWithoutCoupon = {
|
|
51
|
+
amount: salePriceWithoutCouponAmount,
|
|
52
|
+
priceWithCurrency: formatPrice({
|
|
53
|
+
amount: salePriceWithoutCouponAmount,
|
|
54
|
+
currencyCode: currencyCode || 'USD',
|
|
55
|
+
locale,
|
|
56
|
+
}),
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// function 会员价是在原价的基础上进行计算,暂不支持折后价
|
|
60
|
+
let salePriceAmount = salePriceWithoutCouponAmount
|
|
61
|
+
|
|
62
|
+
// 减去code的优惠
|
|
63
|
+
if (couponData?.variant_price4wscode && variant && useCoupon) {
|
|
64
|
+
if (useCoupon) {
|
|
65
|
+
// code的优惠金额
|
|
66
|
+
const codeSaveAmountDecimal = new Decimal(variant.price.amount).minus(couponData.variant_price4wscode)
|
|
67
|
+
salePriceAmount = new Decimal(salePriceWithoutCouponAmount).minus(codeSaveAmountDecimal).toNumber()
|
|
68
|
+
} else {
|
|
69
|
+
// 不能与 code 同时使用,需要判断会员价是否小于 code 的优惠金额,如果小于则当做没有会员价
|
|
70
|
+
const codeSaveAmountDecimal = new Decimal(variant.price.amount).minus(couponData.variant_price4wscode)
|
|
71
|
+
if (salePriceWithoutCouponAmount > codeSaveAmountDecimal.toNumber()) {
|
|
72
|
+
return false as false
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const salePrice = {
|
|
78
|
+
amount: salePriceAmount,
|
|
79
|
+
priceWithCurrency: formatPrice({
|
|
80
|
+
amount: salePriceAmount,
|
|
81
|
+
currencyCode: currencyCode || 'USD',
|
|
82
|
+
locale,
|
|
83
|
+
}),
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const savePriceAmount = new Decimal(originalPrice.amount).minus(salePrice.amount).toNumber()
|
|
87
|
+
const savePrice = {
|
|
88
|
+
amount: savePriceAmount,
|
|
89
|
+
priceWithCurrency: formatPrice({
|
|
90
|
+
amount: savePriceAmount,
|
|
91
|
+
currencyCode: currencyCode || 'USD',
|
|
92
|
+
locale,
|
|
93
|
+
maximumFractionDigits: 2,
|
|
94
|
+
}),
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const savePriceWithoutCouponAmount = new Decimal(originalPrice.amount)
|
|
98
|
+
.minus(salePriceWithoutCoupon.amount)
|
|
99
|
+
.toNumber()
|
|
100
|
+
const savePriceWithoutCoupon = {
|
|
101
|
+
amount: savePriceWithoutCouponAmount,
|
|
102
|
+
priceWithCurrency: formatPrice({
|
|
103
|
+
amount: savePriceWithoutCouponAmount,
|
|
104
|
+
currencyCode: currencyCode || 'USD',
|
|
105
|
+
locale,
|
|
106
|
+
maximumFractionDigits: 2,
|
|
107
|
+
}),
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const result: FunctionMemberPriceResult = {
|
|
111
|
+
// 是否存在会员价
|
|
112
|
+
hasMemberPrice: !!memberPriceDiscountConfig,
|
|
113
|
+
useCoupon,
|
|
114
|
+
// 原价
|
|
115
|
+
originalPrice: originalPrice.amount,
|
|
116
|
+
originalPriceWithCurrency: originalPrice.priceWithCurrency as string,
|
|
117
|
+
// 使用券后的折后价
|
|
118
|
+
salePrice: salePrice.amount,
|
|
119
|
+
salePriceWithCurrency: salePrice.priceWithCurrency as string,
|
|
120
|
+
|
|
121
|
+
// 不使用券的折后价
|
|
122
|
+
salePriceWithoutCoupon: salePriceWithoutCoupon.amount,
|
|
123
|
+
salePriceWithoutCouponWithCurrency: salePriceWithoutCoupon.priceWithCurrency as string,
|
|
124
|
+
|
|
125
|
+
// 包含使用券的节省金额
|
|
126
|
+
savePrice: savePrice.amount,
|
|
127
|
+
savePriceWithCurrency: savePrice.priceWithCurrency as string,
|
|
128
|
+
|
|
129
|
+
// 不使用券的节省金额
|
|
130
|
+
savePriceWithoutCoupon: savePriceWithoutCoupon.amount,
|
|
131
|
+
savePriceWithoutCouponWithCurrency: savePriceWithoutCoupon.priceWithCurrency as string,
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
return result
|
|
135
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { DiscountConfig, FunctionMemberPriceConfig } from '../memberPriceTypes'
|
|
2
|
+
import { ProductVariant } from '@anker-in/lib'
|
|
3
|
+
import { atobID } from './atobID'
|
|
4
|
+
|
|
5
|
+
// 获取会员价折扣配置
|
|
6
|
+
export const getFunctionMemberPriceDiscountConfig = ({
|
|
7
|
+
config,
|
|
8
|
+
variant,
|
|
9
|
+
}: {
|
|
10
|
+
config?: FunctionMemberPriceConfig[]
|
|
11
|
+
variant?: ProductVariant
|
|
12
|
+
}) => {
|
|
13
|
+
let memberPriceDiscountConfig: DiscountConfig | undefined
|
|
14
|
+
let activeMemberPriceConfig: FunctionMemberPriceConfig | undefined
|
|
15
|
+
|
|
16
|
+
if (!config || !variant) {
|
|
17
|
+
return {
|
|
18
|
+
memberPriceDiscountConfig,
|
|
19
|
+
activeMemberPriceConfig,
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
for (const configItem of config) {
|
|
24
|
+
memberPriceDiscountConfig = configItem.result_detail.member_discounts?.find(discountItem => {
|
|
25
|
+
if (discountItem.main_products.all_store_variant) {
|
|
26
|
+
return discountItem
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return discountItem.main_products.variants.find(
|
|
30
|
+
variantConfig => String(variantConfig.variant_id) === atobID(variant.id as string)
|
|
31
|
+
)
|
|
32
|
+
})?.discount_conf
|
|
33
|
+
|
|
34
|
+
if (memberPriceDiscountConfig) {
|
|
35
|
+
activeMemberPriceConfig = configItem
|
|
36
|
+
break
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if (!memberPriceDiscountConfig) {
|
|
41
|
+
return {
|
|
42
|
+
memberPriceDiscountConfig,
|
|
43
|
+
activeMemberPriceConfig,
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return {
|
|
48
|
+
memberPriceDiscountConfig,
|
|
49
|
+
activeMemberPriceConfig,
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { ProductVariant } from '@anker-in/lib'
|
|
2
|
+
import { atobID } from './atobID'
|
|
3
|
+
|
|
4
|
+
const variantGetCoupon = ({
|
|
5
|
+
variant,
|
|
6
|
+
channel = '',
|
|
7
|
+
}: {
|
|
8
|
+
variant?: ProductVariant
|
|
9
|
+
channel?: string
|
|
10
|
+
}) => {
|
|
11
|
+
if (!variant) return undefined
|
|
12
|
+
|
|
13
|
+
const hideChannel = 'wsch'
|
|
14
|
+
const discountCodeApp = variant?.metafields?.discountCodeApp || []
|
|
15
|
+
|
|
16
|
+
const results = discountCodeApp?.filter((coupon: any) => {
|
|
17
|
+
const variantId = atobID(variant.id as string)
|
|
18
|
+
const isActive =
|
|
19
|
+
(!coupon?.ends_at || new Date(coupon?.ends_at).getTime() > new Date().getTime()) &&
|
|
20
|
+
new Date(coupon?.starts_at).getTime() <= new Date().getTime() &&
|
|
21
|
+
coupon.variant_shopify_id === +(variantId || '')
|
|
22
|
+
|
|
23
|
+
return (
|
|
24
|
+
isActive &&
|
|
25
|
+
(channel
|
|
26
|
+
? coupon?.title?.toLocaleLowerCase().includes(channel)
|
|
27
|
+
: !coupon?.title?.toLocaleLowerCase().includes(hideChannel))
|
|
28
|
+
)
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
return results?.[0]
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export default variantGetCoupon
|