@anker-in/campaign-ui 0.5.0-beta.2 → 0.5.0-beta.3

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 (222) hide show
  1. package/dist/cjs/components/LiveChatWidget/components/MessageContent/TextBlock.js +1 -1
  2. package/dist/cjs/components/LiveChatWidget/components/MessageContent/TextBlock.js.map +3 -3
  3. package/dist/cjs/components/credits/context/hooks/useSubscribed.js.map +2 -2
  4. package/dist/cjs/components/index.d.ts +2 -3
  5. package/dist/cjs/components/index.js +1 -1
  6. package/dist/cjs/components/index.js.map +2 -2
  7. package/dist/cjs/stories/CartCard.stories.d.ts +33 -0
  8. package/dist/cjs/stories/CartCard.stories.js +21 -0
  9. package/dist/cjs/stories/CartCard.stories.js.map +7 -0
  10. package/dist/esm/components/LiveChatWidget/components/MessageContent/TextBlock.js +1 -1
  11. package/dist/esm/components/LiveChatWidget/components/MessageContent/TextBlock.js.map +3 -3
  12. package/dist/esm/components/credits/context/hooks/useSubscribed.js.map +2 -2
  13. package/dist/esm/components/index.d.ts +2 -3
  14. package/dist/esm/components/index.js +1 -1
  15. package/dist/esm/components/index.js.map +2 -2
  16. package/dist/esm/stories/CartCard.stories.d.ts +33 -0
  17. package/dist/esm/stories/CartCard.stories.js +21 -0
  18. package/dist/esm/stories/CartCard.stories.js.map +7 -0
  19. package/package.json +2 -1
  20. package/src/components/LiveChatWidget/components/MessageContent/TextBlock.tsx +7 -5
  21. package/src/components/credits/context/hooks/useSubscribed.ts +1 -0
  22. package/src/components/index.ts +2 -4
  23. package/src/stories/CartCard.stories.tsx +459 -0
  24. package/tailwind.config.ts +0 -4
  25. package/dist/cjs/components/memberPopup/MemberPopup.d.ts +0 -9
  26. package/dist/cjs/components/memberPopup/MemberPopup.js +0 -2
  27. package/dist/cjs/components/memberPopup/MemberPopup.js.map +0 -7
  28. package/dist/cjs/components/memberPopup/context/provider.d.ts +0 -11
  29. package/dist/cjs/components/memberPopup/context/provider.js +0 -2
  30. package/dist/cjs/components/memberPopup/context/provider.js.map +0 -7
  31. package/dist/cjs/components/memberPopup/context/viewStack.d.ts +0 -12
  32. package/dist/cjs/components/memberPopup/context/viewStack.js +0 -2
  33. package/dist/cjs/components/memberPopup/context/viewStack.js.map +0 -7
  34. package/dist/cjs/components/memberPopup/icons.d.ts +0 -27
  35. package/dist/cjs/components/memberPopup/icons.js +0 -2
  36. package/dist/cjs/components/memberPopup/icons.js.map +0 -7
  37. package/dist/cjs/components/memberPopup/index.d.ts +0 -4
  38. package/dist/cjs/components/memberPopup/index.js +0 -2
  39. package/dist/cjs/components/memberPopup/index.js.map +0 -7
  40. package/dist/cjs/components/memberPopup/panels/Activity/SubscribeModal.d.ts +0 -10
  41. package/dist/cjs/components/memberPopup/panels/Activity/SubscribeModal.js +0 -2
  42. package/dist/cjs/components/memberPopup/panels/Activity/SubscribeModal.js.map +0 -7
  43. package/dist/cjs/components/memberPopup/panels/Activity/hooks/useActivitySubscribe.d.ts +0 -7
  44. package/dist/cjs/components/memberPopup/panels/Activity/hooks/useActivitySubscribe.js +0 -2
  45. package/dist/cjs/components/memberPopup/panels/Activity/hooks/useActivitySubscribe.js.map +0 -7
  46. package/dist/cjs/components/memberPopup/panels/Activity/index.d.ts +0 -7
  47. package/dist/cjs/components/memberPopup/panels/Activity/index.js +0 -2
  48. package/dist/cjs/components/memberPopup/panels/Activity/index.js.map +0 -7
  49. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/RedeemCouponModal.d.ts +0 -19
  50. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/RedeemCouponModal.js +0 -2
  51. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/RedeemCouponModal.js.map +0 -7
  52. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/RedeemCouponPanel.d.ts +0 -20
  53. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/RedeemCouponPanel.js +0 -2
  54. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/RedeemCouponPanel.js.map +0 -7
  55. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemAndBuy.d.ts +0 -12
  56. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemAndBuy.js +0 -2
  57. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemAndBuy.js.map +0 -7
  58. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemCoupon.d.ts +0 -17
  59. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemCoupon.js +0 -2
  60. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemCoupon.js.map +0 -7
  61. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemableList.d.ts +0 -8
  62. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemableList.js +0 -2
  63. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemableList.js.map +0 -7
  64. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/index.d.ts +0 -7
  65. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/index.js +0 -2
  66. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/index.js.map +0 -7
  67. package/dist/cjs/components/memberPopup/panels/EarnCredits/ActivatePanel.d.ts +0 -8
  68. package/dist/cjs/components/memberPopup/panels/EarnCredits/ActivatePanel.js +0 -2
  69. package/dist/cjs/components/memberPopup/panels/EarnCredits/ActivatePanel.js.map +0 -7
  70. package/dist/cjs/components/memberPopup/panels/EarnCredits/CompleteProfileModal.d.ts +0 -10
  71. package/dist/cjs/components/memberPopup/panels/EarnCredits/CompleteProfileModal.js +0 -2
  72. package/dist/cjs/components/memberPopup/panels/EarnCredits/CompleteProfileModal.js.map +0 -7
  73. package/dist/cjs/components/memberPopup/panels/EarnCredits/CompleteProfilePanel.d.ts +0 -9
  74. package/dist/cjs/components/memberPopup/panels/EarnCredits/CompleteProfilePanel.js +0 -2
  75. package/dist/cjs/components/memberPopup/panels/EarnCredits/CompleteProfilePanel.js.map +0 -7
  76. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribeEmailPanel.d.ts +0 -9
  77. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribeEmailPanel.js +0 -2
  78. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribeEmailPanel.js.map +0 -7
  79. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribeModal.d.ts +0 -10
  80. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribeModal.js +0 -2
  81. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribeModal.js.map +0 -7
  82. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribePanel.d.ts +0 -9
  83. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribePanel.js +0 -2
  84. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribePanel.js.map +0 -7
  85. package/dist/cjs/components/memberPopup/panels/EarnCredits/hooks/useActivities.d.ts +0 -18
  86. package/dist/cjs/components/memberPopup/panels/EarnCredits/hooks/useActivities.js +0 -2
  87. package/dist/cjs/components/memberPopup/panels/EarnCredits/hooks/useActivities.js.map +0 -7
  88. package/dist/cjs/components/memberPopup/panels/EarnCredits/hooks/useSubscribed.d.ts +0 -9
  89. package/dist/cjs/components/memberPopup/panels/EarnCredits/hooks/useSubscribed.js +0 -2
  90. package/dist/cjs/components/memberPopup/panels/EarnCredits/hooks/useSubscribed.js.map +0 -7
  91. package/dist/cjs/components/memberPopup/panels/EarnCredits/hooks/useUpdateProfile.d.ts +0 -17
  92. package/dist/cjs/components/memberPopup/panels/EarnCredits/hooks/useUpdateProfile.js +0 -2
  93. package/dist/cjs/components/memberPopup/panels/EarnCredits/hooks/useUpdateProfile.js.map +0 -7
  94. package/dist/cjs/components/memberPopup/panels/EarnCredits/index.d.ts +0 -13
  95. package/dist/cjs/components/memberPopup/panels/EarnCredits/index.js +0 -2
  96. package/dist/cjs/components/memberPopup/panels/EarnCredits/index.js.map +0 -7
  97. package/dist/cjs/components/memberPopup/panels/Referral/hooks/useReferralDashboard.d.ts +0 -13
  98. package/dist/cjs/components/memberPopup/panels/Referral/hooks/useReferralDashboard.js +0 -2
  99. package/dist/cjs/components/memberPopup/panels/Referral/hooks/useReferralDashboard.js.map +0 -7
  100. package/dist/cjs/components/memberPopup/panels/Referral/hooks/useReferralOverview.d.ts +0 -12
  101. package/dist/cjs/components/memberPopup/panels/Referral/hooks/useReferralOverview.js +0 -2
  102. package/dist/cjs/components/memberPopup/panels/Referral/hooks/useReferralOverview.js.map +0 -7
  103. package/dist/cjs/components/memberPopup/panels/Referral/index.d.ts +0 -7
  104. package/dist/cjs/components/memberPopup/panels/Referral/index.js +0 -2
  105. package/dist/cjs/components/memberPopup/panels/Referral/index.js.map +0 -7
  106. package/dist/cjs/components/memberPopup/type.d.ts +0 -216
  107. package/dist/cjs/components/memberPopup/type.js +0 -2
  108. package/dist/cjs/components/memberPopup/type.js.map +0 -7
  109. package/dist/esm/components/memberPopup/MemberPopup.d.ts +0 -9
  110. package/dist/esm/components/memberPopup/MemberPopup.js +0 -2
  111. package/dist/esm/components/memberPopup/MemberPopup.js.map +0 -7
  112. package/dist/esm/components/memberPopup/context/provider.d.ts +0 -11
  113. package/dist/esm/components/memberPopup/context/provider.js +0 -2
  114. package/dist/esm/components/memberPopup/context/provider.js.map +0 -7
  115. package/dist/esm/components/memberPopup/context/viewStack.d.ts +0 -12
  116. package/dist/esm/components/memberPopup/context/viewStack.js +0 -2
  117. package/dist/esm/components/memberPopup/context/viewStack.js.map +0 -7
  118. package/dist/esm/components/memberPopup/icons.d.ts +0 -27
  119. package/dist/esm/components/memberPopup/icons.js +0 -2
  120. package/dist/esm/components/memberPopup/icons.js.map +0 -7
  121. package/dist/esm/components/memberPopup/index.d.ts +0 -4
  122. package/dist/esm/components/memberPopup/index.js +0 -2
  123. package/dist/esm/components/memberPopup/index.js.map +0 -7
  124. package/dist/esm/components/memberPopup/panels/Activity/SubscribeModal.d.ts +0 -10
  125. package/dist/esm/components/memberPopup/panels/Activity/SubscribeModal.js +0 -2
  126. package/dist/esm/components/memberPopup/panels/Activity/SubscribeModal.js.map +0 -7
  127. package/dist/esm/components/memberPopup/panels/Activity/hooks/useActivitySubscribe.d.ts +0 -7
  128. package/dist/esm/components/memberPopup/panels/Activity/hooks/useActivitySubscribe.js +0 -2
  129. package/dist/esm/components/memberPopup/panels/Activity/hooks/useActivitySubscribe.js.map +0 -7
  130. package/dist/esm/components/memberPopup/panels/Activity/index.d.ts +0 -7
  131. package/dist/esm/components/memberPopup/panels/Activity/index.js +0 -2
  132. package/dist/esm/components/memberPopup/panels/Activity/index.js.map +0 -7
  133. package/dist/esm/components/memberPopup/panels/ConsumeCredits/RedeemCouponModal.d.ts +0 -19
  134. package/dist/esm/components/memberPopup/panels/ConsumeCredits/RedeemCouponModal.js +0 -2
  135. package/dist/esm/components/memberPopup/panels/ConsumeCredits/RedeemCouponModal.js.map +0 -7
  136. package/dist/esm/components/memberPopup/panels/ConsumeCredits/RedeemCouponPanel.d.ts +0 -20
  137. package/dist/esm/components/memberPopup/panels/ConsumeCredits/RedeemCouponPanel.js +0 -2
  138. package/dist/esm/components/memberPopup/panels/ConsumeCredits/RedeemCouponPanel.js.map +0 -7
  139. package/dist/esm/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemAndBuy.d.ts +0 -12
  140. package/dist/esm/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemAndBuy.js +0 -2
  141. package/dist/esm/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemAndBuy.js.map +0 -7
  142. package/dist/esm/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemCoupon.d.ts +0 -17
  143. package/dist/esm/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemCoupon.js +0 -2
  144. package/dist/esm/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemCoupon.js.map +0 -7
  145. package/dist/esm/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemableList.d.ts +0 -8
  146. package/dist/esm/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemableList.js +0 -2
  147. package/dist/esm/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemableList.js.map +0 -7
  148. package/dist/esm/components/memberPopup/panels/ConsumeCredits/index.d.ts +0 -7
  149. package/dist/esm/components/memberPopup/panels/ConsumeCredits/index.js +0 -2
  150. package/dist/esm/components/memberPopup/panels/ConsumeCredits/index.js.map +0 -7
  151. package/dist/esm/components/memberPopup/panels/EarnCredits/ActivatePanel.d.ts +0 -8
  152. package/dist/esm/components/memberPopup/panels/EarnCredits/ActivatePanel.js +0 -2
  153. package/dist/esm/components/memberPopup/panels/EarnCredits/ActivatePanel.js.map +0 -7
  154. package/dist/esm/components/memberPopup/panels/EarnCredits/CompleteProfileModal.d.ts +0 -10
  155. package/dist/esm/components/memberPopup/panels/EarnCredits/CompleteProfileModal.js +0 -2
  156. package/dist/esm/components/memberPopup/panels/EarnCredits/CompleteProfileModal.js.map +0 -7
  157. package/dist/esm/components/memberPopup/panels/EarnCredits/CompleteProfilePanel.d.ts +0 -9
  158. package/dist/esm/components/memberPopup/panels/EarnCredits/CompleteProfilePanel.js +0 -2
  159. package/dist/esm/components/memberPopup/panels/EarnCredits/CompleteProfilePanel.js.map +0 -7
  160. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribeEmailPanel.d.ts +0 -9
  161. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribeEmailPanel.js +0 -2
  162. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribeEmailPanel.js.map +0 -7
  163. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribeModal.d.ts +0 -10
  164. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribeModal.js +0 -2
  165. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribeModal.js.map +0 -7
  166. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribePanel.d.ts +0 -9
  167. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribePanel.js +0 -2
  168. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribePanel.js.map +0 -7
  169. package/dist/esm/components/memberPopup/panels/EarnCredits/hooks/useActivities.d.ts +0 -18
  170. package/dist/esm/components/memberPopup/panels/EarnCredits/hooks/useActivities.js +0 -2
  171. package/dist/esm/components/memberPopup/panels/EarnCredits/hooks/useActivities.js.map +0 -7
  172. package/dist/esm/components/memberPopup/panels/EarnCredits/hooks/useSubscribed.d.ts +0 -9
  173. package/dist/esm/components/memberPopup/panels/EarnCredits/hooks/useSubscribed.js +0 -2
  174. package/dist/esm/components/memberPopup/panels/EarnCredits/hooks/useSubscribed.js.map +0 -7
  175. package/dist/esm/components/memberPopup/panels/EarnCredits/hooks/useUpdateProfile.d.ts +0 -17
  176. package/dist/esm/components/memberPopup/panels/EarnCredits/hooks/useUpdateProfile.js +0 -2
  177. package/dist/esm/components/memberPopup/panels/EarnCredits/hooks/useUpdateProfile.js.map +0 -7
  178. package/dist/esm/components/memberPopup/panels/EarnCredits/index.d.ts +0 -13
  179. package/dist/esm/components/memberPopup/panels/EarnCredits/index.js +0 -2
  180. package/dist/esm/components/memberPopup/panels/EarnCredits/index.js.map +0 -7
  181. package/dist/esm/components/memberPopup/panels/Referral/hooks/useReferralDashboard.d.ts +0 -13
  182. package/dist/esm/components/memberPopup/panels/Referral/hooks/useReferralDashboard.js +0 -2
  183. package/dist/esm/components/memberPopup/panels/Referral/hooks/useReferralDashboard.js.map +0 -7
  184. package/dist/esm/components/memberPopup/panels/Referral/hooks/useReferralOverview.d.ts +0 -12
  185. package/dist/esm/components/memberPopup/panels/Referral/hooks/useReferralOverview.js +0 -2
  186. package/dist/esm/components/memberPopup/panels/Referral/hooks/useReferralOverview.js.map +0 -7
  187. package/dist/esm/components/memberPopup/panels/Referral/index.d.ts +0 -7
  188. package/dist/esm/components/memberPopup/panels/Referral/index.js +0 -2
  189. package/dist/esm/components/memberPopup/panels/Referral/index.js.map +0 -7
  190. package/dist/esm/components/memberPopup/type.d.ts +0 -216
  191. package/dist/esm/components/memberPopup/type.js +0 -2
  192. package/dist/esm/components/memberPopup/type.js.map +0 -7
  193. package/dist/index.d.mts +0 -1775
  194. package/dist/index.d.ts +0 -1775
  195. package/dist/index.js +0 -18542
  196. package/dist/index.js.map +0 -1
  197. package/dist/index.mjs +0 -18514
  198. package/dist/index.mjs.map +0 -1
  199. package/src/components/memberPopup/MemberPopup.tsx +0 -325
  200. package/src/components/memberPopup/context/provider.tsx +0 -52
  201. package/src/components/memberPopup/context/viewStack.tsx +0 -23
  202. package/src/components/memberPopup/icons.tsx +0 -147
  203. package/src/components/memberPopup/index.ts +0 -24
  204. package/src/components/memberPopup/panels/ConsumeCredits/RedeemCouponModal.tsx +0 -150
  205. package/src/components/memberPopup/panels/ConsumeCredits/RedeemCouponPanel.tsx +0 -142
  206. package/src/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemAndBuy.ts +0 -33
  207. package/src/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemCoupon.ts +0 -38
  208. package/src/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemableList.ts +0 -55
  209. package/src/components/memberPopup/panels/ConsumeCredits/index.tsx +0 -220
  210. package/src/components/memberPopup/panels/EarnCredits/ActivatePanel.tsx +0 -323
  211. package/src/components/memberPopup/panels/EarnCredits/CompleteProfileModal.tsx +0 -186
  212. package/src/components/memberPopup/panels/EarnCredits/CompleteProfilePanel.tsx +0 -179
  213. package/src/components/memberPopup/panels/EarnCredits/SubscribeEmailPanel.tsx +0 -130
  214. package/src/components/memberPopup/panels/EarnCredits/SubscribeModal.tsx +0 -144
  215. package/src/components/memberPopup/panels/EarnCredits/SubscribePanel.tsx +0 -147
  216. package/src/components/memberPopup/panels/EarnCredits/hooks/useActivities.ts +0 -64
  217. package/src/components/memberPopup/panels/EarnCredits/hooks/useSubscribed.ts +0 -32
  218. package/src/components/memberPopup/panels/EarnCredits/hooks/useUpdateProfile.ts +0 -50
  219. package/src/components/memberPopup/panels/EarnCredits/index.tsx +0 -215
  220. package/src/components/memberPopup/panels/Referral/hooks/useReferralOverview.ts +0 -41
  221. package/src/components/memberPopup/panels/Referral/index.tsx +0 -108
  222. package/src/components/memberPopup/type.ts +0 -230
@@ -1,215 +0,0 @@
1
- import { useMemo } from 'react'
2
- import { classNames as cn, useHeadlessContext } from '@anker-in/lib'
3
- import { useMemberPopupContext } from '../../context/provider'
4
- import { useViewStack } from '../../context/viewStack'
5
- import { useSubscribed } from './hooks/useSubscribed'
6
- import { EarnCreditsTaskType, MemberPopupPanelType, type EarnCreditsCopy } from '../../type'
7
- import { IconBag, IconLock, IconSubscription, IconOrders } from '../../icons'
8
- import { numberFormat } from '../../../credits/context/utils'
9
- import { ROUNDED_BRANDS } from '../../../../constants'
10
-
11
- function TaskIcon({ id, className }: { id: EarnCreditsTaskType; className?: string }) {
12
- switch (id) {
13
- case EarnCreditsTaskType.Activate:
14
- return <IconLock className={className} />
15
- case EarnCreditsTaskType.Subscribe:
16
- return <IconSubscription className={className} />
17
- case EarnCreditsTaskType.Shop:
18
- return <IconBag className={className} />
19
- case EarnCreditsTaskType.CompleteProfile:
20
- return <IconOrders className={className} />
21
- }
22
- }
23
-
24
- type Props = {
25
- copy: EarnCreditsCopy
26
- onClose: () => void
27
- isSubscribeSuccess?: boolean
28
- isActivateSuccess?: boolean
29
- isProfileCompleteSuccess?: boolean
30
- onSubscribeSuccess?: () => void
31
- onActivateSuccess?: () => void
32
- onProfileCompleteSuccess?: () => void
33
- }
34
-
35
- function EarnCredits({
36
- copy,
37
- onClose,
38
- isSubscribeSuccess = false,
39
- isActivateSuccess = false,
40
- isProfileCompleteSuccess = false,
41
- onSubscribeSuccess,
42
- onActivateSuccess,
43
- onProfileCompleteSuccess,
44
- }: Props) {
45
- const { profile, openSignUpPopup, alpcConfig, creditInfo } = useMemberPopupContext()
46
- const { pushView } = useViewStack()
47
- const { locale } = alpcConfig
48
- const { brand } = useHeadlessContext()
49
- const rounded = ROUNDED_BRANDS.includes(brand)
50
-
51
- const isLogin = !!profile
52
-
53
- const isSubscribed = useSubscribed({
54
- userId: profile?.user_id,
55
- brand: alpcConfig.brand,
56
- email: profile?.email,
57
- locale,
58
- apiBaseUrl: alpcConfig.apiBaseUrl,
59
- })
60
-
61
- const profileCompleted = useMemo(() => {
62
- return isProfileCompleteSuccess || (!!(profile?.first_name || profile?.last_name) && !!profile?.phone_number && !!profile?.dob)
63
- }, [profile, isProfileCompleteSuccess])
64
-
65
- const taskStates: Record<EarnCreditsTaskType, { finished: boolean; onClick?: () => void; link?: string }> = useMemo(() => ({
66
- [EarnCreditsTaskType.Activate]: {
67
- finished: !!profile?.activated || isActivateSuccess,
68
- onClick: isLogin
69
- ? () => pushView({
70
- type: MemberPopupPanelType.Activate,
71
- props: { onSuccess: onActivateSuccess },
72
- })
73
- : openSignUpPopup,
74
- },
75
- [EarnCreditsTaskType.CompleteProfile]: {
76
- finished: profileCompleted,
77
- onClick: isLogin
78
- ? () => pushView({
79
- type: MemberPopupPanelType.CompleteProfile,
80
- props: { onSuccess: onProfileCompleteSuccess },
81
- })
82
- : openSignUpPopup,
83
- },
84
- [EarnCreditsTaskType.Subscribe]: {
85
- finished: isSubscribed || isSubscribeSuccess,
86
- onClick: isLogin
87
- ? () => pushView({
88
- type: MemberPopupPanelType.SubscribeEmail,
89
- props: { onSuccess: onSubscribeSuccess },
90
- })
91
- : openSignUpPopup,
92
- },
93
- [EarnCreditsTaskType.Shop]: {
94
- finished: false,
95
- link: copy.goShopLink,
96
- onClick: isLogin ? undefined : openSignUpPopup,
97
- },
98
- }), [profile, isLogin, isActivateSuccess, isProfileCompleteSuccess, profileCompleted, isSubscribed, isSubscribeSuccess, openSignUpPopup, pushView, copy.goShopLink])
99
-
100
- const list = useMemo(() => {
101
- return copy.list.map(item => {
102
- const state = taskStates[item.id]
103
- if (!state) return null
104
- const buttonLabel = state.finished
105
- ? copy.completed
106
- : isLogin
107
- ? getNotFinishedLabel(item.id, copy)
108
- : copy.joinNow
109
- return { ...item, ...state, buttonLabel }
110
- }).filter(Boolean) as (typeof copy.list[number] & {
111
- finished: boolean
112
- onClick?: () => void
113
- link?: string
114
- buttonLabel: string
115
- })[]
116
- }, [copy, taskStates, isLogin])
117
-
118
- return (
119
- <div className="flex flex-col gap-[16px]">
120
- <div className="flex flex-col gap-[16px]">
121
- <div className="flex flex-col gap-[8px]">
122
- {copy.title && <h2 className="text-[24px] font-[700] leading-[1.2] text-[#080a0f]">{copy.title}</h2>}
123
- </div>
124
-
125
- {isLogin && creditInfo && (
126
- <div className={cn('flex items-center gap-[12px] bg-[#f5f6f7] p-[16px]', rounded ? 'rounded-[8px]' : 'rounded-none')}>
127
- <div className="flex flex-1 flex-col gap-[4px]">
128
- <div className="text-[14px] font-[700] text-[#1e2024]">
129
- {copy.balanceLabel ?? 'AnkerCredits Balance'}
130
- </div>
131
- <div className="flex items-end gap-[4px]">
132
- <span className="text-[24px] font-[700] leading-[1.2] text-[#1e2024]">
133
- {numberFormat(creditInfo.available_credit)}
134
- </span>
135
- <span className="text-[14px] font-[700] leading-[1.4] text-[#1e2024]">
136
- {copy.creditUnit ?? 'ankercredits'}
137
- </span>
138
- </div>
139
- </div>
140
- <div className="h-full w-px bg-[#dadce0]" />
141
- <div className="flex flex-1 flex-col gap-[4px]">
142
- <div className="text-[14px] font-[700] text-[#1e2024]">
143
- {copy.comingSoonLabel ?? 'Coming Soon'}
144
- </div>
145
- <div className="flex items-end gap-[4px]">
146
- <span className="text-[24px] font-[700] leading-[1.2] text-[#1e2024]">
147
- {numberFormat(creditInfo.pending_credit ?? 0)}
148
- </span>
149
- <span className="text-[14px] font-[700] leading-[1.4] text-[#1e2024]">
150
- {copy.creditUnit ?? 'ankercredits'}
151
- </span>
152
- </div>
153
- </div>
154
- </div>
155
- )}
156
- </div>
157
-
158
- <div className="flex flex-col gap-[16px]">
159
- {copy.subtitle && (
160
- <p className="text-[16px] font-[700] text-[#1e2024]">{copy.subtitle}</p>
161
- )}
162
-
163
- <div className="flex flex-col">
164
- {list.map((item, idx) => (
165
- <div key={idx} className="relative py-[16px]">
166
- {idx > 0 && <div className="absolute left-0 right-0 top-0 h-px bg-[#dadce0]" />}
167
- <div className={cn('flex items-center gap-[12px]', item.finished && 'opacity-60')}>
168
- <TaskIcon id={item.id} className="size-[24px] shrink-0" />
169
- <div className="flex-1">
170
- <div className="text-[16px] font-[700] text-[#1e2024]">{item.title}</div>
171
- {item.description && (
172
- <div className="mt-[4px] text-[14px] font-[700] text-[#4a4c56]">{item.description}</div>
173
- )}
174
- </div>
175
- {!item.finished && item.link ? (
176
- <a
177
- href={item.link}
178
- target="_blank"
179
- rel="noopener noreferrer"
180
- className={cn('cursor-pointer bg-[#080a0f] min-w-[118px] px-[20px] pb-[10px] pt-[11px] text-[14px] font-[700] leading-[1.2] text-white', rounded ? 'rounded-[4px]' : 'rounded-none')}
181
- >
182
- {item.buttonLabel}
183
- </a>
184
- ) : (
185
- <button
186
- className={cn(
187
- 'cursor-pointer min-w-[118px] px-[20px] pb-[10px] pt-[11px] text-[14px] font-[700] leading-[1.2] text-white',
188
- item.finished ? 'bg-[#767880]' : 'bg-[#080a0f]',
189
- rounded ? 'rounded-[4px]' : 'rounded-none'
190
- )}
191
- disabled={item.finished}
192
- onClick={!item.finished ? item.onClick : undefined}
193
- >
194
- {item.buttonLabel}
195
- </button>
196
- )}
197
- </div>
198
- </div>
199
- ))}
200
- </div>
201
- </div>
202
- </div>
203
- )
204
- }
205
-
206
- function getNotFinishedLabel(id: EarnCreditsTaskType, copy: EarnCreditsCopy): string {
207
- switch (id) {
208
- case EarnCreditsTaskType.Activate: return copy.activate
209
- case EarnCreditsTaskType.CompleteProfile: return copy.completeProfileLabel
210
- case EarnCreditsTaskType.Subscribe: return copy.subscribeLabel
211
- case EarnCreditsTaskType.Shop: return copy.shopNow
212
- }
213
- }
214
-
215
- export default EarnCredits
@@ -1,41 +0,0 @@
1
- import useSWR from 'swr'
2
- import { useMemberPopupContext } from '../../../context/provider'
3
-
4
- export type ReferralRewardOverviewResponse = {
5
- data: {
6
- data: {
7
- available: number
8
- pending: number
9
- }
10
- }
11
- }
12
-
13
- export function useReferralOverview(): {
14
- isLoading: boolean
15
- data?: ReferralRewardOverviewResponse
16
- } {
17
- const { profile, alpcConfig } = useMemberPopupContext()
18
- const isLogin = !!profile
19
-
20
- const swrKey = isLogin ? `/api/multipass/mktsrv/v1/referral/reward/overview/cash` : null
21
-
22
- const swrFetcher = async (url: string) => {
23
- const response = await fetch(url, {
24
- method: 'GET',
25
- headers: {
26
- 'Content-Type': 'application/json',
27
- 'current-language': alpcConfig.locale,
28
- },
29
- })
30
- if (!response.ok) {
31
- throw new Error(`HTTP error! status: ${response.status}`)
32
- }
33
- return response.json()
34
- }
35
-
36
- const { data, isLoading } = useSWR<ReferralRewardOverviewResponse>(swrKey, swrFetcher, {
37
- revalidateOnFocus: false,
38
- })
39
-
40
- return { isLoading, data }
41
- }
@@ -1,108 +0,0 @@
1
- import { Picture } from '@anker-in/headless-ui'
2
- import { classNames as cn, useHeadlessContext } from '@anker-in/lib'
3
- import { useMemberPopupContext } from '../../context/provider'
4
- import { useReferralOverview } from './hooks/useReferralOverview'
5
- import { formatPrice } from '../../../credits/context/utils'
6
-
7
- import type { ReferralCopy } from '../../type'
8
- import { ROUNDED_BRANDS } from '../../../../constants'
9
-
10
- type Props = {
11
- copy: ReferralCopy
12
- onClose: () => void
13
- }
14
-
15
- function Referral({ copy, onClose }: Props) {
16
- const { profile, alpcConfig } = useMemberPopupContext()
17
- const isLogin = !!profile
18
- const { brand, currencyCode = 'USD' as string } = useHeadlessContext()
19
- const rounded = ROUNDED_BRANDS.includes(brand)
20
-
21
- const { data } = useReferralOverview()
22
-
23
- const cashAvailable = data?.data?.data?.available ?? 0
24
- const cashPending = data?.data?.data?.pending ?? 0
25
-
26
- console.log('cashAvailable', cashAvailable)
27
- console.log('cashPending', cashPending)
28
- console.log('data', data)
29
- console.log('data.data', data?.data)
30
-
31
- return (
32
- <div className="flex flex-col gap-[12px]">
33
- {copy.title && <h2 className="text-[24px] font-[700] leading-[1.2] text-[#080a0f]">{copy.title}</h2>}
34
-
35
- {isLogin && (
36
- <div
37
- className={cn(
38
- 'flex items-center gap-[12px] bg-[#f5f6f7] p-[16px]',
39
- rounded ? 'rounded-[8px]' : 'rounded-none'
40
- )}
41
- >
42
- <div className="flex flex-1 flex-col gap-[4px]">
43
- <div className="text-[14px] font-[700] text-[#1e2024]">{copy.cashAvailableLabel}</div>
44
- <span className="text-[24px] font-[700] leading-[1.2] text-[#1e2024]">
45
- {formatPrice({ amount: cashAvailable, currencyCode, locale: alpcConfig.locale })}
46
- </span>
47
- </div>
48
- <div className="h-full w-px self-stretch bg-[#dadce0]" />
49
- <div className="flex flex-1 flex-col gap-[4px]">
50
- <div className="text-[14px] font-[700] text-[#1e2024]">{copy.cashPendingLabel}</div>
51
- <span className="text-[24px] font-[700] leading-[1.2] text-[#1e2024]">
52
- {formatPrice({ amount: cashPending, currencyCode, locale: alpcConfig.locale })}
53
- </span>
54
- </div>
55
- </div>
56
- )}
57
-
58
- {(copy.howToTitle || copy.howToDescription) && (
59
- <div className="flex flex-col gap-[8px]">
60
- {copy.howToTitle && (
61
- <h3 className="text-[20px] font-[700] leading-[1.2] text-[#080a0f]">{copy.howToTitle}</h3>
62
- )}
63
- {copy.howToDescription && <p className="text-[14px] leading-[1.5] text-[#1e2024]">{copy.howToDescription}</p>}
64
- {copy.learnMoreLabel && copy.learnMoreUrl && (
65
- <a
66
- href={copy.learnMoreUrl}
67
- target="_blank"
68
- rel="noopener noreferrer"
69
- className="flex items-center gap-[4px] text-[14px] font-[700] text-[#080a0f] underline"
70
- >
71
- {copy.learnMoreLabel}
72
- <svg width="16" height="16" viewBox="0 0 16 16" fill="none">
73
- <path
74
- d="M5.52827 3.52876C5.78862 3.26841 6.21063 3.26841 6.47098 3.52876L10.471 7.52876C10.7313 7.78911 10.7313 8.21112 10.471 8.47147L6.47098 12.4715C6.21063 12.7318 5.78862 12.7318 5.52827 12.4715C5.26792 12.2111 5.26792 11.7891 5.52827 11.5288L9.05692 8.00011L5.52827 4.47147C5.26792 4.21112 5.26792 3.78911 5.52827 3.52876Z"
75
- fill="#080A0F"
76
- />
77
- </svg>
78
- </a>
79
- )}
80
- </div>
81
- )}
82
-
83
- {copy.image?.url && (
84
- <Picture
85
- source={copy.image.url}
86
- alt={copy.image.alt ?? ''}
87
- className={cn('h-[100px] w-full object-cover', rounded ? 'rounded-[8px]' : 'rounded-none')}
88
- />
89
- )}
90
-
91
- {copy.ctaButton && (
92
- <a
93
- href={copy.ctaUrl ?? '#'}
94
- target="_blank"
95
- rel="noopener noreferrer"
96
- className={cn(
97
- 'block w-full cursor-pointer bg-[#080a0f] py-[14px] text-center text-[14px] font-[700] text-white',
98
- rounded ? 'rounded-[4px]' : 'rounded-none'
99
- )}
100
- >
101
- {copy.ctaButton}
102
- </a>
103
- )}
104
- </div>
105
- )
106
- }
107
-
108
- export default Referral
@@ -1,230 +0,0 @@
1
- import type { AuthCodeActivateCopy } from '../registration/authCodeActivate/type'
2
- import type { CreditInfoResponse } from '../credits/context/response'
3
- import type { DTC_TASK_TYPE } from '../credits/context/const'
4
-
5
- export type { AuthCodeActivateCopy }
6
-
7
- // ─── 面板类型枚举 ─────────────────────────────────────
8
- export enum MemberPopupPanelType {
9
- EarnCredits = 'EARN_CREDITS',
10
- ConsumeCredits = 'CONSUME_CREDITS',
11
- Referral = 'REFERRAL',
12
- CompleteProfile = 'COMPLETE_PROFILE',
13
- Subscribe = 'SUBSCRIBE',
14
- SubscribeEmail = 'SUBSCRIBE_EMAIL',
15
- RedeemCoupon = 'REDEEM_COUPON',
16
- Activate = 'ACTIVATE',
17
- }
18
-
19
- // ─── item action 类型枚举 ─────────────────────────────
20
- export enum MemberPopupActionType {
21
- ExternalLink = 'EXTERNAL_LINK',
22
- OpenEarnCredits = 'OPEN_EARN_CREDITS',
23
- OpenConsumeCredits = 'OPEN_CONSUME_CREDITS',
24
- OpenReferral = 'OPEN_REFERRAL',
25
- OpenSubscribe = 'OPEN_SUBSCRIBE',
26
- }
27
-
28
- // ─── EarnCredits 任务类型枚举 ─────────────────────────
29
- export enum EarnCreditsTaskType {
30
- Activate = 'activate',
31
- CompleteProfile = 'completeProfile',
32
- Subscribe = 'subscribe',
33
- Shop = 'shop',
34
- }
35
-
36
- // ─── ConsumeCredits item 类型枚举 ─────────────────────
37
- export enum ConsumeCreditsItemType {
38
- Coupon = 'COUPON',
39
- RedeemAndBuy = 'REDEEM_AND_BUY',
40
- }
41
-
42
- // ─── 通用 link(统一一种类型) ─────────────────────────
43
- export type MemberPopupLink = {
44
- type: MemberPopupActionType
45
- label: string
46
- url?: string // 仅 ExternalLink 时使用
47
- }
48
-
49
- // ─── list item ────────────────────────────────────────
50
- export type MemberPopupItem = {
51
- title: string
52
- description?: string
53
- links: MemberPopupLink[]
54
- }
55
-
56
- // ── 主组件 Copy ──────────────────────────────────────
57
- export enum MemberPopupPageScope {
58
- /** 全局展示 */
59
- Global = 'GLOBAL',
60
- /** 仅在特定页面展示 */
61
- Include = 'INCLUDE',
62
- /** 在特定页面不展示 */
63
- Exclude = 'EXCLUDE',
64
- }
65
-
66
- export type MemberPopupPageConfig = {
67
- scope: MemberPopupPageScope
68
- /** 页面路径列表,支持精确匹配和前缀匹配(如 "/products" 会匹配 "/products/xxx") */
69
- pages: string[]
70
- }
71
-
72
- export type MemberPopupCopy = {
73
- triggerImg: { url: string; alt?: string }
74
- title?: string
75
- subtitle?: string
76
- list: MemberPopupItem[]
77
- footer?: {
78
- loginHint: string
79
- loginLabel: string
80
- joinLabel: string
81
- shopLabel: string
82
- shopUrl?: string
83
- }
84
- subscribe?: SubscribeModalCopy
85
- earnCredits?: EarnCreditsCopy
86
- consumeCredits?: ConsumeCreditsopy
87
- referral?: ReferralCopy
88
- /** 页面覆盖范围配置,默认全局展示 */
89
- pageConfig?: MemberPopupPageConfig
90
- }
91
-
92
- // ─── EarnCredits Copy ────────────────────────────────
93
- export type EarnCreditsCopy = {
94
- title?: string
95
- subtitle?: string
96
- balanceLabel?: string
97
- comingSoonLabel?: string
98
- creditUnit?: string
99
- joinNow: string
100
- completed: string
101
- activate: string
102
- completeProfileLabel: string
103
- subscribeLabel: string
104
- shopNow: string
105
- goShopLink?: string
106
- list: {
107
- id: EarnCreditsTaskType
108
- title: string
109
- description: string
110
- credits?: string
111
- }[]
112
- // 子弹窗文案
113
- authCodeActivate: AuthCodeActivateCopy
114
- completeProfile: CompleteProfileCopy
115
- subscribe: SubscribeModalCopy
116
- }
117
-
118
- export type CompleteProfileCopy = {
119
- title: string
120
- subtitle?: string
121
- firstName: string
122
- lastName: string
123
- email: string
124
- phone: string
125
- birthday: string
126
- country: string
127
- save: string
128
- cancel: string
129
- edit: string
130
- required: string
131
- }
132
-
133
- export type SubscribeModalCopy = {
134
- title: string
135
- desc?: string
136
- placeholder: string
137
- policy?: string
138
- successTips?: string
139
- dealsType?: string
140
- buttonLabel?: string
141
- single_brand_subscribe?: boolean
142
- genre?: string
143
- sub_brand_type?: string
144
- }
145
-
146
- // ─── ConsumeCredits Copy ────────────────────────────
147
- export type ConsumeCreditsopy = {
148
- title?: string
149
- subtitle?: string
150
- soldOut: string
151
- unlockRewards: string
152
- btnRedeem: string
153
- insufficientCredits?: string
154
- pointUnit?: string
155
- off?: string
156
- imageMapping?: {
157
- [key in ConsumeCreditsItemType]?: { url: string }
158
- }
159
- list: ConsumeCreditsItem[]
160
- redeemModal: RedeemCouponModalCopy
161
- creditsPage?: { label: string; url: string }
162
- }
163
-
164
- export type ConsumeCreditsItem = {
165
- redeemId: string | number
166
- title: string
167
- description?: string
168
- image: { url: string; alt?: string }
169
- type: ConsumeCreditsItemType
170
- product?: { handle: string; sku: string }
171
- price?: number
172
- value?: string
173
- rules?: string[]
174
- }
175
-
176
- export type RedeemCouponModalCopy = {
177
- confirmTitle: string
178
- confirmButton: string
179
- commonError: string
180
- redeemLimitError: string
181
- inventoryNotEnough: string
182
- creditsNotEnough: string
183
- crossSiteError: string
184
- successTitle: string
185
- successDesc: string
186
- successButton: string
187
- successButtonUrl?: string
188
- }
189
-
190
- // ─── Referral Copy ───────────────────────────────────
191
- export type ReferralCopy = {
192
- title?: string
193
- description?: string
194
- cashAvailableLabel: string
195
- cashPendingLabel: string
196
- creditUnit?: string
197
- referralLinksLabel?: string
198
- referralLinkBaseUrl?: string
199
- copyLabel?: string
200
- copiedLabel?: string
201
- howToTitle?: string
202
- howToDescription?: string
203
- learnMoreLabel?: string
204
- learnMoreUrl?: string
205
- image?: { url: string; alt?: string }
206
- ctaButton: string
207
- ctaUrl?: string
208
- loginTitle?: string
209
- loginDescription?: string
210
- loginCtaLabel?: string
211
- }
212
-
213
- // ─── Provider Context 类型 ───────────────────────────
214
- export type AlpcConfig = {
215
- brand: string
216
- locale: string
217
- appName: string
218
- apiBaseUrl?: string
219
- }
220
-
221
- export type MemberPopupContextValue = {
222
- profile: any
223
- isLoadingProfile: boolean
224
- creditInfo?: CreditInfoResponse
225
- fetchCreditInfo: (userId: string) => void
226
- openSignUpPopup: () => void
227
- openSignInPopup: () => void
228
- taskIdToTypeMapping?: Record<string, DTC_TASK_TYPE>
229
- alpcConfig: AlpcConfig
230
- }