@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.
Files changed (264) hide show
  1. package/dist/cjs/components/credits/context/hooks/useActivities.js +1 -1
  2. package/dist/cjs/components/credits/context/hooks/useActivities.js.map +3 -3
  3. package/dist/cjs/components/credits/context/hooks/useAlpcFetch.js +1 -1
  4. package/dist/cjs/components/credits/context/hooks/useAlpcFetch.js.map +3 -3
  5. package/dist/cjs/components/credits/context/hooks/useFunctionMemberPrice.d.ts +7 -0
  6. package/dist/cjs/components/credits/context/hooks/useFunctionMemberPrice.js +2 -0
  7. package/dist/cjs/components/credits/context/hooks/useFunctionMemberPrice.js.map +7 -0
  8. package/dist/cjs/components/credits/context/hooks/useMyRewards.js +1 -1
  9. package/dist/cjs/components/credits/context/hooks/useMyRewards.js.map +3 -3
  10. package/dist/cjs/components/credits/context/hooks/useRedeemCoupon.js +1 -1
  11. package/dist/cjs/components/credits/context/hooks/useRedeemCoupon.js.map +3 -3
  12. package/dist/cjs/components/credits/context/hooks/useRedeemProduct.js +1 -1
  13. package/dist/cjs/components/credits/context/hooks/useRedeemProduct.js.map +3 -3
  14. package/dist/cjs/components/credits/context/hooks/useRedeemableList.js +1 -1
  15. package/dist/cjs/components/credits/context/hooks/useRedeemableList.js.map +3 -3
  16. package/dist/cjs/components/credits/context/memberPriceConst.d.ts +10 -0
  17. package/dist/cjs/components/credits/context/memberPriceConst.js +2 -0
  18. package/dist/cjs/components/credits/context/memberPriceConst.js.map +7 -0
  19. package/dist/cjs/components/credits/context/memberPriceTypes.d.ts +46 -0
  20. package/dist/cjs/components/credits/context/memberPriceTypes.js +2 -0
  21. package/dist/cjs/components/credits/context/memberPriceTypes.js.map +7 -0
  22. package/dist/cjs/components/credits/context/provider.d.ts +4 -1
  23. package/dist/cjs/components/credits/context/provider.js +1 -1
  24. package/dist/cjs/components/credits/context/provider.js.map +3 -3
  25. package/dist/cjs/components/credits/context/utils/atobID.d.ts +1 -0
  26. package/dist/cjs/components/credits/context/utils/atobID.js +2 -0
  27. package/dist/cjs/components/credits/context/utils/atobID.js.map +7 -0
  28. package/dist/cjs/components/credits/context/utils/functionDiscountCalculate.d.ts +5 -0
  29. package/dist/cjs/components/credits/context/utils/functionDiscountCalculate.js +2 -0
  30. package/dist/cjs/components/credits/context/utils/functionDiscountCalculate.js.map +7 -0
  31. package/dist/cjs/components/credits/context/utils/getFunctionMemberPrice.d.ts +8 -0
  32. package/dist/cjs/components/credits/context/utils/getFunctionMemberPrice.js +2 -0
  33. package/dist/cjs/components/credits/context/utils/getFunctionMemberPrice.js.map +7 -0
  34. package/dist/cjs/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.d.ts +9 -0
  35. package/dist/cjs/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.js +2 -0
  36. package/dist/cjs/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.js.map +7 -0
  37. package/dist/cjs/components/credits/context/utils/variantGetCoupon.d.ts +6 -0
  38. package/dist/cjs/components/credits/context/utils/variantGetCoupon.js +2 -0
  39. package/dist/cjs/components/credits/context/utils/variantGetCoupon.js.map +7 -0
  40. package/dist/cjs/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.d.ts +4 -0
  41. package/dist/cjs/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.js +2 -0
  42. package/dist/cjs/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.js.map +7 -0
  43. package/dist/cjs/components/credits/creditsAnkersolixTask/index.d.ts +2 -0
  44. package/dist/cjs/components/credits/creditsAnkersolixTask/index.js +2 -0
  45. package/dist/cjs/components/credits/creditsAnkersolixTask/index.js.map +7 -0
  46. package/dist/cjs/components/credits/creditsAnkersolixTask/type.d.ts +1 -0
  47. package/dist/cjs/components/credits/creditsAnkersolixTask/type.js +2 -0
  48. package/dist/cjs/components/credits/creditsAnkersolixTask/type.js.map +7 -0
  49. package/dist/cjs/components/credits/creditsBanner/index.d.ts +2 -1
  50. package/dist/cjs/components/credits/creditsBanner/index.js +1 -1
  51. package/dist/cjs/components/credits/creditsBanner/index.js.map +3 -3
  52. package/dist/cjs/components/credits/creditsBenefits/benefitItem.d.ts +4 -1
  53. package/dist/cjs/components/credits/creditsBenefits/benefitItem.js +2 -2
  54. package/dist/cjs/components/credits/creditsBenefits/benefitItem.js.map +4 -4
  55. package/dist/cjs/components/credits/creditsBenefits/iconInfo.js +1 -1
  56. package/dist/cjs/components/credits/creditsBenefits/iconInfo.js.map +2 -2
  57. package/dist/cjs/components/credits/creditsBenefits/index.d.ts +6 -2
  58. package/dist/cjs/components/credits/creditsBenefits/index.js +3 -3
  59. package/dist/cjs/components/credits/creditsBenefits/index.js.map +3 -3
  60. package/dist/cjs/components/credits/creditsCash/CreditsCash.d.ts +2 -1
  61. package/dist/cjs/components/credits/creditsCash/CreditsCash.js +1 -1
  62. package/dist/cjs/components/credits/creditsCash/CreditsCash.js.map +3 -3
  63. package/dist/cjs/components/credits/creditsCash/RedeemableItem.js +1 -1
  64. package/dist/cjs/components/credits/creditsCash/RedeemableItem.js.map +2 -2
  65. package/dist/cjs/components/credits/creditsFaq/index.d.ts +2 -1
  66. package/dist/cjs/components/credits/creditsFaq/index.js +1 -1
  67. package/dist/cjs/components/credits/creditsFaq/index.js.map +3 -3
  68. package/dist/cjs/components/credits/creditsInfoCard/index.d.ts +2 -1
  69. package/dist/cjs/components/credits/creditsInfoCard/index.js +1 -1
  70. package/dist/cjs/components/credits/creditsInfoCard/index.js.map +3 -3
  71. package/dist/cjs/components/credits/creditsMemberPrice/CreditsMemberPrice.d.ts +5 -0
  72. package/dist/cjs/components/credits/creditsMemberPrice/CreditsMemberPrice.js +2 -0
  73. package/dist/cjs/components/credits/creditsMemberPrice/CreditsMemberPrice.js.map +7 -0
  74. package/dist/cjs/components/credits/creditsMemberPrice/MemberPriceItem.d.ts +7 -0
  75. package/dist/cjs/components/credits/creditsMemberPrice/MemberPriceItem.js +2 -0
  76. package/dist/cjs/components/credits/creditsMemberPrice/MemberPriceItem.js.map +7 -0
  77. package/dist/cjs/components/credits/creditsMemberPrice/index.d.ts +2 -0
  78. package/dist/cjs/components/credits/creditsMemberPrice/index.js +2 -0
  79. package/dist/cjs/components/credits/creditsMemberPrice/index.js.map +7 -0
  80. package/dist/cjs/components/credits/creditsMemberPrice/type.d.ts +64 -0
  81. package/dist/cjs/components/credits/creditsMemberPrice/type.js +2 -0
  82. package/dist/cjs/components/credits/creditsMemberPrice/type.js.map +7 -0
  83. package/dist/cjs/components/credits/creditsNavigation/CreditsNavigation.d.ts +4 -0
  84. package/dist/cjs/components/credits/creditsNavigation/CreditsNavigation.js +2 -0
  85. package/dist/cjs/components/credits/creditsNavigation/CreditsNavigation.js.map +7 -0
  86. package/dist/cjs/components/credits/creditsNavigation/index.d.ts +2 -0
  87. package/dist/cjs/components/credits/creditsNavigation/index.js +2 -0
  88. package/dist/cjs/components/credits/creditsNavigation/index.js.map +7 -0
  89. package/dist/cjs/components/credits/creditsNavigation/type.d.ts +7 -0
  90. package/dist/cjs/components/credits/creditsNavigation/type.js +2 -0
  91. package/dist/cjs/components/credits/creditsNavigation/type.js.map +7 -0
  92. package/dist/cjs/components/credits/creditsRedeemList/CreditsRedeemList.d.ts +2 -1
  93. package/dist/cjs/components/credits/creditsRedeemList/CreditsRedeemList.js +1 -1
  94. package/dist/cjs/components/credits/creditsRedeemList/CreditsRedeemList.js.map +3 -3
  95. package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/Error.js +1 -1
  96. package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/Error.js.map +2 -2
  97. package/dist/cjs/components/credits/creditsRedeemList/type.d.ts +1 -0
  98. package/dist/cjs/components/credits/creditsRedeemList/type.js +1 -1
  99. package/dist/cjs/components/credits/creditsRedeemList/type.js.map +1 -1
  100. package/dist/cjs/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.d.ts +3 -1
  101. package/dist/cjs/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.js +1 -1
  102. package/dist/cjs/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.js.map +3 -3
  103. package/dist/cjs/templates/credits.d.ts +15 -1
  104. package/dist/cjs/templates/credits.js +2 -2
  105. package/dist/cjs/templates/credits.js.map +4 -4
  106. package/dist/cjs/templates/index.d.ts +1 -1
  107. package/dist/cjs/templates/index.js +1 -1
  108. package/dist/cjs/templates/index.js.map +1 -1
  109. package/dist/esm/components/credits/context/hooks/useActivities.js +1 -1
  110. package/dist/esm/components/credits/context/hooks/useActivities.js.map +3 -3
  111. package/dist/esm/components/credits/context/hooks/useAlpcFetch.js +1 -1
  112. package/dist/esm/components/credits/context/hooks/useAlpcFetch.js.map +3 -3
  113. package/dist/esm/components/credits/context/hooks/useFunctionMemberPrice.d.ts +7 -0
  114. package/dist/esm/components/credits/context/hooks/useFunctionMemberPrice.js +2 -0
  115. package/dist/esm/components/credits/context/hooks/useFunctionMemberPrice.js.map +7 -0
  116. package/dist/esm/components/credits/context/hooks/useMyRewards.js +1 -1
  117. package/dist/esm/components/credits/context/hooks/useMyRewards.js.map +3 -3
  118. package/dist/esm/components/credits/context/hooks/useRedeemCoupon.js +1 -1
  119. package/dist/esm/components/credits/context/hooks/useRedeemCoupon.js.map +3 -3
  120. package/dist/esm/components/credits/context/hooks/useRedeemProduct.js +1 -1
  121. package/dist/esm/components/credits/context/hooks/useRedeemProduct.js.map +3 -3
  122. package/dist/esm/components/credits/context/hooks/useRedeemableList.js +1 -1
  123. package/dist/esm/components/credits/context/hooks/useRedeemableList.js.map +3 -3
  124. package/dist/esm/components/credits/context/memberPriceConst.d.ts +10 -0
  125. package/dist/esm/components/credits/context/memberPriceConst.js +2 -0
  126. package/dist/esm/components/credits/context/memberPriceConst.js.map +7 -0
  127. package/dist/esm/components/credits/context/memberPriceTypes.d.ts +46 -0
  128. package/dist/esm/components/credits/context/memberPriceTypes.js +1 -0
  129. package/dist/esm/components/credits/context/memberPriceTypes.js.map +7 -0
  130. package/dist/esm/components/credits/context/provider.d.ts +4 -1
  131. package/dist/esm/components/credits/context/provider.js +1 -1
  132. package/dist/esm/components/credits/context/provider.js.map +3 -3
  133. package/dist/esm/components/credits/context/utils/atobID.d.ts +1 -0
  134. package/dist/esm/components/credits/context/utils/atobID.js +2 -0
  135. package/dist/esm/components/credits/context/utils/atobID.js.map +7 -0
  136. package/dist/esm/components/credits/context/utils/functionDiscountCalculate.d.ts +5 -0
  137. package/dist/esm/components/credits/context/utils/functionDiscountCalculate.js +2 -0
  138. package/dist/esm/components/credits/context/utils/functionDiscountCalculate.js.map +7 -0
  139. package/dist/esm/components/credits/context/utils/getFunctionMemberPrice.d.ts +8 -0
  140. package/dist/esm/components/credits/context/utils/getFunctionMemberPrice.js +2 -0
  141. package/dist/esm/components/credits/context/utils/getFunctionMemberPrice.js.map +7 -0
  142. package/dist/esm/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.d.ts +9 -0
  143. package/dist/esm/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.js +2 -0
  144. package/dist/esm/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.js.map +7 -0
  145. package/dist/esm/components/credits/context/utils/variantGetCoupon.d.ts +6 -0
  146. package/dist/esm/components/credits/context/utils/variantGetCoupon.js +2 -0
  147. package/dist/esm/components/credits/context/utils/variantGetCoupon.js.map +7 -0
  148. package/dist/esm/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.d.ts +4 -0
  149. package/dist/esm/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.js +2 -0
  150. package/dist/esm/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.js.map +7 -0
  151. package/dist/esm/components/credits/creditsAnkersolixTask/index.d.ts +2 -0
  152. package/dist/esm/components/credits/creditsAnkersolixTask/index.js +2 -0
  153. package/dist/esm/components/credits/creditsAnkersolixTask/index.js.map +7 -0
  154. package/dist/esm/components/credits/creditsAnkersolixTask/type.d.ts +1 -0
  155. package/dist/esm/components/credits/creditsAnkersolixTask/type.js +2 -0
  156. package/dist/esm/components/credits/creditsAnkersolixTask/type.js.map +7 -0
  157. package/dist/esm/components/credits/creditsBanner/index.d.ts +2 -1
  158. package/dist/esm/components/credits/creditsBanner/index.js +1 -1
  159. package/dist/esm/components/credits/creditsBanner/index.js.map +3 -3
  160. package/dist/esm/components/credits/creditsBenefits/benefitItem.d.ts +4 -1
  161. package/dist/esm/components/credits/creditsBenefits/benefitItem.js +2 -2
  162. package/dist/esm/components/credits/creditsBenefits/benefitItem.js.map +4 -4
  163. package/dist/esm/components/credits/creditsBenefits/iconInfo.js +1 -1
  164. package/dist/esm/components/credits/creditsBenefits/iconInfo.js.map +2 -2
  165. package/dist/esm/components/credits/creditsBenefits/index.d.ts +6 -2
  166. package/dist/esm/components/credits/creditsBenefits/index.js +3 -3
  167. package/dist/esm/components/credits/creditsBenefits/index.js.map +3 -3
  168. package/dist/esm/components/credits/creditsCash/CreditsCash.d.ts +2 -1
  169. package/dist/esm/components/credits/creditsCash/CreditsCash.js +1 -1
  170. package/dist/esm/components/credits/creditsCash/CreditsCash.js.map +3 -3
  171. package/dist/esm/components/credits/creditsCash/RedeemableItem.js +1 -1
  172. package/dist/esm/components/credits/creditsCash/RedeemableItem.js.map +2 -2
  173. package/dist/esm/components/credits/creditsFaq/index.d.ts +2 -1
  174. package/dist/esm/components/credits/creditsFaq/index.js +1 -1
  175. package/dist/esm/components/credits/creditsFaq/index.js.map +3 -3
  176. package/dist/esm/components/credits/creditsInfoCard/index.d.ts +2 -1
  177. package/dist/esm/components/credits/creditsInfoCard/index.js +1 -1
  178. package/dist/esm/components/credits/creditsInfoCard/index.js.map +3 -3
  179. package/dist/esm/components/credits/creditsMemberPrice/CreditsMemberPrice.d.ts +5 -0
  180. package/dist/esm/components/credits/creditsMemberPrice/CreditsMemberPrice.js +2 -0
  181. package/dist/esm/components/credits/creditsMemberPrice/CreditsMemberPrice.js.map +7 -0
  182. package/dist/esm/components/credits/creditsMemberPrice/MemberPriceItem.d.ts +7 -0
  183. package/dist/esm/components/credits/creditsMemberPrice/MemberPriceItem.js +2 -0
  184. package/dist/esm/components/credits/creditsMemberPrice/MemberPriceItem.js.map +7 -0
  185. package/dist/esm/components/credits/creditsMemberPrice/index.d.ts +2 -0
  186. package/dist/esm/components/credits/creditsMemberPrice/index.js +2 -0
  187. package/dist/esm/components/credits/creditsMemberPrice/index.js.map +7 -0
  188. package/dist/esm/components/credits/creditsMemberPrice/type.d.ts +64 -0
  189. package/dist/esm/components/credits/creditsMemberPrice/type.js +1 -0
  190. package/dist/esm/components/credits/creditsMemberPrice/type.js.map +7 -0
  191. package/dist/esm/components/credits/creditsNavigation/CreditsNavigation.d.ts +4 -0
  192. package/dist/esm/components/credits/creditsNavigation/CreditsNavigation.js +2 -0
  193. package/dist/esm/components/credits/creditsNavigation/CreditsNavigation.js.map +7 -0
  194. package/dist/esm/components/credits/creditsNavigation/index.d.ts +2 -0
  195. package/dist/esm/components/credits/creditsNavigation/index.js +2 -0
  196. package/dist/esm/components/credits/creditsNavigation/index.js.map +7 -0
  197. package/dist/esm/components/credits/creditsNavigation/type.d.ts +7 -0
  198. package/dist/esm/components/credits/creditsNavigation/type.js +1 -0
  199. package/dist/esm/components/credits/creditsNavigation/type.js.map +7 -0
  200. package/dist/esm/components/credits/creditsRedeemList/CreditsRedeemList.d.ts +2 -1
  201. package/dist/esm/components/credits/creditsRedeemList/CreditsRedeemList.js +1 -1
  202. package/dist/esm/components/credits/creditsRedeemList/CreditsRedeemList.js.map +3 -3
  203. package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/Error.js +1 -1
  204. package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/Error.js.map +2 -2
  205. package/dist/esm/components/credits/creditsRedeemList/type.d.ts +1 -0
  206. package/dist/esm/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.d.ts +3 -1
  207. package/dist/esm/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.js +1 -1
  208. package/dist/esm/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.js.map +3 -3
  209. package/dist/esm/templates/credits.d.ts +15 -1
  210. package/dist/esm/templates/credits.js +2 -2
  211. package/dist/esm/templates/credits.js.map +4 -4
  212. package/dist/esm/templates/index.d.ts +1 -1
  213. package/dist/esm/templates/index.js +1 -1
  214. package/dist/esm/templates/index.js.map +1 -1
  215. package/dist/index.js +40660 -0
  216. package/dist/index.js.map +1 -0
  217. package/dist/index.mjs +40648 -0
  218. package/dist/index.mjs.map +1 -0
  219. package/package.json +21 -20
  220. package/src/components/credits/context/hooks/useActivities.ts +3 -2
  221. package/src/components/credits/context/hooks/useAlpcFetch.ts +8 -4
  222. package/src/components/credits/context/hooks/useFunctionMemberPrice.ts +33 -0
  223. package/src/components/credits/context/hooks/useMyRewards.ts +3 -2
  224. package/src/components/credits/context/hooks/useRedeemCoupon.ts +4 -1
  225. package/src/components/credits/context/hooks/useRedeemProduct.ts +4 -1
  226. package/src/components/credits/context/hooks/useRedeemableList.ts +3 -3
  227. package/src/components/credits/context/memberPriceConst.ts +13 -0
  228. package/src/components/credits/context/memberPriceTypes.ts +54 -0
  229. package/src/components/credits/context/provider.tsx +9 -0
  230. package/src/components/credits/context/utils/atobID.ts +8 -0
  231. package/src/components/credits/context/utils/functionDiscountCalculate.ts +57 -0
  232. package/src/components/credits/context/utils/getFunctionMemberPrice.ts +135 -0
  233. package/src/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.ts +51 -0
  234. package/src/components/credits/context/utils/variantGetCoupon.ts +34 -0
  235. package/src/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.tsx +270 -0
  236. package/src/components/credits/creditsAnkersolixTask/index.ts +2 -0
  237. package/src/components/credits/creditsAnkersolixTask/type.ts +7 -0
  238. package/src/components/credits/creditsBanner/index.tsx +2 -2
  239. package/src/components/credits/creditsBenefits/{benefitItem.tsx → BenefitItem.tsx} +28 -9
  240. package/src/components/credits/creditsBenefits/index.tsx +12 -3
  241. package/src/components/credits/creditsCash/CreditsCash.tsx +5 -3
  242. package/src/components/credits/creditsCash/RedeemableItem.tsx +19 -15
  243. package/src/components/credits/creditsFaq/index.tsx +2 -2
  244. package/src/components/credits/creditsInfoCard/index.tsx +2 -2
  245. package/src/components/credits/creditsMemberPrice/CreditsMemberPrice.tsx +389 -0
  246. package/src/components/credits/creditsMemberPrice/MemberPriceItem.tsx +158 -0
  247. package/src/components/credits/creditsMemberPrice/index.ts +2 -0
  248. package/src/components/credits/creditsMemberPrice/type.ts +75 -0
  249. package/src/components/credits/creditsNavigation/CreditsNavigation.tsx +123 -0
  250. package/src/components/credits/creditsNavigation/index.ts +2 -0
  251. package/src/components/credits/creditsNavigation/type.ts +10 -0
  252. package/src/components/credits/creditsRedeemList/CreditsRedeemList.tsx +17 -3
  253. package/src/components/credits/creditsRedeemList/RedeemProductModal/Error.tsx +1 -1
  254. package/src/components/credits/creditsRedeemList/type.ts +1 -0
  255. package/src/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.tsx +2 -2
  256. package/src/templates/{credits.tsx → Credits.tsx} +38 -7
  257. package/src/templates/index.ts +1 -1
  258. package/dist/cjs/components/credits/const.d.ts +0 -1
  259. package/dist/cjs/components/credits/const.js +0 -2
  260. package/dist/cjs/components/credits/const.js.map +0 -7
  261. package/dist/esm/components/credits/const.d.ts +0 -1
  262. package/dist/esm/components/credits/const.js +0 -2
  263. package/dist/esm/components/credits/const.js.map +0 -7
  264. /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
- "scripts": {
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 { locale, appName, brand } = useHeadlessContext()
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 { storeDomain, locale, appName, brand } = useHeadlessContext()
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,8 @@
1
+ // 从 Shopify GraphQL ID 中提取数字 ID
2
+ export function atobID(id: string) {
3
+ if (id && typeof id === 'string' && id.includes('/')) {
4
+ return id.split('/').pop()?.split('?')?.shift()
5
+ } else {
6
+ return id
7
+ }
8
+ }
@@ -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