@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
@@ -0,0 +1,123 @@
1
+ import { useEffect, useState, useRef, useCallback } from 'react'
2
+ import { classNames as cn } from '@anker-in/lib'
3
+ import { Container } from '@anker-in/headless-ui'
4
+ import { CreditsNavigationCopy } from './type'
5
+
6
+ export const CreditsNavigation = ({ copy }: { copy: CreditsNavigationCopy }) => {
7
+ const [activeId, setActiveId] = useState<string>('')
8
+ const observerRef = useRef<IntersectionObserver | null>(null)
9
+
10
+ // 平滑滚动到目标模块
11
+ const scrollToSection = (targetId: string) => {
12
+ const element = document.getElementById(targetId)
13
+ if (element) {
14
+ const navHeight = 56 // 导航栏高度
15
+ const elementPosition = element.getBoundingClientRect().top + window.pageYOffset
16
+ const offsetPosition = elementPosition - navHeight
17
+
18
+ window.scrollTo({
19
+ top: offsetPosition,
20
+ behavior: 'smooth',
21
+ })
22
+ }
23
+ }
24
+
25
+ // 使用 Intersection Observer 监听模块可见性
26
+ const setupObserver = useCallback(() => {
27
+ // 清理之前的 observer
28
+ if (observerRef.current) {
29
+ observerRef.current.disconnect()
30
+ }
31
+
32
+ // 计算每个元素在视口中的可见面积
33
+ const visibilityMap = new Map<string, number>()
34
+
35
+ const observerCallback = (entries: IntersectionObserverEntry[]) => {
36
+ entries.forEach(entry => {
37
+ const id = entry.target.id
38
+ if (!id) return
39
+
40
+ // 计算可见面积
41
+ const visibleHeight = entry.intersectionRect.height
42
+ const visibleWidth = entry.intersectionRect.width
43
+ const visibleArea = visibleHeight * visibleWidth
44
+
45
+ visibilityMap.set(id, entry.isIntersecting ? visibleArea : 0)
46
+ })
47
+
48
+ // 找出可见面积最大的元素
49
+ let maxArea = 0
50
+ let maxId = ''
51
+
52
+ visibilityMap.forEach((area, id) => {
53
+ if (area > maxArea) {
54
+ maxArea = area
55
+ maxId = id
56
+ }
57
+ })
58
+
59
+ if (maxId && maxId !== activeId) {
60
+ setActiveId(maxId)
61
+ }
62
+ }
63
+
64
+ // 创建新的 observer
65
+ observerRef.current = new IntersectionObserver(observerCallback, {
66
+ threshold: [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1],
67
+ rootMargin: '-56px 0px 0px 0px', // 考虑导航栏高度
68
+ })
69
+
70
+ // 观察所有目标元素
71
+ copy.items.forEach(item => {
72
+ const element = document.getElementById(item.targetId)
73
+ if (element && observerRef.current) {
74
+ observerRef.current.observe(element)
75
+ }
76
+ })
77
+ }, [copy.items, activeId])
78
+
79
+ useEffect(() => {
80
+ setupObserver()
81
+
82
+ return () => {
83
+ if (observerRef.current) {
84
+ observerRef.current.disconnect()
85
+ }
86
+ }
87
+ }, [setupObserver])
88
+
89
+ return (
90
+ <nav className={cn('sticky top-0 z-50 bg-white')}>
91
+ <Container asChild>
92
+ <div
93
+ className={cn(
94
+ 'md:overflow-x-auto md:overflow-y-hidden md:-mx-[16px] md:px-[16px]',
95
+ 'md:scrollbar-hide md:[&::-webkit-scrollbar]:hidden md:[-ms-overflow-style:none] md:[scrollbar-width:none]'
96
+ )}
97
+ >
98
+ <ul className={cn('flex items-end gap-[24px] pt-[16px] md:gap-[16px] md:pr-[16px]')}>
99
+ {copy.items.map((item, index) => {
100
+ const isActive = activeId === item.targetId
101
+ return (
102
+ <li key={index} className={cn('md:flex-shrink-0')}>
103
+ <button
104
+ onClick={() => scrollToSection(item.targetId)}
105
+ className={cn(
106
+ 'pb-[16px] text-[14px] font-bold tracking-[-0.28px] leading-[1.4]',
107
+ 'transition-all duration-200 relative border-b-4 whitespace-nowrap',
108
+ isActive
109
+ ? 'text-[#080a0f] border-brand-1'
110
+ : 'text-[#4a4c56] hover:text-[#080a0f] border-transparent'
111
+ )}
112
+ >
113
+ {item.label}
114
+ </button>
115
+ </li>
116
+ )
117
+ })}
118
+ </ul>
119
+ </div>
120
+ </Container>
121
+ </nav>
122
+ )
123
+ }
@@ -0,0 +1,2 @@
1
+ export { CreditsNavigation } from './CreditsNavigation'
2
+ export type { CreditsNavigationCopy, NavigationItem } from './type'
@@ -0,0 +1,10 @@
1
+ // 导航项配置
2
+ export type NavigationItem = {
3
+ label: string
4
+ targetId: string // 对应组件的DOM id
5
+ }
6
+
7
+ // 导航组件配置
8
+ export type CreditsNavigationCopy = {
9
+ items: NavigationItem[]
10
+ }
@@ -1,4 +1,4 @@
1
- import { Container, Heading, Tabs, TabsList, TabsTrigger } from '@anker-in/headless-ui'
1
+ import { Container, Heading, Tabs, TabsList, TabsTrigger, Text } from '@anker-in/headless-ui'
2
2
  import classNames from 'classnames'
3
3
  import { useCallback, useMemo, useState } from 'react'
4
4
 
@@ -13,19 +13,22 @@ import { RedeemableItem } from './RedeemableItem'
13
13
  import RulesModal from '../modal/rulesModal'
14
14
  import { CreditsRedeemListCopy } from './type'
15
15
  import { useRegistration } from '../../../components/registration'
16
+ import { numberFormat } from '../context/utils'
16
17
 
17
- export const CreditsRedeemList = ({ copy }: { copy: CreditsRedeemListCopy }) => {
18
+ export const CreditsRedeemList = ({ copy, id }: { copy: CreditsRedeemListCopy; id?: string }) => {
18
19
  const {
19
20
  profile,
20
21
  openSignUpPopup,
21
22
  gtm: { pageGroup },
22
23
  pageCommon,
24
+ creditInfo,
23
25
  } = useCreditsContext()
24
26
  const { authCodeActivate } = useRegistration()
25
27
  const { brand } = useHeadlessContext()
26
28
  const rounded = ROUNDED_BRANDS.includes(brand)
27
29
 
28
30
  const isLogin = Object.keys(profile || {}).length > 0
31
+ const isActivated = profile?.activated
29
32
 
30
33
  const [activeTab, setActiveTab] = useState<string>(copy.list[0].label)
31
34
 
@@ -62,6 +65,8 @@ export const CreditsRedeemList = ({ copy }: { copy: CreditsRedeemListCopy }) =>
62
65
  const alpcItem = alpcList.find(alpcItem => alpcItem.id === item.id)
63
66
  const product = products?.find(product => product.handle === alpcItem?.handle)
64
67
  const variant = product?.variants.find(variant => variant.sku === alpcItem?.sku)
68
+ // 过滤掉库存不足的商品
69
+ if (alpcItem?.isLimited && (!alpcItem?.remainingInventory || alpcItem.remainingInventory <= 0)) return null
65
70
  if (alpcItem?.consumeType === AlpcConsumeType.Product && (!product || !variant)) return null
66
71
  return {
67
72
  alpc: alpcList.find(alpcItem => alpcItem.id === item.id),
@@ -83,9 +88,18 @@ export const CreditsRedeemList = ({ copy }: { copy: CreditsRedeemListCopy }) =>
83
88
  )
84
89
 
85
90
  return (
86
- <Container className={classNames('relative bg-[#F5F5F7]')}>
91
+ <Container id={id} className={classNames('relative bg-[#F5F5F7]')}>
87
92
  <Heading as="h2" size="4" html={copy.title} />
88
93
 
94
+ {/* 可用积分展示 */}
95
+ {isLogin && isActivated && (
96
+ <Text
97
+ html={copy.availableCredits?.replace('$credits', numberFormat(creditInfo?.available_credit || 0).toString())}
98
+ className="mt-[12px] text-[20px] l-xxl:text-[18px] l:text-[16px] font-bold text-[#4A4C56]"
99
+ as="p"
100
+ />
101
+ )}
102
+
89
103
  <Tabs
90
104
  shape={rounded ? 'rounded' : 'square'}
91
105
  align="left"
@@ -6,7 +6,7 @@ type ErrorProps = {
6
6
 
7
7
  export const Error = ({ errorInfo }: ErrorProps) => {
8
8
  return (
9
- <div className="mx-auto max-w-[404px] text-[16px] text-black/40">
9
+ <div className="mx-auto max-w-[404px] text-[16px] text-black/40 py-[56px]">
10
10
  <Picture className="mx-auto mb-[12px] h-[140px] w-[220px]" source={errorInfo.imageUrl} />
11
11
  <Text as="div" className="mt-[16px] text-center" html={errorInfo.message} />
12
12
  </div>
@@ -1,5 +1,6 @@
1
1
  export type CreditsRedeemListCopy = {
2
2
  title: string
3
+ availableCredits: string
3
4
  unlockRewards: string
4
5
  btnRedeem: string
5
6
  list: {
@@ -11,7 +11,7 @@ import { useRegistration } from '../../registration'
11
11
  import { CreditsUploadReceiptModal } from '../modal/creditsUploadReceiptModal'
12
12
  import { CreditsSubscribeModal } from '../modal/subscribeModal'
13
13
 
14
- export const CreditsWaysToGetCredits = ({ copy, classNames }: CreditsWaysToGetCreditsProps) => {
14
+ export const CreditsWaysToGetCredits = ({ copy, classNames, id }: CreditsWaysToGetCreditsProps & { id?: string }) => {
15
15
  const [showMore, setShowMore] = useState(false)
16
16
  const { profile } = useCreditsContext()
17
17
  const { authCodeActivate } = useRegistration()
@@ -91,7 +91,7 @@ export const CreditsWaysToGetCredits = ({ copy, classNames }: CreditsWaysToGetCr
91
91
  }, [actions, copy.list, isLogin])
92
92
 
93
93
  return (
94
- <Container id="ways-to-get-credits" className=" bg-[#F5F5F7] [&>div]:l:!px-0">
94
+ <Container id={id} className=" bg-[#F5F5F7] [&>div]:l:!px-0">
95
95
  <div
96
96
  className={cn(
97
97
  'rounded-[16px] bg-[#1D1D1F] py-[64px] px-[140px] text-white md:px-[16px] l:rounded-none md-l:px-[32px] l-xl:px-[77px]',
@@ -4,23 +4,30 @@ import { RegistrationProvider } from '../components/registration/context/provide
4
4
  import { DTC_TASK_TYPE } from '../components/credits/context/const'
5
5
  import { CreditsProvider } from '../components/credits/context/provider'
6
6
  import { CreditsPageCommon } from '../components/credits/type'
7
+ import { FunctionMemberPriceConfig } from '../components/credits/context/memberPriceTypes'
7
8
 
8
9
  import { CreditsBanner, CreditsBannerCopy } from '../components/credits/creditsBanner'
9
10
  import { CreditsInfoCard, CreditsInfoCardCopy } from '../components/credits/creditsInfoCard'
10
11
  import { CreditsBenefits, CreditsBenefitsCopy } from '../components/credits/creditsBenefits'
11
12
  import { CreditsWaysToGetCredits, CreditsWaysToGetCreditsCopy } from '../components/credits/creditsWaysToGetCredits'
13
+ import { CreditsAnkersolixTask, CreditsAnkersolixTaskCopy } from '../components/credits/creditsAnkersolixTask'
12
14
  import { CreditsRedeemList, CreditsRedeemListCopy } from '../components/credits/creditsRedeemList'
13
15
  import { CreditsCash, CreditsCashCopy } from '../components/credits/creditsCash'
16
+ import { CreditsMemberPrice, CreditsMemberPriceCopy } from '../components/credits/creditsMemberPrice'
14
17
  import { CreditsFaq, CreditsFaqCopy } from '../components/credits/creditsFaq'
18
+ import { CreditsNavigation, CreditsNavigationCopy } from '../components/credits/creditsNavigation'
15
19
  import { AuthCodeActivateCopy } from 'src/components/registration/authCodeActivate/type'
16
20
 
17
21
  export enum ComponentKey {
22
+ Navigation = 'creditsNavigation',
18
23
  Banner = 'creditsBanner',
19
24
  InfoCard = 'creditsInfoCard',
20
25
  Benefits = 'creditsBenefits',
21
26
  WaysToGetCredits = 'creditsWaysToGetCredits',
27
+ AnkersolixTask = 'creditsAnkersolixTask',
22
28
  RedeemList = 'creditsRedeemList',
23
29
  SpendCreditsLikeCash = 'creditsCash',
30
+ MemberPrice = 'creditsMemberPrice',
24
31
  Faqs = 'creditsFaq',
25
32
  }
26
33
  export type CreditsTemplateProps = {
@@ -30,17 +37,24 @@ export type CreditsTemplateProps = {
30
37
  authCodeActivate: AuthCodeActivateCopy
31
38
  }
32
39
  taskIdToTypeMapping: Record<string, DTC_TASK_TYPE>
40
+ memberPriceDiscount?: FunctionMemberPriceConfig[]
41
+ }
42
+ creditsConfig?: {
43
+ alpcBrand?: string
33
44
  }
34
45
  pageConfig: {
35
46
  order: ComponentKey[]
36
47
  common: CreditsPageCommon
37
48
  components: {
49
+ [ComponentKey.Navigation]?: CreditsNavigationCopy
38
50
  [ComponentKey.Banner]?: CreditsBannerCopy
39
51
  [ComponentKey.InfoCard]?: CreditsInfoCardCopy
40
52
  [ComponentKey.Benefits]?: CreditsBenefitsCopy
41
53
  [ComponentKey.WaysToGetCredits]?: CreditsWaysToGetCreditsCopy
54
+ [ComponentKey.AnkersolixTask]?: CreditsAnkersolixTaskCopy
42
55
  [ComponentKey.RedeemList]?: CreditsRedeemListCopy
43
56
  [ComponentKey.SpendCreditsLikeCash]?: CreditsCashCopy
57
+ [ComponentKey.MemberPrice]?: CreditsMemberPriceCopy
44
58
  [ComponentKey.Faqs]?: CreditsFaqCopy
45
59
  }
46
60
  }
@@ -65,11 +79,14 @@ export type CreditsTemplateProps = {
65
79
  export const CreditsTemplate = ({
66
80
  headlessConfig,
67
81
  siteConfig,
82
+ creditsConfig,
68
83
  userContext,
69
84
  pageConfig,
70
85
  registrationContext,
71
86
  gtm,
72
87
  }: CreditsTemplateProps) => {
88
+
89
+ console.log('siteConfig', siteConfig)
73
90
  return (
74
91
  <HeadlessProvider headlessConfig={headlessConfig}>
75
92
  <RegistrationProvider copy={siteConfig.registrationsSettings} email={userContext?.profile?.email}>
@@ -86,21 +103,30 @@ export const CreditsTemplate = ({
86
103
  customerLoading={userContext?.customerLoading}
87
104
  gtm={gtm}
88
105
  pageCommon={pageConfig.common}
106
+ memberPriceDiscount={siteConfig.memberPriceDiscount}
107
+ alpcBrand={creditsConfig?.alpcBrand}
89
108
  >
109
+ {/* 导航组件 - 固定位置,不参与 order 排序 */}
110
+ {pageConfig.components[ComponentKey.Navigation] && (
111
+ <CreditsNavigation copy={pageConfig.components[ComponentKey.Navigation]} />
112
+ )}
90
113
  <div className={classNames('bg-[#f5f5f7] leading-[1.2]')}>
91
114
  {pageConfig.order.map(key => {
115
+ // 跳过导航组件,因为它已经固定渲染在上方
116
+ if (key === ComponentKey.Navigation) return null
92
117
  const componentCopy = pageConfig.components?.[key]
93
118
  if (!componentCopy) return null
94
119
  return (
95
120
  <>
96
- {key === ComponentKey.Banner && <CreditsBanner copy={componentCopy as CreditsBannerCopy} />}
121
+ {key === ComponentKey.Banner && <CreditsBanner copy={componentCopy as CreditsBannerCopy} id={key} />}
97
122
  {key === ComponentKey.InfoCard && userContext?.profile && (
98
- <CreditsInfoCard copy={componentCopy as CreditsInfoCardCopy} />
123
+ <CreditsInfoCard copy={componentCopy as CreditsInfoCardCopy} id={key} />
99
124
  )}
100
- {key === ComponentKey.Benefits && <CreditsBenefits copy={componentCopy as CreditsBenefitsCopy} />}
125
+ {key === ComponentKey.Benefits && <CreditsBenefits copy={componentCopy as CreditsBenefitsCopy} id={key} />}
101
126
  {key === ComponentKey.WaysToGetCredits && (
102
127
  <CreditsWaysToGetCredits
103
128
  copy={componentCopy as CreditsWaysToGetCreditsCopy}
129
+ id={key}
104
130
  classNames={
105
131
  headlessConfig.brand === 'anker'
106
132
  ? {
@@ -115,11 +141,16 @@ export const CreditsTemplate = ({
115
141
  }
116
142
  />
117
143
  )}
118
- {key === ComponentKey.RedeemList && (
119
- <CreditsRedeemList copy={componentCopy as CreditsRedeemListCopy} />
144
+ {key === ComponentKey.AnkersolixTask && (
145
+ <CreditsAnkersolixTask
146
+ copy={componentCopy as CreditsAnkersolixTaskCopy}
147
+ id={key}
148
+ />
120
149
  )}
121
- {key === ComponentKey.SpendCreditsLikeCash && <CreditsCash copy={componentCopy as CreditsCashCopy} />}
122
- {key === ComponentKey.Faqs && <CreditsFaq copy={componentCopy as CreditsFaqCopy} />}
150
+ {key === ComponentKey.RedeemList && <CreditsRedeemList copy={componentCopy as CreditsRedeemListCopy} id={key} />}
151
+ {key === ComponentKey.SpendCreditsLikeCash && <CreditsCash copy={componentCopy as CreditsCashCopy} id={key} />}
152
+ {key === ComponentKey.MemberPrice && <CreditsMemberPrice copy={componentCopy as CreditsMemberPriceCopy} id={key} />}
153
+ {key === ComponentKey.Faqs && <CreditsFaq copy={componentCopy as CreditsFaqCopy} id={key} />}
123
154
  {key !== ComponentKey.Banner && (
124
155
  <div className="laptop:h-16 desktop:h-[96px] lg-desktop:h-[128px] tablet:h-16 h-16" />
125
156
  )}
@@ -1 +1 @@
1
- export * from './credits'
1
+ export * from './Credits'
@@ -1 +0,0 @@
1
- export declare const roundedBrands: string[];
@@ -1,2 +0,0 @@
1
- "use strict";var r=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var t=Object.prototype.hasOwnProperty;var a=(d,o)=>{for(var n in o)r(d,n,{get:o[n],enumerable:!0})},f=(d,o,n,s)=>{if(o&&typeof o=="object"||typeof o=="function")for(let e of c(o))!t.call(d,e)&&e!==n&&r(d,e,{get:()=>o[e],enumerable:!(s=u(o,e))||s.enumerable});return d};var p=d=>f(r({},"__esModule",{value:!0}),d);var y={};a(y,{roundedBrands:()=>x});module.exports=p(y);const x=["eufy","soundcore"];
2
- //# sourceMappingURL=const.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/components/credits/const.ts"],
4
- "sourcesContent": ["export const roundedBrands = ['eufy', 'soundcore']\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mBAAAE,IAAA,eAAAC,EAAAH,GAAO,MAAME,EAAgB,CAAC,OAAQ,WAAW",
6
- "names": ["const_exports", "__export", "roundedBrands", "__toCommonJS"]
7
- }
@@ -1 +0,0 @@
1
- export declare const roundedBrands: string[];
@@ -1,2 +0,0 @@
1
- const o=["eufy","soundcore"];export{o as roundedBrands};
2
- //# sourceMappingURL=const.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/components/credits/const.ts"],
4
- "sourcesContent": ["export const roundedBrands = ['eufy', 'soundcore']\n"],
5
- "mappings": "AAAO,MAAMA,EAAgB,CAAC,OAAQ,WAAW",
6
- "names": ["roundedBrands"]
7
- }