@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,323 +0,0 @@
1
- import { useState, useCallback, useRef, useEffect } from 'react'
2
- import { Button, Text } from '@anker-in/headless-ui'
3
- import {
4
- useSendEmailValidation,
5
- gaTrack,
6
- classNames as cn,
7
- useHeadlessContext,
8
- useEmailValidation,
9
- useCountDown,
10
- } from '@anker-in/lib'
11
- import { Message } from '../../../registration/authCodeActivate/Message'
12
- import type { AuthCodeActivateCopy } from '../../type'
13
- import { useRegistration } from '../../../registration'
14
- import { ROUNDED_BRANDS } from '../../../../constants'
15
-
16
- type Props = {
17
- copy: AuthCodeActivateCopy
18
- onClose: () => void
19
- onSuccess?: () => void
20
- }
21
-
22
- export default function ActivatePanel({ copy, onClose, onSuccess }: Props) {
23
- const { locale, brand } = useHeadlessContext()
24
- const { email } = useRegistration()
25
- const rounded = ROUNDED_BRANDS.includes(brand)
26
-
27
- const {
28
- isMutating: isSendingEmail,
29
- trigger: triggerSendValidationEmail,
30
- data: sendEmailData,
31
- } = useSendEmailValidation()
32
-
33
- const { isMutating: emailValidationLoading, trigger: triggerEmailValidation } = useEmailValidation()
34
-
35
- const [messageText, setMessageText] = useState('')
36
- const [messageStatus, setMessageStatus] = useState('')
37
- const { startCountDown: isStartCountDown, startAction: startCountDown, countDown } = useCountDown(60)
38
-
39
- const [error, setError] = useState('')
40
- const [focusIndex, setFocusIndex] = useState(0)
41
- const [codeArray, setCodeArray] = useState(new Array(6).fill(''))
42
-
43
- const inputRefs = useRef<HTMLInputElement[]>([])
44
- const code = codeArray.join('')
45
-
46
- useEffect(() => {
47
- if (inputRefs.current[focusIndex]) {
48
- inputRefs.current[focusIndex].focus()
49
- }
50
- }, [focusIndex])
51
-
52
- useEffect(() => {
53
- if (email) {
54
- triggerSendValidationEmail(
55
- {
56
- email: email,
57
- data: {
58
- redirect_url: `${window?.location?.origin}${window?.location?.pathname}`,
59
- },
60
- },
61
- {
62
- onSuccess: () => {
63
- setMessageStatus('success')
64
- setMessageText(copy?.sendEmailSuccessMessage || '')
65
- startCountDown()
66
- setTimeout(() => {
67
- setMessageStatus('')
68
- setMessageText('')
69
- }, 5000)
70
- },
71
- }
72
- )
73
- }
74
- }, [email])
75
-
76
- const handleSendAgain = useCallback(async () => {
77
- if (!email) return
78
- await triggerSendValidationEmail(
79
- {
80
- email: email,
81
- data: {
82
- redirect_url: `${window?.location?.origin}${window?.location?.pathname}`,
83
- },
84
- },
85
- {
86
- onSuccess: () => {
87
- setMessageStatus('success')
88
- setMessageText(copy?.sendEmailSuccessMessage || '')
89
- startCountDown()
90
- setTimeout(() => {
91
- setMessageStatus('')
92
- setMessageText('')
93
- }, 5000)
94
- },
95
- }
96
- )
97
- gaTrack({
98
- event: 'ga4Event',
99
- event_name: 'lp_button',
100
- event_parameters: {
101
- page_group: 'reg_sub_pop',
102
- position: 'auth_code',
103
- button_name: 'sent_again',
104
- },
105
- })
106
- }, [email, triggerSendValidationEmail])
107
-
108
- const handleInputCodeChange = (event: React.ChangeEvent<HTMLInputElement>, index: number) => {
109
- const { value } = event.target
110
-
111
- setError('')
112
-
113
- if (Number.isNaN(Number(value))) {
114
- return
115
- }
116
-
117
- if (value.length > 1) {
118
- if (index < codeArray.length - 1) {
119
- if (!codeArray[index + 1]) {
120
- setFocusIndex(index + 1)
121
- setCodeArray(old => {
122
- const newCode = [...old]
123
- newCode[index] = value[0]
124
- if (value.length > 1) {
125
- newCode[index + 1] = value[1]
126
- }
127
- return newCode
128
- })
129
- }
130
- }
131
- return
132
- }
133
- const newCode = [...codeArray]
134
- newCode[index] = value
135
- setCodeArray(newCode)
136
- if (value) {
137
- if (index < codeArray.length - 1 && !codeArray[index + 1]) {
138
- setFocusIndex(index + 1)
139
- }
140
- } else if (index > 0) {
141
- setFocusIndex(index - 1)
142
- }
143
- }
144
-
145
- const handleAuthCodeSubmit = useCallback(async () => {
146
- if (!code?.length) {
147
- setError(copy?.codeEmptyError || '')
148
- return
149
- }
150
-
151
- if (code.length < 6) {
152
- setError(copy?.incorrectCodeError || '')
153
- return
154
- }
155
-
156
- const token = sendEmailData?.data?.data?.active_token ?? sendEmailData?.data?.active_token
157
- if (token) {
158
- await triggerEmailValidation(
159
- {
160
- token: token,
161
- code: code,
162
- },
163
- {
164
- onSuccess: data => {
165
- if (data.status >= 200 && data.status < 300) {
166
- setMessageStatus('success')
167
- setMessageText(copy?.authSuccessMessage || '')
168
- onSuccess?.()
169
- setTimeout(() => {
170
- onClose()
171
- }, 3000)
172
- } else {
173
- const errorCode = data?.data?.error_code ?? data?.error_code
174
- if (errorCode === '104') {
175
- onSuccess?.()
176
- setTimeout(() => {
177
- onClose()
178
- }, 3000)
179
- } else if (errorCode === '142') {
180
- setError(copy?.incorrectCodeError || 'Invalid verification code.')
181
- } else if (errorCode === '154') {
182
- setError(copy?.expiredCodeMessage || '')
183
- } else {
184
- setError(copy?.sendEmailErrorMessage || '')
185
- }
186
- }
187
- },
188
- }
189
- )
190
- }
191
-
192
- let timer = setTimeout(() => {
193
- setMessageStatus('')
194
- setMessageText('')
195
- clearTimeout(timer)
196
- }, 5000)
197
-
198
- gaTrack({
199
- event: 'ga4Event',
200
- event_name: 'lp_button',
201
- event_parameters: {
202
- page_group: 'reg_sub_pop',
203
- position: 'auth_code',
204
- button_name: 'check_and_active',
205
- },
206
- })
207
- }, [
208
- code,
209
- copy?.codeEmptyError,
210
- copy?.authSuccessMessage,
211
- copy?.incorrectCodeError,
212
- copy?.expiredCodeMessage,
213
- copy?.sendEmailErrorMessage,
214
- locale,
215
- sendEmailData,
216
- triggerEmailValidation,
217
- onClose,
218
- onSuccess,
219
- ])
220
-
221
- return (
222
- <div className="relative">
223
- <div>
224
- <Text
225
- className="text-[22px] font-extrabold leading-[120%] text-[#333] min-l:text-[24px] [&_abbr]:text-[#005d8e]"
226
- html={copy?.authCodeTitle}
227
- />
228
- <Text
229
- as="p"
230
- className="mt-3 text-[14px] font-semibold leading-[140%] text-[rgba(51,51,51,0.75)] min-l:text-base [&_abbr]:text-[#333]"
231
- html={copy?.authCodeDesc?.replace('%email%', email || '')}
232
- />
233
- </div>
234
- <div className="mt-6">
235
- <Text
236
- className="mt-4 text-[14px] !font-bold font-semibold leading-[140%] text-[#333] min-l:mt-6"
237
- html={copy?.enterActiveCodeText}
238
- />
239
- <div className="my-3 grid grid-cols-6 gap-2">
240
- {codeArray.map((item, index) => (
241
- <div key={index} className="col-span-1 aspect-1 text-[#555]">
242
- <input
243
- ref={inputRef => {
244
- if (inputRef) {
245
- inputRefs.current[index] = inputRef
246
- }
247
- }}
248
- key={index}
249
- type="tel"
250
- className={cn(
251
- 'flex size-full items-center justify-center border border-[#333333]/20 bg-[#EEEEEE] text-center text-[24px] font-medium focus:border-[#333]/50 [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none [&:focus-visible]:outline-none',
252
- rounded && 'rounded-[12px]'
253
- )}
254
- value={item}
255
- autoComplete="false"
256
- autoCorrect="false"
257
- spellCheck="false"
258
- autoCapitalize="false"
259
- onChange={event => handleInputCodeChange(event, index)}
260
- onFocus={() => {
261
- setFocusIndex(index)
262
- }}
263
- onPaste={event => {
264
- const paste = event.clipboardData.getData('text')
265
- if (!Number.isNaN(Number(paste))) {
266
- const pastedCode = paste.split('').slice(0, 6)
267
- setCodeArray(pastedCode.concat(Array(6 - pastedCode.length).fill('')))
268
- if (pastedCode.length <= codeArray.length) {
269
- setFocusIndex(pastedCode.length - 1)
270
- }
271
- }
272
- }}
273
- onKeyDown={event => {
274
- const { value } = event.target as HTMLInputElement
275
- if (event.key === 'Backspace' && !value && index > 0) {
276
- setFocusIndex(index - 1)
277
- }
278
- }}
279
- />
280
- </div>
281
- ))}
282
- </div>
283
-
284
- {error && <Text className="mb-3 text-[14px] font-semibold leading-[120%] text-[#f84d4f]" html={error} />}
285
- {copy?.authCodeContent && (
286
- <ul
287
- className='flex flex-col gap-1 [&_li]:flex [&_li]:gap-2 [&_li]:text-[14px] [&_li]:font-semibold [&_li]:leading-[120%] [&_li]:text-[rgba(51,51,51,0.55)] [&_li]:before:content-["•"]'
288
- dangerouslySetInnerHTML={{ __html: copy?.authCodeContent }}
289
- />
290
- )}
291
- </div>
292
- <div className="mt-4 min-l:mt-6">
293
- <Text className="text-base font-semibold leading-[100%] text-[#333]" html={copy?.authCodeReceiveText} />{' '}
294
- {isStartCountDown ? (
295
- <Text
296
- html={copy?.retrieveText?.replace('%countdownTime%', countDown.toString())}
297
- className="cursor-pointer text-base font-semibold leading-[100%] !text-brand text-[#005d8e] text-[#333] underline"
298
- />
299
- ) : (
300
- <Text
301
- onClick={handleSendAgain}
302
- className={cn(
303
- 'cursor-pointer text-base font-semibold leading-[100%] !text-brand text-[#005d8e] text-[#333] underline',
304
- {
305
- 'pointer-events-none': isStartCountDown || isSendingEmail,
306
- }
307
- )}
308
- html={copy?.sendAgainText}
309
- />
310
- )}
311
- <Button
312
- type="submit"
313
- loading={emailValidationLoading}
314
- className="mt-6 flex h-[54px] w-full cursor-pointer items-center justify-center px-8 py-[15px] text-center text-base font-bold leading-[100%] text-white min-l:mt-8"
315
- onClick={handleAuthCodeSubmit}
316
- >
317
- {copy.buttonText}
318
- </Button>
319
- </div>
320
- <Message status={messageStatus} message={messageText} />
321
- </div>
322
- )
323
- }
@@ -1,186 +0,0 @@
1
- import { useCallback, useEffect, useState } from 'react'
2
- import { Button, Text } from '@anker-in/headless-ui'
3
- import { classNames as cn } from '@anker-in/lib'
4
- import { CreditsModalContainer } from '../../../credits/modal/ModalContainer'
5
- import type { CompleteProfileCopy } from '../../type'
6
- import { useUpdateProfile } from './hooks/useUpdateProfile'
7
- import useCountries from '../../../credits/context/hooks/useCountries'
8
- import { useMemberPopupContext } from '../../context/provider'
9
-
10
- type Props = {
11
- isOpen: boolean
12
- onClose: () => void
13
- onSuccess?: () => void
14
- copy: CompleteProfileCopy
15
- shopifyStoreDomain?: string
16
- }
17
-
18
- export function CompleteProfileModal({ isOpen, onClose, onSuccess, copy, shopifyStoreDomain = '' }: Props) {
19
- const { profile, fetchCreditInfo, alpcConfig } = useMemberPopupContext()
20
- const { locale } = alpcConfig
21
-
22
- const [firstName, setFirstName] = useState('')
23
- const [lastName, setLastName] = useState('')
24
- const [phone, setPhone] = useState('')
25
- const [birthDay, setBirthDay] = useState('')
26
- const [country, setCountry] = useState('')
27
- const [firstNameError, setFirstNameError] = useState('')
28
- const [lastNameError, setLastNameError] = useState('')
29
-
30
- const { updateProfile, isLoading } = useUpdateProfile({ locale, appName: alpcConfig.appName })
31
- const { countries } = useCountries({ shopifyStoreDomain })
32
-
33
- useEffect(() => {
34
- if (profile) {
35
- setFirstName(profile.first_name ?? '')
36
- setLastName(profile.last_name ?? '')
37
- setPhone(profile.phone_number ?? '')
38
- setBirthDay(profile.dob ?? '')
39
- setCountry(profile.country?.id ?? '')
40
- }
41
- }, [profile])
42
-
43
- const validate = useCallback(() => {
44
- let hasError = false
45
- if (!firstName.trim()) {
46
- setFirstNameError(copy.required)
47
- hasError = true
48
- } else {
49
- setFirstNameError('')
50
- }
51
- if (!lastName.trim()) {
52
- setLastNameError(copy.required)
53
- hasError = true
54
- } else {
55
- setLastNameError('')
56
- }
57
- return hasError
58
- }, [firstName, lastName, copy.required])
59
-
60
- const handleSubmit = useCallback(async () => {
61
- if (validate()) return
62
- const success = await updateProfile({
63
- first_name: firstName.trim(),
64
- last_name: lastName.trim(),
65
- phone_number: phone,
66
- country,
67
- dob: birthDay,
68
- })
69
- if (success) {
70
- fetchCreditInfo(profile?.user_id)
71
- onSuccess?.()
72
- onClose()
73
- }
74
- }, [validate, updateProfile, firstName, lastName, phone, country, birthDay, fetchCreditInfo, profile, onSuccess, onClose])
75
-
76
- return (
77
- <CreditsModalContainer
78
- isOpen={isOpen}
79
- onClose={onClose}
80
- title={copy.title}
81
- titleClassName="!h-auto !border-b-0 !pb-0"
82
- className="w-[540px] md:h-auto"
83
- useAnimation
84
- animationClassName="md:translate-y-[100vh]"
85
- >
86
- <div className="flex flex-col gap-[20px]">
87
- {copy.subtitle && (
88
- <Text className="text-[14px] text-[#1d1d1f]" html={copy.subtitle} />
89
- )}
90
-
91
- <div>
92
- <label className="block text-[14px] font-semibold text-[#1d1d1f]">{copy.email}</label>
93
- <input
94
- className="mt-[8px] h-[46px] w-full rounded-[4px] border border-[#d8d8d8] bg-[#f5f5f5] px-[12px] text-[14px] text-[#999]"
95
- value={profile?.email ?? ''}
96
- disabled
97
- />
98
- </div>
99
-
100
- <div>
101
- <label className="block text-[14px] font-semibold text-[#1d1d1f]">
102
- {copy.firstName} <span className="text-[#f84d4f]">*</span>
103
- </label>
104
- <input
105
- className={cn(
106
- 'mt-[8px] h-[46px] w-full rounded-[4px] border px-[12px] text-[14px] outline-none',
107
- firstNameError ? 'border-[#f84d4f]' : 'border-[#d8d8d8]'
108
- )}
109
- value={firstName}
110
- onChange={e => { setFirstName(e.target.value); setFirstNameError('') }}
111
- />
112
- {firstNameError && <Text className="mt-[4px] text-[12px] text-[#f84d4f]" html={firstNameError} />}
113
- </div>
114
-
115
- <div>
116
- <label className="block text-[14px] font-semibold text-[#1d1d1f]">
117
- {copy.lastName} <span className="text-[#f84d4f]">*</span>
118
- </label>
119
- <input
120
- className={cn(
121
- 'mt-[8px] h-[46px] w-full rounded-[4px] border px-[12px] text-[14px] outline-none',
122
- lastNameError ? 'border-[#f84d4f]' : 'border-[#d8d8d8]'
123
- )}
124
- value={lastName}
125
- onChange={e => { setLastName(e.target.value); setLastNameError('') }}
126
- />
127
- {lastNameError && <Text className="mt-[4px] text-[12px] text-[#f84d4f]" html={lastNameError} />}
128
- </div>
129
-
130
- <div>
131
- <label className="block text-[14px] font-semibold text-[#1d1d1f]">{copy.birthday}</label>
132
- <input
133
- className="mt-[8px] h-[46px] w-full rounded-[4px] border border-[#d8d8d8] px-[12px] text-[14px] outline-none"
134
- type="date"
135
- value={birthDay}
136
- onChange={e => setBirthDay(e.target.value)}
137
- />
138
- </div>
139
-
140
- <div>
141
- <label className="block text-[14px] font-semibold text-[#1d1d1f]">{copy.phone}</label>
142
- <input
143
- className="mt-[8px] h-[46px] w-full rounded-[4px] border border-[#d8d8d8] px-[12px] text-[14px] outline-none"
144
- value={phone}
145
- onChange={e => setPhone(e.target.value)}
146
- />
147
- </div>
148
-
149
- <div>
150
- <label className="block text-[14px] font-semibold text-[#1d1d1f]">{copy.country}</label>
151
- <select
152
- className="mt-[8px] h-[46px] w-full rounded-[4px] border border-[#d8d8d8] px-[12px] text-[14px] outline-none"
153
- value={country}
154
- onChange={e => setCountry(e.target.value)}
155
- >
156
- <option value="" />
157
- {countries.map((c: { id: string; name: string }) => (
158
- <option key={c.id} value={c.id}>{c.name}</option>
159
- ))}
160
- </select>
161
- </div>
162
-
163
- <div className="flex gap-[12px]">
164
- <Button
165
- variant="secondary"
166
- size="lg"
167
- className="flex-1"
168
- onClick={onClose}
169
- disabled={isLoading}
170
- >
171
- {copy.cancel}
172
- </Button>
173
- <Button
174
- variant="primary"
175
- size="lg"
176
- className="flex-1"
177
- loading={isLoading}
178
- onClick={handleSubmit}
179
- >
180
- {copy.save}
181
- </Button>
182
- </div>
183
- </div>
184
- </CreditsModalContainer>
185
- )
186
- }
@@ -1,179 +0,0 @@
1
- import { useCallback, useEffect, useState } from 'react'
2
- import { Button, Text } from '@anker-in/headless-ui'
3
- import { classNames as cn, useHeadlessContext } from '@anker-in/lib'
4
- import type { CompleteProfileCopy } from '../../type'
5
- import { useUpdateProfile } from './hooks/useUpdateProfile'
6
- import useCountries from '../../../credits/context/hooks/useCountries'
7
- import { useMemberPopupContext } from '../../context/provider'
8
- import { ROUNDED_BRANDS } from '../../../../constants'
9
-
10
- type Props = {
11
- copy: CompleteProfileCopy
12
- shopifyStoreDomain?: string
13
- onClose: () => void
14
- onSuccess?: () => void
15
- }
16
-
17
- export default function CompleteProfilePanel({ copy, shopifyStoreDomain = '', onClose, onSuccess }: Props) {
18
- const { profile, fetchCreditInfo, alpcConfig } = useMemberPopupContext()
19
- const { locale } = alpcConfig
20
- const { brand } = useHeadlessContext()
21
- const rounded = ROUNDED_BRANDS.includes(brand)
22
-
23
- const [firstName, setFirstName] = useState('')
24
- const [lastName, setLastName] = useState('')
25
- const [phone, setPhone] = useState('')
26
- const [birthDay, setBirthDay] = useState('')
27
- const [country, setCountry] = useState('')
28
- const [firstNameError, setFirstNameError] = useState('')
29
- const [lastNameError, setLastNameError] = useState('')
30
-
31
- const { updateProfile, isLoading } = useUpdateProfile({ locale, appName: alpcConfig.appName })
32
- const { countries } = useCountries({ shopifyStoreDomain })
33
-
34
- useEffect(() => {
35
- if (profile) {
36
- setFirstName(profile.first_name ?? '')
37
- setLastName(profile.last_name ?? '')
38
- setPhone(profile.phone_number ?? '')
39
- setBirthDay(profile.dob ?? '')
40
- setCountry(profile.country?.id ?? '')
41
- }
42
- }, [profile])
43
-
44
- const validate = useCallback(() => {
45
- let hasError = false
46
- if (!firstName.trim()) {
47
- setFirstNameError(copy.required)
48
- hasError = true
49
- } else {
50
- setFirstNameError('')
51
- }
52
- if (!lastName.trim()) {
53
- setLastNameError(copy.required)
54
- hasError = true
55
- } else {
56
- setLastNameError('')
57
- }
58
- return hasError
59
- }, [firstName, lastName, copy.required])
60
-
61
- const handleSubmit = useCallback(async () => {
62
- if (validate()) return
63
- const success = await updateProfile({
64
- first_name: firstName.trim(),
65
- last_name: lastName.trim(),
66
- phone_number: phone,
67
- country,
68
- dob: birthDay,
69
- })
70
- if (success) {
71
- fetchCreditInfo(profile?.user_id)
72
- onSuccess?.()
73
- onClose()
74
- }
75
- }, [validate, updateProfile, firstName, lastName, phone, country, birthDay, fetchCreditInfo, profile, onSuccess, onClose])
76
-
77
- return (
78
- <div className="flex flex-col gap-[20px]">
79
- {copy.subtitle && (
80
- <Text className="text-[14px] text-[#1d1d1f]" html={copy.subtitle} />
81
- )}
82
-
83
- <div>
84
- <label className="block text-[14px] font-[700] text-[#1d1d1f]">{copy.email}</label>
85
- <input
86
- className={cn('mt-[8px] h-[46px] w-full border border-[#d8d8d8] bg-[#f5f5f5] px-[12px] text-[14px] text-[#999]', rounded ? 'rounded-[4px]' : 'rounded-none')}
87
- value={profile?.email ?? ''}
88
- disabled
89
- />
90
- </div>
91
-
92
- <div>
93
- <label className="block text-[14px] font-[700] text-[#1d1d1f]">
94
- {copy.firstName} <span className="text-[#f84d4f]">*</span>
95
- </label>
96
- <input
97
- className={cn(
98
- 'mt-[8px] h-[46px] w-full border px-[12px] text-[14px] outline-none',
99
- firstNameError ? 'border-[#f84d4f]' : 'border-[#d8d8d8]',
100
- rounded ? 'rounded-[4px]' : 'rounded-none'
101
- )}
102
- value={firstName}
103
- onChange={e => { setFirstName(e.target.value); setFirstNameError('') }}
104
- />
105
- {firstNameError && <Text className="mt-[4px] text-[12px] text-[#f84d4f]" html={firstNameError} />}
106
- </div>
107
-
108
- <div>
109
- <label className="block text-[14px] font-[700] text-[#1d1d1f]">
110
- {copy.lastName} <span className="text-[#f84d4f]">*</span>
111
- </label>
112
- <input
113
- className={cn(
114
- 'mt-[8px] h-[46px] w-full border px-[12px] text-[14px] outline-none',
115
- lastNameError ? 'border-[#f84d4f]' : 'border-[#d8d8d8]',
116
- rounded ? 'rounded-[4px]' : 'rounded-none'
117
- )}
118
- value={lastName}
119
- onChange={e => { setLastName(e.target.value); setLastNameError('') }}
120
- />
121
- {lastNameError && <Text className="mt-[4px] text-[12px] text-[#f84d4f]" html={lastNameError} />}
122
- </div>
123
-
124
- <div>
125
- <label className="block text-[14px] font-[700] text-[#1d1d1f]">{copy.birthday}</label>
126
- <input
127
- className={cn('mt-[8px] h-[46px] w-full border border-[#d8d8d8] px-[12px] text-[14px] outline-none', rounded ? 'rounded-[4px]' : 'rounded-none')}
128
- type="date"
129
- value={birthDay}
130
- onChange={e => setBirthDay(e.target.value)}
131
- />
132
- </div>
133
-
134
- <div>
135
- <label className="block text-[14px] font-[700] text-[#1d1d1f]">{copy.phone}</label>
136
- <input
137
- className={cn('mt-[8px] h-[46px] w-full border border-[#d8d8d8] px-[12px] text-[14px] outline-none', rounded ? 'rounded-[4px]' : 'rounded-none')}
138
- value={phone}
139
- onChange={e => setPhone(e.target.value)}
140
- />
141
- </div>
142
-
143
- <div>
144
- <label className="block text-[14px] font-[700] text-[#1d1d1f]">{copy.country}</label>
145
- <select
146
- className={cn('mt-[8px] h-[46px] w-full border border-[#d8d8d8] px-[12px] text-[14px] outline-none', rounded ? 'rounded-[4px]' : 'rounded-none')}
147
- value={country}
148
- onChange={e => setCountry(e.target.value)}
149
- >
150
- <option value="" />
151
- {countries.map((c: { id: string; name: string }) => (
152
- <option key={c.id} value={c.id}>{c.name}</option>
153
- ))}
154
- </select>
155
- </div>
156
-
157
- <div className="flex gap-[12px]">
158
- <Button
159
- variant="secondary"
160
- size="lg"
161
- className="flex-1"
162
- onClick={onClose}
163
- disabled={isLoading}
164
- >
165
- {copy.cancel}
166
- </Button>
167
- <Button
168
- variant="primary"
169
- size="lg"
170
- className="flex-1"
171
- loading={isLoading}
172
- onClick={handleSubmit}
173
- >
174
- {copy.save}
175
- </Button>
176
- </div>
177
- </div>
178
- )
179
- }