@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,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../../src/components/memberPopup/panels/Activity/SubscribeModal.tsx"],
4
- "sourcesContent": ["import { useCallback, useEffect, useState } from 'react'\nimport { Button, Checkbox, Text } from '@anker-in/headless-ui'\nimport { classNames as cn, useHeadlessContext } from '@anker-in/lib'\nimport { CreditsModalContainer } from '../../../credits/modal/ModalContainer'\nimport { emailValidate } from '../../../credits/context/utils'\nimport { useActivitySubscribe } from './hooks/useActivitySubscribe'\nimport { useMemberPopupContext } from '../../context/provider'\nimport type { ActivitySubscribeCopy } from '../../type'\nimport { ROUNDED_BRANDS } from '../../../../constants'\n\ntype Props = {\n isOpen: boolean\n onClose: () => void\n onSuccess?: () => void\n copy: ActivitySubscribeCopy\n email?: string\n}\n\nexport function ActivitySubscribeModal({ isOpen, onClose, onSuccess, copy, email: initialEmail }: Props) {\n const { alpcConfig } = useMemberPopupContext()\n const { storeDomain } = useHeadlessContext()\n const [policy, setPolicy] = useState(false)\n const [email, setEmail] = useState(initialEmail ?? '')\n const { brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n const { subscribe, loading, error, success } = useActivitySubscribe(copy, alpcConfig.locale, storeDomain)\n\n useEffect(() => {\n if (initialEmail) setEmail(initialEmail)\n }, [initialEmail])\n\n useEffect(() => {\n if (success) {\n onSuccess?.()\n setTimeout(() => onClose(), 3000)\n }\n }, [success, onSuccess, onClose])\n\n const handleSubmit = useCallback(() => {\n subscribe(email, policy)\n }, [subscribe, email, policy])\n\n return (\n <CreditsModalContainer\n isOpen={isOpen}\n onClose={onClose}\n className=\"w-[540px] md:h-auto\"\n scrollClassName=\"mb-[40px] md:mb-[24px]\"\n useAnimation\n animationClassName=\"md:translate-y-[100vh]\"\n >\n <div className=\"flex flex-col gap-[16px] text-center\">\n <Text className=\"text-[22px] font-bold\" html={copy.title} />\n {copy.desc && (\n <Text className=\"text-left text-[16px] font-semibold text-[#1f2021]\" html={copy.desc} />\n )}\n\n <div className={cn('flex h-[52px] w-full overflow-hidden md:flex-col md:h-auto md:gap-[16px]', rounded ? 'rounded-[2px]' : 'rounded-none')}>\n <input\n className={cn('h-full flex-1 border border-[#d8d8d8] px-[14px] text-[16px] outline-none placeholder:text-[#999] md:h-[52px]', rounded ? 'rounded-l-[2px] md:rounded-[2px]' : 'rounded-none')}\n placeholder={copy.placeholder}\n value={email}\n onChange={e => setEmail(e.target.value.trim())}\n />\n <Button\n variant=\"primary\"\n loading={loading}\n className={cn('!h-full !min-w-0 !px-[24px] md:!h-[46px]', rounded ? '!rounded-l-none !rounded-r-[2px] md:!rounded-[2px]' : '!rounded-none')}\n onClick={handleSubmit}\n >\n {copy.buttonLabel ?? 'Subscribe'}\n </Button>\n </div>\n\n <div className=\"flex w-full items-start gap-[8px]\">\n <Checkbox checked={policy} onCheckedChange={() => setPolicy(v => !v)} className=\"border-[#1d1d1f]\" />\n <label\n className=\"text-left text-[14px] font-semibold text-[#777] [&_a]:underline\"\n dangerouslySetInnerHTML={{ __html: copy.policy ?? '' }}\n />\n </div>\n\n <div className={cn('text-left text-[16px] font-semibold', error && 'text-[#f84d4f]', success && 'text-[#52c41a]')}>\n {success ? (copy.successTips ?? 'Subscribed!') : error}\n </div>\n </div>\n </CreditsModalContainer>\n )\n}\n"],
5
- "mappings": "AAqDQ,cAAAA,EAKA,QAAAC,MALA,oBArDR,OAAS,eAAAC,EAAa,aAAAC,EAAW,YAAAC,MAAgB,QACjD,OAAS,UAAAC,EAAQ,YAAAC,EAAU,QAAAC,MAAY,wBACvC,OAAS,cAAcC,EAAI,sBAAAC,MAA0B,gBACrD,OAAS,yBAAAC,MAA6B,wCAEtC,OAAS,wBAAAC,MAA4B,+BACrC,OAAS,yBAAAC,MAA6B,yBAEtC,OAAS,kBAAAC,MAAsB,wBAUxB,SAASC,EAAuB,CAAE,OAAAC,EAAQ,QAAAC,EAAS,UAAAC,EAAW,KAAAC,EAAM,MAAOC,CAAa,EAAU,CACvG,KAAM,CAAE,WAAAC,CAAW,EAAIR,EAAsB,EACvC,CAAE,YAAAS,CAAY,EAAIZ,EAAmB,EACrC,CAACa,EAAQC,CAAS,EAAInB,EAAS,EAAK,EACpC,CAACoB,EAAOC,CAAQ,EAAIrB,EAASe,GAAgB,EAAE,EAC/C,CAAE,MAAAO,CAAM,EAAIjB,EAAmB,EAC/BkB,EAAUd,EAAe,SAASa,CAAK,EAEvC,CAAE,UAAAE,EAAW,QAAAC,EAAS,MAAAC,EAAO,QAAAC,CAAQ,EAAIpB,EAAqBO,EAAME,EAAW,OAAQC,CAAW,EAExGlB,EAAU,IAAM,CACVgB,GAAcM,EAASN,CAAY,CACzC,EAAG,CAACA,CAAY,CAAC,EAEjBhB,EAAU,IAAM,CACV4B,IACFd,IAAY,EACZ,WAAW,IAAMD,EAAQ,EAAG,GAAI,EAEpC,EAAG,CAACe,EAASd,EAAWD,CAAO,CAAC,EAEhC,MAAMgB,EAAe9B,EAAY,IAAM,CACrC0B,EAAUJ,EAAOF,CAAM,CACzB,EAAG,CAACM,EAAWJ,EAAOF,CAAM,CAAC,EAE7B,OACEtB,EAACU,EAAA,CACC,OAAQK,EACR,QAASC,EACT,UAAU,sBACV,gBAAgB,yBAChB,aAAY,GACZ,mBAAmB,yBAEnB,SAAAf,EAAC,OAAI,UAAU,uCACb,UAAAD,EAACO,EAAA,CAAK,UAAU,wBAAwB,KAAMW,EAAK,MAAO,EACzDA,EAAK,MACJlB,EAACO,EAAA,CAAK,UAAU,qDAAqD,KAAMW,EAAK,KAAM,EAGxFjB,EAAC,OAAI,UAAWO,EAAG,2EAA4EmB,EAAU,gBAAkB,cAAc,EACvI,UAAA3B,EAAC,SACC,UAAWQ,EAAG,+GAAgHmB,EAAU,mCAAqC,cAAc,EAC3L,YAAaT,EAAK,YAClB,MAAOM,EACP,SAAUS,GAAKR,EAASQ,EAAE,OAAO,MAAM,KAAK,CAAC,EAC/C,EACAjC,EAACK,EAAA,CACC,QAAQ,UACR,QAASwB,EACT,UAAWrB,EAAG,2CAA4CmB,EAAU,qDAAuD,eAAe,EAC1I,QAASK,EAER,SAAAd,EAAK,aAAe,YACvB,GACF,EAEAjB,EAAC,OAAI,UAAU,oCACb,UAAAD,EAACM,EAAA,CAAS,QAASgB,EAAQ,gBAAiB,IAAMC,EAAUW,GAAK,CAACA,CAAC,EAAG,UAAU,mBAAmB,EACnGlC,EAAC,SACC,UAAU,kEACV,wBAAyB,CAAE,OAAQkB,EAAK,QAAU,EAAG,EACvD,GACF,EAEAlB,EAAC,OAAI,UAAWQ,EAAG,sCAAuCsB,GAAS,iBAAkBC,GAAW,gBAAgB,EAC7G,SAAAA,EAAWb,EAAK,aAAe,cAAiBY,EACnD,GACF,EACF,CAEJ",
6
- "names": ["jsx", "jsxs", "useCallback", "useEffect", "useState", "Button", "Checkbox", "Text", "cn", "useHeadlessContext", "CreditsModalContainer", "useActivitySubscribe", "useMemberPopupContext", "ROUNDED_BRANDS", "ActivitySubscribeModal", "isOpen", "onClose", "onSuccess", "copy", "initialEmail", "alpcConfig", "storeDomain", "policy", "setPolicy", "email", "setEmail", "brand", "rounded", "subscribe", "loading", "error", "success", "handleSubmit", "e", "v"]
7
- }
@@ -1,7 +0,0 @@
1
- import type { ActivitySubscribeCopy } from '../../../type';
2
- export declare function useActivitySubscribe(copy: ActivitySubscribeCopy, locale: string, shopifyDomain: string): {
3
- subscribe: (email: string, policy: boolean) => Promise<boolean>;
4
- loading: boolean;
5
- error: string;
6
- success: boolean;
7
- };
@@ -1,2 +0,0 @@
1
- import{useCallback as g,useState as n}from"react";import{parse as p}from"query-string";import _ from"js-cookie";import{emailValidate as y}from"../../../../credits/context/utils";function m(){if(typeof window>"u")return{register_source:""};const{search:e,href:s}=window.location;return{register_source:p(e).redirect??_.get("reg_source")??s}}function A(e,s,t){const[u,o]=n(!1),[c,r]=n(""),[b,l]=n(!1);return{subscribe:g(async(i,f)=>{if(r(""),!i)return r("Please fill in your email"),!1;if(!y(i))return r("Invalid email address"),!1;if(!f)return r("Please agree to the policy"),!1;o(!0);const{register_source:d}=m();try{const a=await(await fetch("/api/multipass/rainbowbridge/activities",{method:"POST",headers:{"Content-Type":"application/json","current-language":s},body:JSON.stringify({email:i,register_source:d,shopify_domain:t,single_brand_subscribe:e.single_brand_subscribe??!0,genre:e.genre??"",sub_brand_type:e.sub_brand_type??""})})).json();return a.errors?(r(a.errors??"Error occurred"),!1):(l(!0),!0)}catch{return r("Network error"),!1}finally{o(!1)}},[s,e.single_brand_subscribe,e.genre,e.sub_brand_type,t]),loading:u,error:c,success:b}}export{A as useActivitySubscribe};
2
- //# sourceMappingURL=useActivitySubscribe.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../../../src/components/memberPopup/panels/Activity/hooks/useActivitySubscribe.ts"],
4
- "sourcesContent": ["import { useCallback, useState } from 'react'\nimport { parse } from 'query-string'\nimport Cookies from 'js-cookie'\nimport { emailValidate } from '../../../../credits/context/utils'\nimport type { ActivitySubscribeCopy } from '../../../type'\n\nfunction getAdCookie() {\n if (typeof window === 'undefined') return { register_source: '' }\n const { search, href } = window.location\n const query = parse(search)\n return {\n register_source: query.redirect ?? Cookies.get('reg_source') ?? href,\n }\n}\n\nexport function useActivitySubscribe(copy: ActivitySubscribeCopy, locale: string, shopifyDomain: string) {\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState('')\n const [success, setSuccess] = useState(false)\n\n const subscribe = useCallback(\n async (email: string, policy: boolean): Promise<boolean> => {\n setError('')\n if (!email) { setError('Please fill in your email'); return false }\n if (!emailValidate(email)) { setError('Invalid email address'); return false }\n if (!policy) { setError('Please agree to the policy'); return false }\n\n setLoading(true)\n const { register_source } = getAdCookie()\n try {\n const response = await fetch('/api/multipass/rainbowbridge/activities', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', 'current-language': locale },\n body: JSON.stringify({\n email,\n register_source,\n shopify_domain: shopifyDomain,\n single_brand_subscribe: copy.single_brand_subscribe ?? true,\n genre: copy.genre ?? '',\n sub_brand_type: copy.sub_brand_type ?? '',\n }),\n })\n const result = await response.json()\n if (!result.errors) {\n setSuccess(true)\n return true\n }\n setError(result.errors ?? 'Error occurred')\n return false\n } catch {\n setError('Network error')\n return false\n } finally {\n setLoading(false)\n }\n },\n [locale, copy.single_brand_subscribe, copy.genre, copy.sub_brand_type, shopifyDomain]\n )\n\n return { subscribe, loading, error, success }\n}\n"],
5
- "mappings": "AAAA,OAAS,eAAAA,EAAa,YAAAC,MAAgB,QACtC,OAAS,SAAAC,MAAa,eACtB,OAAOC,MAAa,YACpB,OAAS,iBAAAC,MAAqB,oCAG9B,SAASC,GAAc,CACrB,GAAI,OAAO,OAAW,IAAa,MAAO,CAAE,gBAAiB,EAAG,EAChE,KAAM,CAAE,OAAAC,EAAQ,KAAAC,CAAK,EAAI,OAAO,SAEhC,MAAO,CACL,gBAFYL,EAAMI,CAAM,EAED,UAAYH,EAAQ,IAAI,YAAY,GAAKI,CAClE,CACF,CAEO,SAASC,EAAqBC,EAA6BC,EAAgBC,EAAuB,CACvG,KAAM,CAACC,EAASC,CAAU,EAAIZ,EAAS,EAAK,EACtC,CAACa,EAAOC,CAAQ,EAAId,EAAS,EAAE,EAC/B,CAACe,EAASC,CAAU,EAAIhB,EAAS,EAAK,EAyC5C,MAAO,CAAE,UAvCSD,EAChB,MAAOkB,EAAeC,IAAsC,CAE1D,GADAJ,EAAS,EAAE,EACP,CAACG,EAAS,OAAAH,EAAS,2BAA2B,EAAU,GAC5D,GAAI,CAACX,EAAcc,CAAK,EAAK,OAAAH,EAAS,uBAAuB,EAAU,GACvE,GAAI,CAACI,EAAU,OAAAJ,EAAS,4BAA4B,EAAU,GAE9DF,EAAW,EAAI,EACf,KAAM,CAAE,gBAAAO,CAAgB,EAAIf,EAAY,EACxC,GAAI,CAaF,MAAMgB,EAAS,MAZE,MAAM,MAAM,0CAA2C,CACtE,OAAQ,OACR,QAAS,CAAE,eAAgB,mBAAoB,mBAAoBX,CAAO,EAC1E,KAAM,KAAK,UAAU,CACnB,MAAAQ,EACA,gBAAAE,EACA,eAAgBT,EAChB,uBAAwBF,EAAK,wBAA0B,GACvD,MAAOA,EAAK,OAAS,GACrB,eAAgBA,EAAK,gBAAkB,EACzC,CAAC,CACH,CAAC,GAC6B,KAAK,EACnC,OAAKY,EAAO,QAIZN,EAASM,EAAO,QAAU,gBAAgB,EACnC,KAJLJ,EAAW,EAAI,EACR,GAIX,MAAQ,CACN,OAAAF,EAAS,eAAe,EACjB,EACT,QAAE,CACAF,EAAW,EAAK,CAClB,CACF,EACA,CAACH,EAAQD,EAAK,uBAAwBA,EAAK,MAAOA,EAAK,eAAgBE,CAAa,CACtF,EAEoB,QAAAC,EAAS,MAAAE,EAAO,QAAAE,CAAQ,CAC9C",
6
- "names": ["useCallback", "useState", "parse", "Cookies", "emailValidate", "getAdCookie", "search", "href", "useActivitySubscribe", "copy", "locale", "shopifyDomain", "loading", "setLoading", "error", "setError", "success", "setSuccess", "email", "policy", "register_source", "result"]
7
- }
@@ -1,7 +0,0 @@
1
- import type { ActivityCopy } from '../../type';
2
- type Props = {
3
- copy: ActivityCopy;
4
- onClose: () => void;
5
- };
6
- declare function Activity({ copy, onClose }: Props): import("react/jsx-runtime").JSX.Element;
7
- export default Activity;
@@ -1,2 +0,0 @@
1
- import{Fragment as p,jsx as t,jsxs as i}from"react/jsx-runtime";import{useState as m}from"react";import{Button as s,Picture as u,Text as r}from"@anker-in/headless-ui";import{CreditsModalContainer as b}from"../../../credits/modal/ModalContainer";import{useMemberPopupContext as d}from"../../context/provider";import{ActivitySubscribeModal as c}from"./SubscribeModal";function f({copy:e,onClose:l}){const{profile:o}=d(),[n,a]=m(!1);return i(p,{children:[t(b,{isOpen:!0,onClose:l,title:void 0,className:"w-[540px] md:h-auto",useAnimation:!0,animationClassName:"md:translate-y-[100vh]",children:i("div",{className:"flex flex-col gap-[20px]",children:[e.image?.url&&t(u,{source:e.image.url,alt:e.image.alt??"",className:"w-full rounded-[8px]"}),e.title&&t(r,{className:"text-[20px] font-bold",html:e.title}),e.description&&t(r,{className:"text-[14px] leading-[1.5] text-[#666]",html:e.description}),i("div",{className:"flex gap-[12px]",children:[e.ctaButton&&t(s,{variant:"primary",size:"lg",className:"flex-1",as:e.ctaUrl?"a":"button",...e.ctaUrl?{href:e.ctaUrl,target:"_blank",rel:"noopener noreferrer"}:{},children:e.ctaButton}),e.subscribe&&t(s,{variant:"secondary",size:"lg",className:"flex-1",onClick:()=>a(!0),children:e.subscribe.buttonLabel??"Subscribe"})]})]})}),e.subscribe&&t(c,{isOpen:n,onClose:()=>a(!1),copy:e.subscribe,email:o?.email})]})}var h=f;export{h as default};
2
- //# sourceMappingURL=index.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../../src/components/memberPopup/panels/Activity/index.tsx"],
4
- "sourcesContent": ["import { useState } from 'react'\nimport { Button, Picture, Text } from '@anker-in/headless-ui'\nimport { CreditsModalContainer } from '../../../credits/modal/ModalContainer'\nimport { useMemberPopupContext } from '../../context/provider'\nimport { ActivitySubscribeModal } from './SubscribeModal'\nimport type { ActivityCopy } from '../../type'\n\ntype Props = {\n copy: ActivityCopy\n onClose: () => void\n}\n\nfunction Activity({ copy, onClose }: Props) {\n const { profile } = useMemberPopupContext()\n const [isSubscribeOpen, setIsSubscribeOpen] = useState(false)\n\n return (\n <>\n <CreditsModalContainer\n isOpen\n onClose={onClose}\n title={undefined}\n className=\"w-[540px] md:h-auto\"\n useAnimation\n animationClassName=\"md:translate-y-[100vh]\"\n >\n <div className=\"flex flex-col gap-[20px]\">\n {copy.image?.url && (\n <Picture\n source={copy.image.url}\n alt={copy.image.alt ?? ''}\n className=\"w-full rounded-[8px]\"\n />\n )}\n {copy.title && (\n <Text className=\"text-[20px] font-bold\" html={copy.title} />\n )}\n {copy.description && (\n <Text className=\"text-[14px] leading-[1.5] text-[#666]\" html={copy.description} />\n )}\n <div className=\"flex gap-[12px]\">\n {copy.ctaButton && (\n <Button\n variant=\"primary\"\n size=\"lg\"\n className=\"flex-1\"\n as={copy.ctaUrl ? 'a' : 'button'}\n {...(copy.ctaUrl\n ? { href: copy.ctaUrl, target: '_blank', rel: 'noopener noreferrer' }\n : {})}\n >\n {copy.ctaButton}\n </Button>\n )}\n {copy.subscribe && (\n <Button\n variant=\"secondary\"\n size=\"lg\"\n className=\"flex-1\"\n onClick={() => setIsSubscribeOpen(true)}\n >\n {copy.subscribe.buttonLabel ?? 'Subscribe'}\n </Button>\n )}\n </div>\n </div>\n </CreditsModalContainer>\n\n {copy.subscribe && (\n <ActivitySubscribeModal\n isOpen={isSubscribeOpen}\n onClose={() => setIsSubscribeOpen(false)}\n copy={copy.subscribe}\n email={profile?.email}\n />\n )}\n </>\n )\n}\n\nexport default Activity\n"],
5
- "mappings": "AAiBI,mBAAAA,EAWQ,OAAAC,EAYF,QAAAC,MAvBN,oBAjBJ,OAAS,YAAAC,MAAgB,QACzB,OAAS,UAAAC,EAAQ,WAAAC,EAAS,QAAAC,MAAY,wBACtC,OAAS,yBAAAC,MAA6B,wCACtC,OAAS,yBAAAC,MAA6B,yBACtC,OAAS,0BAAAC,MAA8B,mBAQvC,SAASC,EAAS,CAAE,KAAAC,EAAM,QAAAC,CAAQ,EAAU,CAC1C,KAAM,CAAE,QAAAC,CAAQ,EAAIL,EAAsB,EACpC,CAACM,EAAiBC,CAAkB,EAAIZ,EAAS,EAAK,EAE5D,OACED,EAAAF,EAAA,CACE,UAAAC,EAACM,EAAA,CACC,OAAM,GACN,QAASK,EACT,MAAO,OACP,UAAU,sBACV,aAAY,GACZ,mBAAmB,yBAEnB,SAAAV,EAAC,OAAI,UAAU,2BACZ,UAAAS,EAAK,OAAO,KACXV,EAACI,EAAA,CACC,OAAQM,EAAK,MAAM,IACnB,IAAKA,EAAK,MAAM,KAAO,GACvB,UAAU,uBACZ,EAEDA,EAAK,OACJV,EAACK,EAAA,CAAK,UAAU,wBAAwB,KAAMK,EAAK,MAAO,EAE3DA,EAAK,aACJV,EAACK,EAAA,CAAK,UAAU,wCAAwC,KAAMK,EAAK,YAAa,EAElFT,EAAC,OAAI,UAAU,kBACZ,UAAAS,EAAK,WACJV,EAACG,EAAA,CACC,QAAQ,UACR,KAAK,KACL,UAAU,SACV,GAAIO,EAAK,OAAS,IAAM,SACvB,GAAIA,EAAK,OACN,CAAE,KAAMA,EAAK,OAAQ,OAAQ,SAAU,IAAK,qBAAsB,EAClE,CAAC,EAEJ,SAAAA,EAAK,UACR,EAEDA,EAAK,WACJV,EAACG,EAAA,CACC,QAAQ,YACR,KAAK,KACL,UAAU,SACV,QAAS,IAAMW,EAAmB,EAAI,EAErC,SAAAJ,EAAK,UAAU,aAAe,YACjC,GAEJ,GACF,EACF,EAECA,EAAK,WACJV,EAACQ,EAAA,CACC,OAAQK,EACR,QAAS,IAAMC,EAAmB,EAAK,EACvC,KAAMJ,EAAK,UACX,MAAOE,GAAS,MAClB,GAEJ,CAEJ,CAEA,IAAOG,EAAQN",
6
- "names": ["Fragment", "jsx", "jsxs", "useState", "Button", "Picture", "Text", "CreditsModalContainer", "useMemberPopupContext", "ActivitySubscribeModal", "Activity", "copy", "onClose", "profile", "isSubscribeOpen", "setIsSubscribeOpen", "Activity_default"]
7
- }
@@ -1,19 +0,0 @@
1
- import type { RedeemCouponModalCopy, AlpcConfig } from '../../type';
2
- type Props = {
3
- isOpen: boolean;
4
- onClose: () => void;
5
- itemTitle: string;
6
- itemCredits: number;
7
- itemImage?: {
8
- url: string;
9
- alt?: string;
10
- };
11
- redeemId: number;
12
- userId?: string;
13
- copy: RedeemCouponModalCopy;
14
- pointUnit?: string;
15
- alpcConfig: AlpcConfig;
16
- onError?: (code: number) => void;
17
- };
18
- export declare function RedeemCouponModal({ isOpen, onClose, itemTitle, itemCredits, itemImage, redeemId, userId, copy, pointUnit, alpcConfig, onError, }: Props): import("react/jsx-runtime").JSX.Element;
19
- export {};
@@ -1,2 +0,0 @@
1
- import{Fragment as w,jsx as t,jsxs as s}from"react/jsx-runtime";import{useCallback as S,useEffect as A,useState as c}from"react";import{Button as h,Text as l}from"@anker-in/headless-ui";import{classNames as E}from"@anker-in/lib";import{CreditsModalContainer as U}from"../../../credits/modal/ModalContainer";import{AlpcErrorCode as a}from"../../../credits/context/const";import{useRedeemCoupon as _}from"./hooks/useRedeemCoupon";import z from"../../../credits/context/hooks/useCopy";function J({isOpen:m,onClose:x,itemTitle:D,itemCredits:B,itemImage:d,redeemId:u,userId:f,copy:e,pointUnit:R="pts",alpcConfig:M,onError:C}){const[p,b]=c(),[g,n]=c(""),[T,r]=c(!1),{copy:k,copied:N}=z(),{isMutating:y,trigger:v}=_(M),L=S(async()=>{n("");const{data:o}=await v({user_id:f,rule_id:u});if(!o){n(e.commonError);return}if(o.data?.success)b(o.data.coupon_code);else{let i=e.commonError;o.code===a.CodeLpcShopifyCouponRuleRedeemLimit?(i=e.redeemLimitError,r(!0)):o.code===a.CodeLpcRuleInventoryNotEnough?(i=e.inventoryNotEnough,r(!0)):o.code===a.CodeLpcNotEnoughCredits?(i=e.creditsNotEnough,r(!0)):o.code===a.CodeCrossSiteError&&(i=e.crossSiteError,r(!0)),n(i),C?.(o.code)}},[v,f,u,e,C]);return A(()=>{m||(b(void 0),n(""),r(!1))},[m]),s(U,{isOpen:m,onClose:x,className:"w-[540px] md:h-auto",scrollClassName:"mb-[40px] px-0 min-l:px-0 md:mb-[24px]",titleClassName:"h-[56px] bg-[#f5f5f7]",children:[s("div",{className:"bg-[#f5f5f7] px-[48px] pb-[24px] md:px-[16px]",children:[d?.url&&t("div",{className:"relative mx-auto h-[164px] w-[324px]",children:t("img",{src:d.url,alt:d.alt??"",className:"h-full w-full object-cover"})}),s("p",{className:E("mt-[30px] text-center text-[24px] font-bold md:mt-[18px] md:text-[20px]"),children:[B," ",R]})]}),t("div",{className:"bg-white px-[48px] pt-[24px] text-center md:px-[16px]",children:p?s(w,{children:[s("div",{className:"flex items-center justify-center gap-[10px]",children:[t("span",{className:"text-[24px] font-bold",children:p}),t("button",{className:E("text-[16px] font-bold underline",N&&"pointer-events-none"),onClick:()=>k(p),children:N?"Copied":"Copy"})]}),t(l,{className:"mb-[4px] mt-[16px] text-[24px] font-bold md:text-[20px]",html:e.successTitle}),t(l,{className:"text-[16px] font-bold text-[#6d6d6f] md:text-[14px]",html:e.successDesc}),t(h,{variant:"primary",size:"lg",className:"mt-[16px] w-full",onClick:()=>{e.successButtonUrl&&(window.location.href=e.successButtonUrl),x()},children:e.successButton})]}):s(w,{children:[t(l,{className:"block text-[24px] font-bold md:text-[20px]",html:e.confirmTitle}),t(h,{loading:y,variant:"primary",size:"lg",className:"mt-[16px] w-full",onClick:L,disabled:T,children:e.confirmButton})]})}),g&&t("div",{className:"bg-white px-[48px] py-[12px] text-center md:px-[16px]",children:t(l,{className:"text-[14px] font-semibold text-[#ff0000]",html:g})})]})}export{J as RedeemCouponModal};
2
- //# sourceMappingURL=RedeemCouponModal.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../../src/components/memberPopup/panels/ConsumeCredits/RedeemCouponModal.tsx"],
4
- "sourcesContent": ["import { useCallback, useEffect, useState } from 'react'\nimport { Button, Text } from '@anker-in/headless-ui'\nimport { classNames as cn } from '@anker-in/lib'\nimport { CreditsModalContainer } from '../../../credits/modal/ModalContainer'\nimport { AlpcErrorCode } from '../../../credits/context/const'\nimport { useRedeemCoupon } from './hooks/useRedeemCoupon'\nimport useCopy from '../../../credits/context/hooks/useCopy'\nimport type { RedeemCouponModalCopy, AlpcConfig } from '../../type'\n\ntype Props = {\n isOpen: boolean\n onClose: () => void\n itemTitle: string\n itemCredits: number\n itemImage?: { url: string; alt?: string }\n redeemId: number\n userId?: string\n copy: RedeemCouponModalCopy\n pointUnit?: string\n alpcConfig: AlpcConfig\n onError?: (code: number) => void\n}\n\nexport function RedeemCouponModal({\n isOpen,\n onClose,\n itemTitle,\n itemCredits,\n itemImage,\n redeemId,\n userId,\n copy,\n pointUnit = 'pts',\n alpcConfig,\n onError,\n}: Props) {\n const [couponCode, setCouponCode] = useState<string>()\n const [errorInfo, setErrorInfo] = useState('')\n const [disabled, setDisabled] = useState(false)\n const { copy: copyText, copied } = useCopy()\n\n const { isMutating: loading, trigger } = useRedeemCoupon(alpcConfig)\n\n const handleConfirm = useCallback(async () => {\n setErrorInfo('')\n const { data } = await trigger({ user_id: userId, rule_id: redeemId })\n if (!data) {\n setErrorInfo(copy.commonError)\n return\n }\n if (data.data?.success) {\n setCouponCode(data.data.coupon_code)\n } else {\n let msg = copy.commonError\n if (data.code === AlpcErrorCode.CodeLpcShopifyCouponRuleRedeemLimit) {\n msg = copy.redeemLimitError\n setDisabled(true)\n } else if (data.code === AlpcErrorCode.CodeLpcRuleInventoryNotEnough) {\n msg = copy.inventoryNotEnough\n setDisabled(true)\n } else if (data.code === AlpcErrorCode.CodeLpcNotEnoughCredits) {\n msg = copy.creditsNotEnough\n setDisabled(true)\n } else if (data.code === AlpcErrorCode.CodeCrossSiteError) {\n msg = copy.crossSiteError\n setDisabled(true)\n }\n setErrorInfo(msg)\n onError?.(data.code)\n }\n }, [trigger, userId, redeemId, copy, onError])\n\n useEffect(() => {\n if (!isOpen) {\n setCouponCode(undefined)\n setErrorInfo('')\n setDisabled(false)\n }\n }, [isOpen])\n\n return (\n <CreditsModalContainer\n isOpen={isOpen}\n onClose={onClose}\n className=\"w-[540px] md:h-auto\"\n scrollClassName=\"mb-[40px] px-0 min-l:px-0 md:mb-[24px]\"\n titleClassName=\"h-[56px] bg-[#f5f5f7]\"\n >\n <div className=\"bg-[#f5f5f7] px-[48px] pb-[24px] md:px-[16px]\">\n {itemImage?.url && (\n <div className=\"relative mx-auto h-[164px] w-[324px]\">\n <img src={itemImage.url} alt={itemImage.alt ?? ''} className=\"h-full w-full object-cover\" />\n </div>\n )}\n <p className={cn('mt-[30px] text-center text-[24px] font-bold md:mt-[18px] md:text-[20px]')}>\n {itemCredits} {pointUnit}\n </p>\n </div>\n\n <div className=\"bg-white px-[48px] pt-[24px] text-center md:px-[16px]\">\n {!couponCode ? (\n <>\n <Text className=\"block text-[24px] font-bold md:text-[20px]\" html={copy.confirmTitle} />\n <Button\n loading={loading}\n variant=\"primary\"\n size=\"lg\"\n className=\"mt-[16px] w-full\"\n onClick={handleConfirm}\n disabled={disabled}\n >\n {copy.confirmButton}\n </Button>\n </>\n ) : (\n <>\n <div className=\"flex items-center justify-center gap-[10px]\">\n <span className=\"text-[24px] font-bold\">{couponCode}</span>\n <button\n className={cn('text-[16px] font-bold underline', copied && 'pointer-events-none')}\n onClick={() => copyText(couponCode)}\n >\n {copied ? 'Copied' : 'Copy'}\n </button>\n </div>\n <Text className=\"mb-[4px] mt-[16px] text-[24px] font-bold md:text-[20px]\" html={copy.successTitle} />\n <Text className=\"text-[16px] font-bold text-[#6d6d6f] md:text-[14px]\" html={copy.successDesc} />\n <Button\n variant=\"primary\"\n size=\"lg\"\n className=\"mt-[16px] w-full\"\n onClick={() => {\n if (copy.successButtonUrl) window.location.href = copy.successButtonUrl\n onClose()\n }}\n >\n {copy.successButton}\n </Button>\n </>\n )}\n </div>\n\n {errorInfo && (\n <div className=\"bg-white px-[48px] py-[12px] text-center md:px-[16px]\">\n <Text className=\"text-[14px] font-semibold text-[#ff0000]\" html={errorInfo} />\n </div>\n )}\n </CreditsModalContainer>\n )\n}\n"],
5
- "mappings": "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",
6
- "names": ["Fragment", "jsx", "jsxs", "useCallback", "useEffect", "useState", "Button", "Text", "cn", "CreditsModalContainer", "AlpcErrorCode", "useRedeemCoupon", "useCopy", "RedeemCouponModal", "isOpen", "onClose", "itemTitle", "itemCredits", "itemImage", "redeemId", "userId", "copy", "pointUnit", "alpcConfig", "onError", "couponCode", "setCouponCode", "errorInfo", "setErrorInfo", "disabled", "setDisabled", "copyText", "copied", "loading", "trigger", "handleConfirm", "data", "msg"]
7
- }
@@ -1,20 +0,0 @@
1
- import type { RedeemCouponModalCopy, AlpcConfig } from '../../type';
2
- type Props = {
3
- onClose: () => void;
4
- itemTitle: string;
5
- itemCredits: number;
6
- itemImage?: {
7
- url: string;
8
- alt?: string;
9
- };
10
- itemValue?: string;
11
- itemOff?: string;
12
- redeemId: number;
13
- userId?: string;
14
- copy: RedeemCouponModalCopy;
15
- pointUnit?: string;
16
- alpcConfig: AlpcConfig;
17
- onError?: (code: number) => void;
18
- };
19
- export default function RedeemCouponPanel({ onClose, itemTitle, itemCredits, itemImage, itemValue, itemOff, redeemId, userId, copy, pointUnit, alpcConfig, onError, }: Props): import("react/jsx-runtime").JSX.Element;
20
- export {};
@@ -1,2 +0,0 @@
1
- import{jsx as t,jsxs as n}from"react/jsx-runtime";import{useCallback as U,useEffect as _,useState as f}from"react";import{Text as l,Button as w}from"@anker-in/headless-ui";import{useHeadlessContext as M,classNames as m}from"@anker-in/lib";import{AlpcErrorCode as d}from"../../../credits/context/const";import{useRedeemCoupon as P}from"./hooks/useRedeemCoupon";import j from"../../../credits/context/hooks/useCopy";import{ROUNDED_BRANDS as H}from"../../../../constants";function I({onClose:R,itemTitle:O,itemCredits:B,itemImage:a,itemValue:x,itemOff:C,redeemId:c,userId:g,copy:e,pointUnit:T="pts",alpcConfig:k,onError:N}){const[u,b]=f(),[v,i]=f(""),[y,s]=f(!1),{copy:D,copied:h}=j(),{brand:L}=M(),p=H.includes(L),{isMutating:S,trigger:E}=P(k),A=U(async()=>{i("");const{data:o}=await E({user_id:g,rule_id:c});if(!o){i(e.commonError);return}if(o.data?.success)b(o.data.coupon_code);else{let r=e.commonError;o.code===d.CodeLpcShopifyCouponRuleRedeemLimit?(r=e.redeemLimitError,s(!0)):o.code===d.CodeLpcRuleInventoryNotEnough?(r=e.inventoryNotEnough,s(!0)):o.code===d.CodeLpcNotEnoughCredits?(r=e.creditsNotEnough,s(!0)):o.code===d.CodeCrossSiteError&&(r=e.crossSiteError,s(!0)),i(r),N?.(o.code)}},[E,g,c,e,N]);return _(()=>{b(void 0),i(""),s(!1)},[c]),n("div",{className:"flex flex-col gap-[16px]",children:[a?.url&&n("div",{className:m("relative overflow-hidden w-fit mx-auto",p?"rounded-[8px]":"rounded-none"),children:[t("img",{src:a.url,alt:a.alt??"",className:"mx-auto h-[140px] object-contain"}),x&&n("div",{className:"absolute bottom-[20px] left-[20px] text-[32px] font-[800] leading-none text-white",children:[x,C?` ${C}`:""]})]}),n("p",{className:"text-center text-[24px] font-[700] text-[#1d1d1f]",children:[B," ",T]}),u?n("div",{className:"flex flex-col gap-[12px] text-center",children:[n("div",{className:"flex items-center justify-center gap-[10px]",children:[t("span",{className:"text-[24px] font-[700]",children:u}),t("button",{className:"cursor-pointer text-[14px] font-[700] underline disabled:pointer-events-none",disabled:h,onClick:()=>D(u),children:h?"Copied":"Copy"})]}),t(l,{className:"text-[20px] font-[700]",html:e.successTitle}),t(l,{className:"text-[14px] font-[700] text-[#6d6d6f]",html:e.successDesc}),t(w,{className:m("w-full py-[12px] text-[14px] font-[700] text-white bg-[#080a0f]",p?"rounded-[4px]":"rounded-none"),onClick:()=>{e.successButtonUrl&&(window.location.href=e.successButtonUrl),R()},children:e.successButton})]}):n("div",{className:"flex flex-col gap-[12px] text-center",children:[t(l,{className:"block text-[20px] font-[700]",html:e.confirmTitle}),t(w,{className:m("w-full py-[12px] text-[14px] font-[700] text-white disabled:opacity-60 bg-[#080a0f]",p?"rounded-[4px]":"rounded-none"),disabled:y,loading:S,onClick:A,children:e.confirmButton})]}),v&&t(l,{className:"text-center text-[14px] font-[700] text-[#ff0000]",html:v})]})}export{I as default};
2
- //# sourceMappingURL=RedeemCouponPanel.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../../src/components/memberPopup/panels/ConsumeCredits/RedeemCouponPanel.tsx"],
4
- "sourcesContent": ["import { useCallback, useEffect, useState } from 'react'\nimport { Text, Button } from '@anker-in/headless-ui'\nimport { useHeadlessContext, classNames as cn } from '@anker-in/lib'\nimport { AlpcErrorCode } from '../../../credits/context/const'\nimport { useRedeemCoupon } from './hooks/useRedeemCoupon'\nimport useCopy from '../../../credits/context/hooks/useCopy'\nimport type { RedeemCouponModalCopy, AlpcConfig } from '../../type'\nimport { ROUNDED_BRANDS } from '../../../../constants'\n\ntype Props = {\n onClose: () => void\n itemTitle: string\n itemCredits: number\n itemImage?: { url: string; alt?: string }\n itemValue?: string\n itemOff?: string\n redeemId: number\n userId?: string\n copy: RedeemCouponModalCopy\n pointUnit?: string\n alpcConfig: AlpcConfig\n onError?: (code: number) => void\n}\n\nexport default function RedeemCouponPanel({\n onClose,\n itemTitle,\n itemCredits,\n itemImage,\n itemValue,\n itemOff,\n redeemId,\n userId,\n copy,\n pointUnit = 'pts',\n alpcConfig,\n onError,\n}: Props) {\n const [couponCode, setCouponCode] = useState<string>()\n const [errorInfo, setErrorInfo] = useState('')\n const [disabled, setDisabled] = useState(false)\n const { copy: copyText, copied } = useCopy()\n const { brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n const { isMutating: loading, trigger } = useRedeemCoupon(alpcConfig)\n\n const handleConfirm = useCallback(async () => {\n setErrorInfo('')\n const { data } = await trigger({ user_id: userId, rule_id: redeemId })\n if (!data) {\n setErrorInfo(copy.commonError)\n return\n }\n if (data.data?.success) {\n setCouponCode(data.data.coupon_code)\n } else {\n let msg = copy.commonError\n if (data.code === AlpcErrorCode.CodeLpcShopifyCouponRuleRedeemLimit) {\n msg = copy.redeemLimitError\n setDisabled(true)\n } else if (data.code === AlpcErrorCode.CodeLpcRuleInventoryNotEnough) {\n msg = copy.inventoryNotEnough\n setDisabled(true)\n } else if (data.code === AlpcErrorCode.CodeLpcNotEnoughCredits) {\n msg = copy.creditsNotEnough\n setDisabled(true)\n } else if (data.code === AlpcErrorCode.CodeCrossSiteError) {\n msg = copy.crossSiteError\n setDisabled(true)\n }\n setErrorInfo(msg)\n onError?.(data.code)\n }\n }, [trigger, userId, redeemId, copy, onError])\n\n useEffect(() => {\n setCouponCode(undefined)\n setErrorInfo('')\n setDisabled(false)\n }, [redeemId])\n\n return (\n <div className=\"flex flex-col gap-[16px]\">\n {itemImage?.url && (\n <div className={cn('relative overflow-hidden w-fit mx-auto', rounded ? 'rounded-[8px]' : 'rounded-none')}>\n <img src={itemImage.url} alt={itemImage.alt ?? ''} className=\"mx-auto h-[140px] object-contain\" />\n {itemValue && (\n <div className=\"absolute bottom-[20px] left-[20px] text-[32px] font-[800] leading-none text-white\">\n {itemValue}\n {itemOff ? ` ${itemOff}` : ''}\n </div>\n )}\n </div>\n )}\n\n <p className=\"text-center text-[24px] font-[700] text-[#1d1d1f]\">\n {itemCredits} {pointUnit}\n </p>\n\n {!couponCode ? (\n <div className=\"flex flex-col gap-[12px] text-center\">\n <Text className=\"block text-[20px] font-[700]\" html={copy.confirmTitle} />\n <Button\n className={cn('w-full py-[12px] text-[14px] font-[700] text-white disabled:opacity-60 bg-[#080a0f]', rounded ? 'rounded-[4px]' : 'rounded-none')}\n disabled={disabled}\n loading={loading}\n onClick={handleConfirm}\n >\n {copy.confirmButton}\n </Button>\n </div>\n ) : (\n <div className=\"flex flex-col gap-[12px] text-center\">\n <div className=\"flex items-center justify-center gap-[10px]\">\n <span className=\"text-[24px] font-[700]\">{couponCode}</span>\n <button\n className=\"cursor-pointer text-[14px] font-[700] underline disabled:pointer-events-none\"\n disabled={copied}\n onClick={() => copyText(couponCode)}\n >\n {copied ? 'Copied' : 'Copy'}\n </button>\n </div>\n <Text className=\"text-[20px] font-[700]\" html={copy.successTitle} />\n <Text className=\"text-[14px] font-[700] text-[#6d6d6f]\" html={copy.successDesc} />\n <Button\n className={cn('w-full py-[12px] text-[14px] font-[700] text-white bg-[#080a0f]', rounded ? 'rounded-[4px]' : 'rounded-none')}\n onClick={() => {\n if (copy.successButtonUrl) window.location.href = copy.successButtonUrl\n onClose()\n }}\n >\n {copy.successButton}\n </Button>\n </div>\n )}\n\n {errorInfo && <Text className=\"text-center text-[14px] font-[700] text-[#ff0000]\" html={errorInfo} />}\n </div>\n )\n}\n"],
5
- "mappings": "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",
6
- "names": ["jsx", "jsxs", "useCallback", "useEffect", "useState", "Text", "Button", "useHeadlessContext", "cn", "AlpcErrorCode", "useRedeemCoupon", "useCopy", "ROUNDED_BRANDS", "RedeemCouponPanel", "onClose", "itemTitle", "itemCredits", "itemImage", "itemValue", "itemOff", "redeemId", "userId", "copy", "pointUnit", "alpcConfig", "onError", "couponCode", "setCouponCode", "errorInfo", "setErrorInfo", "disabled", "setDisabled", "copyText", "copied", "brand", "rounded", "loading", "trigger", "handleConfirm", "data", "msg"]
7
- }
@@ -1,12 +0,0 @@
1
- import type { AlpcConfig } from '../../../type';
2
- import type { ProductVariant } from '@anker-in/lib';
3
- type RedeemAndBuyArg = {
4
- productVariant: ProductVariant;
5
- quantity?: number;
6
- redeemId: number;
7
- userId?: string;
8
- };
9
- export declare function useRedeemAndBuy(config: AlpcConfig): {
10
- trigger: (arg: RedeemAndBuyArg) => Promise<void>;
11
- };
12
- export {};
@@ -1,2 +0,0 @@
1
- import{useBuyNow as i}from"@anker-in/lib";import{useRedeemCoupon as d}from"./useRedeemCoupon";function c(t){const{trigger:o}=d(t),{trigger:n}=i({},{throwOnError:!0});return{trigger:async e=>{const{data:r}=await o({user_id:e.userId,rule_id:e.redeemId});if(r?.data?.coupon_code)await n({discountCodes:[r.data.coupon_code],lineItems:[{variant:e.productVariant,quantity:e.quantity??1}]});else throw new Error(r?.msg??"Redeem failed")}}}export{c as useRedeemAndBuy};
2
- //# sourceMappingURL=useRedeemAndBuy.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../../../src/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemAndBuy.ts"],
4
- "sourcesContent": ["import { useBuyNow } from '@anker-in/lib'\nimport { useRedeemCoupon } from './useRedeemCoupon'\nimport type { AlpcConfig } from '../../../type'\nimport type { ProductVariant } from '@anker-in/lib'\n\ntype RedeemAndBuyArg = {\n productVariant: ProductVariant\n quantity?: number\n redeemId: number\n userId?: string\n}\n\nexport function useRedeemAndBuy(config: AlpcConfig) {\n const { trigger: redeemTrigger } = useRedeemCoupon(config)\n const { trigger: buyNow } = useBuyNow({}, { throwOnError: true })\n\n const trigger = async (arg: RedeemAndBuyArg) => {\n const { data } = await redeemTrigger({\n user_id: arg.userId,\n rule_id: arg.redeemId,\n })\n if (data?.data?.coupon_code) {\n await buyNow({\n discountCodes: [data.data.coupon_code],\n lineItems: [{ variant: arg.productVariant, quantity: arg.quantity ?? 1 }],\n })\n } else {\n throw new Error(data?.msg ?? 'Redeem failed')\n }\n }\n\n return { trigger }\n}\n"],
5
- "mappings": "AAAA,OAAS,aAAAA,MAAiB,gBAC1B,OAAS,mBAAAC,MAAuB,oBAWzB,SAASC,EAAgBC,EAAoB,CAClD,KAAM,CAAE,QAASC,CAAc,EAAIH,EAAgBE,CAAM,EACnD,CAAE,QAASE,CAAO,EAAIL,EAAU,CAAC,EAAG,CAAE,aAAc,EAAK,CAAC,EAiBhE,MAAO,CAAE,QAfO,MAAOM,GAAyB,CAC9C,KAAM,CAAE,KAAAC,CAAK,EAAI,MAAMH,EAAc,CACnC,QAASE,EAAI,OACb,QAASA,EAAI,QACf,CAAC,EACD,GAAIC,GAAM,MAAM,YACd,MAAMF,EAAO,CACX,cAAe,CAACE,EAAK,KAAK,WAAW,EACrC,UAAW,CAAC,CAAE,QAASD,EAAI,eAAgB,SAAUA,EAAI,UAAY,CAAE,CAAC,CAC1E,CAAC,MAED,OAAM,IAAI,MAAMC,GAAM,KAAO,eAAe,CAEhD,CAEiB,CACnB",
6
- "names": ["useBuyNow", "useRedeemCoupon", "useRedeemAndBuy", "config", "redeemTrigger", "buyNow", "arg", "data"]
7
- }
@@ -1,17 +0,0 @@
1
- import type { AlpcConfig } from '../../../type';
2
- type RedeemCouponResponse = {
3
- data: {
4
- data: {
5
- success: boolean;
6
- coupon_code: string;
7
- };
8
- msg: string;
9
- code: number;
10
- };
11
- };
12
- type RedeemCouponParams = {
13
- user_id?: string;
14
- rule_id: number;
15
- };
16
- export declare function useRedeemCoupon(config: AlpcConfig): import("swr/mutation").SWRMutationResponse<RedeemCouponResponse, Error, string, RedeemCouponParams>;
17
- export {};
@@ -1,2 +0,0 @@
1
- import a from"swr/mutation";import{getAlpcPath as i}from"../../../../credits/context/utils";import{ALPC_COUNTRY_MAP as m}from"../../../../credits/context/const";function l(o){const{brand:n,locale:e,appName:r,apiBaseUrl:t}=o;return a("/v1/credit/redeem/coupon",async(p,{arg:s})=>(await fetch(i(e,t)+p,{method:"POST",headers:{"Content-Type":"application/json","current-language":e},body:JSON.stringify({brand:n,country:m.get(e)||e,app_name:r,...s})})).json())}export{l as useRedeemCoupon};
2
- //# sourceMappingURL=useRedeemCoupon.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../../../src/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemCoupon.ts"],
4
- "sourcesContent": ["import useSWRMutation from 'swr/mutation'\nimport { getAlpcPath } from '../../../../credits/context/utils'\nimport { ALPC_COUNTRY_MAP } from '../../../../credits/context/const'\nimport type { AlpcConfig } from '../../../type'\n\ntype RedeemCouponResponse = {\n data: {\n data: { success: boolean; coupon_code: string }\n msg: string\n code: number\n }\n}\n\ntype RedeemCouponParams = {\n user_id?: string\n rule_id: number\n}\n\nexport function useRedeemCoupon(config: AlpcConfig) {\n const { brand, locale, appName, apiBaseUrl } = config\n\n return useSWRMutation<RedeemCouponResponse, Error, string, RedeemCouponParams>(\n `/v1/credit/redeem/coupon`,\n async (url: string, { arg }) => {\n const response = await fetch(getAlpcPath(locale, apiBaseUrl) + url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', 'current-language': locale },\n body: JSON.stringify({\n brand,\n country: ALPC_COUNTRY_MAP.get(locale) || locale,\n app_name: appName,\n ...arg,\n }),\n })\n return response.json()\n }\n )\n}\n"],
5
- "mappings": "AAAA,OAAOA,MAAoB,eAC3B,OAAS,eAAAC,MAAmB,oCAC5B,OAAS,oBAAAC,MAAwB,oCAgB1B,SAASC,EAAgBC,EAAoB,CAClD,KAAM,CAAE,MAAAC,EAAO,OAAAC,EAAQ,QAAAC,EAAS,WAAAC,CAAW,EAAIJ,EAE/C,OAAOJ,EACL,2BACA,MAAOS,EAAa,CAAE,IAAAC,CAAI,KACP,MAAM,MAAMT,EAAYK,EAAQE,CAAU,EAAIC,EAAK,CAClE,OAAQ,OACR,QAAS,CAAE,eAAgB,mBAAoB,mBAAoBH,CAAO,EAC1E,KAAM,KAAK,UAAU,CACnB,MAAAD,EACA,QAASH,EAAiB,IAAII,CAAM,GAAKA,EACzC,SAAUC,EACV,GAAGG,CACL,CAAC,CACH,CAAC,GACe,KAAK,CAEzB,CACF",
6
- "names": ["useSWRMutation", "getAlpcPath", "ALPC_COUNTRY_MAP", "useRedeemCoupon", "config", "brand", "locale", "appName", "apiBaseUrl", "url", "arg"]
7
- }
@@ -1,8 +0,0 @@
1
- import { AlpcConsumeType } from '../../../../credits/context/const';
2
- import type { ConsumeCreditRuleResponse } from '../../../../credits/context/response';
3
- import type { AlpcConfig } from '../../../type';
4
- export declare function useRedeemableList(config: AlpcConfig): {
5
- redeemableList: ConsumeCreditRuleResponse[];
6
- listLoading: boolean;
7
- getRedeemableList: (consumeType?: AlpcConsumeType) => void;
8
- };
@@ -1,2 +0,0 @@
1
- import{useCallback as d,useEffect as g,useState as f}from"react";import C from"swr/mutation";import{getAlpcPath as y}from"../../../../credits/context/utils";import{ALPC_COUNTRY_MAP as R}from"../../../../credits/context/const";function P(p){const{brand:t,locale:n,appName:i,apiBaseUrl:c}=p;let e=n;n==="pl"&&(e="eu");const[u,l]=f([]),{isMutating:m,trigger:a}=C("/v1/credit/consume_credit_rules",async(o,{arg:s})=>(await fetch(y(e,c)+o,{method:"POST",headers:{"Content-Type":"application/json","current-language":e},body:JSON.stringify(s)})).json()),r=d(o=>{a({brand:t,page:1,page_size:999,country:(R.get(e)||e)?.toUpperCase(),app_name:i,...o!==void 0&&{consume_type:o}},{onSuccess({data:s}){l(s?.data?.consume_credit_rules??[])}})},[t,e,i,a]);return g(()=>{t&&r()},[t,r]),{redeemableList:u,listLoading:m,getRedeemableList:r}}export{P as useRedeemableList};
2
- //# sourceMappingURL=useRedeemableList.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../../../src/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemableList.ts"],
4
- "sourcesContent": ["import { useCallback, useEffect, useState } from 'react'\nimport useSWRMutation from 'swr/mutation'\nimport { getAlpcPath, languageTerritory } from '../../../../credits/context/utils'\nimport { ALPC_COUNTRY_MAP, AlpcConsumeType } from '../../../../credits/context/const'\nimport type { ConsumeCreditRuleResponse } from '../../../../credits/context/response'\nimport type { AlpcConfig } from '../../../type'\n\nexport function useRedeemableList(config: AlpcConfig) {\n const { brand, locale, appName, apiBaseUrl } = config\n\n let resolvedLocale = locale\n if (locale === 'pl') resolvedLocale = 'eu'\n\n const [redeemableList, setRedeemableList] = useState<ConsumeCreditRuleResponse[]>([])\n\n const { isMutating: listLoading, trigger } = useSWRMutation(\n `/v1/credit/consume_credit_rules`,\n async (url: string, { arg }: { arg: Record<string, any> }) => {\n const response = await fetch(getAlpcPath(resolvedLocale, apiBaseUrl) + url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', 'current-language': resolvedLocale },\n body: JSON.stringify(arg),\n })\n return response.json()\n }\n )\n\n const getRedeemableList = useCallback(\n (consumeType?: AlpcConsumeType) => {\n trigger(\n {\n brand,\n page: 1,\n page_size: 999,\n country: (ALPC_COUNTRY_MAP.get(resolvedLocale) || resolvedLocale)?.toUpperCase(),\n app_name: appName,\n ...(consumeType !== undefined && { consume_type: consumeType }),\n },\n {\n onSuccess({ data }) {\n setRedeemableList(data?.data?.consume_credit_rules ?? [])\n },\n }\n )\n },\n [brand, resolvedLocale, appName, trigger]\n )\n\n useEffect(() => {\n if (!brand) return\n getRedeemableList()\n }, [brand, getRedeemableList])\n\n return { redeemableList, listLoading, getRedeemableList }\n}\n"],
5
- "mappings": "AAAA,OAAS,eAAAA,EAAa,aAAAC,EAAW,YAAAC,MAAgB,QACjD,OAAOC,MAAoB,eAC3B,OAAS,eAAAC,MAAsC,oCAC/C,OAAS,oBAAAC,MAAyC,oCAI3C,SAASC,EAAkBC,EAAoB,CACpD,KAAM,CAAE,MAAAC,EAAO,OAAAC,EAAQ,QAAAC,EAAS,WAAAC,CAAW,EAAIJ,EAE/C,IAAIK,EAAiBH,EACjBA,IAAW,OAAMG,EAAiB,MAEtC,KAAM,CAACC,EAAgBC,CAAiB,EAAIZ,EAAsC,CAAC,CAAC,EAE9E,CAAE,WAAYa,EAAa,QAAAC,CAAQ,EAAIb,EAC3C,kCACA,MAAOc,EAAa,CAAE,IAAAC,CAAI,KACP,MAAM,MAAMd,EAAYQ,EAAgBD,CAAU,EAAIM,EAAK,CAC1E,OAAQ,OACR,QAAS,CAAE,eAAgB,mBAAoB,mBAAoBL,CAAe,EAClF,KAAM,KAAK,UAAUM,CAAG,CAC1B,CAAC,GACe,KAAK,CAEzB,EAEMC,EAAoBnB,EACvBoB,GAAkC,CACjCJ,EACE,CACE,MAAAR,EACA,KAAM,EACN,UAAW,IACX,SAAUH,EAAiB,IAAIO,CAAc,GAAKA,IAAiB,YAAY,EAC/E,SAAUF,EACV,GAAIU,IAAgB,QAAa,CAAE,aAAcA,CAAY,CAC/D,EACA,CACE,UAAU,CAAE,KAAAC,CAAK,EAAG,CAClBP,EAAkBO,GAAM,MAAM,sBAAwB,CAAC,CAAC,CAC1D,CACF,CACF,CACF,EACA,CAACb,EAAOI,EAAgBF,EAASM,CAAO,CAC1C,EAEA,OAAAf,EAAU,IAAM,CACTO,GACLW,EAAkB,CACpB,EAAG,CAACX,EAAOW,CAAiB,CAAC,EAEtB,CAAE,eAAAN,EAAgB,YAAAE,EAAa,kBAAAI,CAAkB,CAC1D",
6
- "names": ["useCallback", "useEffect", "useState", "useSWRMutation", "getAlpcPath", "ALPC_COUNTRY_MAP", "useRedeemableList", "config", "brand", "locale", "appName", "apiBaseUrl", "resolvedLocale", "redeemableList", "setRedeemableList", "listLoading", "trigger", "url", "arg", "getRedeemableList", "consumeType", "data"]
7
- }
@@ -1,7 +0,0 @@
1
- import { type ConsumeCreditsopy } from '../../type';
2
- type Props = {
3
- copy: ConsumeCreditsopy;
4
- onClose: () => void;
5
- };
6
- declare function ConsumeCredits({ copy, onClose }: Props): import("react/jsx-runtime").JSX.Element;
7
- export default ConsumeCredits;
@@ -1,2 +0,0 @@
1
- import{Fragment as K,jsx as n,jsxs as r}from"react/jsx-runtime";import{useMemo as L,useState as I}from"react";import{Picture as S,Button as $}from"@anker-in/headless-ui";import{classNames as R,useProductsByHandles as z,useHeadlessContext as F}from"@anker-in/lib";import{useMemberPopupContext as T}from"../../context/provider";import{useViewStack as V}from"../../context/viewStack";import{useRedeemableList as j}from"./hooks/useRedeemableList";import{useRedeemAndBuy as H}from"./hooks/useRedeemAndBuy";import{ConsumeCreditsItemType as o,MemberPopupPanelType as G}from"../../type";import{numberFormat as v}from"../../../credits/context/utils";import{ROUNDED_BRANDS as q}from"../../../../constants";function J({copy:t,onClose:Q}){const{profile:d,creditInfo:u,openSignUpPopup:B,alpcConfig:c}=T(),{pushView:D}=V(),{brand:_}=F(),g=q.includes(_),[b,N]=I(""),[P,C]=I(null),p=!!d,{redeemableList:y,listLoading:w}=j(c),{trigger:A}=H(c),k=t.list.map(e=>e.product?.handle).filter(Boolean),{data:h}=z({handles:k}),M=L(()=>t.list.map(e=>{const a=y.find(l=>String(l.id)===String(e.redeemId));if(!a)return null;const i=Number(u?.available_credit??0),f=p&&!!d?.activated&&a.consume_credits>i,m=a.is_limited&&(!a.remaining_inventory||a.remaining_inventory<=0);let s,x;return e.type===o.RedeemAndBuy&&e.product&&(s=h?.find(l=>l.handle===e.product.handle),x=s?.variants?.find(l=>l.sku===e.product.sku)??s?.variants?.[0],!s||!x)?null:{...e,alpcData:a,insufficient:f,soldOut:m,product:s,variant:x}}).filter(Boolean),[t.list,y,u,d,p,h]);function O(e){return p?e.soldOut?t.soldOut:t.btnRedeem:t.unlockRewards}function U(e){return e.soldOut||e.insufficient}async function E(e){if(!p){B();return}if(e.type===o.Coupon)D({type:G.RedeemCoupon,props:{itemTitle:e.title,itemCredits:e.alpcData.consume_credits,itemImage:t.imageMapping?.[e.type]?{url:t.imageMapping[e.type].url,alt:e.image?.alt}:e.image,itemValue:e.value,itemOff:t.off,redeemId:Number(e.redeemId),userId:d?.user_id,alpcConfig:c}});else{N(""),C(e.redeemId);try{await A({productVariant:e.variant,redeemId:Number(e.redeemId),userId:d?.user_id})}catch(a){N(a?.message??t.redeemModal.commonError)}finally{C(null)}}}return n(K,{children:r("div",{className:"flex flex-1 flex-col gap-[12px]",children:[r("div",{className:"flex flex-col gap-[8px]",children:[t.title&&n("h2",{className:"text-[24px] font-[700] leading-[1.2] text-[#080a0f]",children:t.title}),t.subtitle&&n("p",{className:"text-[16px] font-[700] leading-snug text-[#4a4c56]",children:t.subtitle})]}),t.insufficientCredits&&u&&r("div",{className:"text-[14px] font-[700] text-[#1d1d1f]",children:[t.insufficientCredits,": ",v(u.available_credit)," ",t.pointUnit]}),b&&n("div",{className:"text-[14px] font-[700] text-[#f84d4f]",children:b}),w?n("div",{className:"flex flex-1 items-center justify-center py-[32px]",children:n("div",{className:"size-[32px] animate-spin rounded-full border-[3px] border-[#080a0f] border-t-transparent"})}):n("div",{className:"flex flex-col",children:M.map((e,a)=>r("div",{className:"relative py-[16px]",children:[a>0&&n("div",{className:"absolute inset-x-0 top-0 h-px bg-[#dadce0]"}),r("div",{className:"flex items-center gap-[12px]",children:[(()=>{const i=e.type===o.RedeemAndBuy,f=t.imageMapping?.[e.type]?.url,m=i?e.variant?.image?.url??e.product?.images?.[0]?.url??e.image?.url:f??e.image?.url,s=i?e.variant?.image?.altText??e.product?.images?.[0]?.alt??e.image?.alt??"":e.image?.alt??"";return m?r("div",{className:R("relative size-[64px] shrink-0 overflow-hidden",g?"rounded-[4px]":"rounded-none"),children:[n(S,{source:m,alt:s,className:"flex size-full items-center justify-center",imgClassName:i?"object-cover":"h-full w-auto object-contain"}),!i&&e.value&&r("div",{className:"absolute bottom-[20px] left-[4px] text-[14px] font-[800] leading-none text-white",children:[e.value," ",t.off]})]}):null})(),r("div",{className:"min-w-0 flex-1",children:[n("div",{className:"text-[16px] font-[700] text-[#1e2024] line-clamp-2",children:e.type===o.RedeemAndBuy&&e.product?.title?e.product.title:e.title}),n("div",{className:"mt-[4px] text-[14px] text-[#666]",children:e.type===o.RedeemAndBuy&&e.price!=null?`${v(e.alpcData.consume_credits)} ${t.pointUnit??""} + $${Number(e.price).toFixed(2)}`:`${v(e.alpcData.consume_credits)} ${t.pointUnit??""}`})]}),r("div",{className:"relative group",children:[n($,{className:R("bg-[#080a0f] px-[20px] pb-[10px] pt-[11px] text-[14px] font-[700] leading-[1.2] text-white",g?"rounded-[4px]":"rounded-none"),disabled:U(e),loading:P===e.redeemId,onClick:()=>E(e),children:O(e)}),e.insufficient&&n("div",{className:"pointer-events-none absolute left-[48px] top-full mt-[10px] hidden -translate-x-1/2 group-hover:block",children:r("div",{className:"relative bg-[#6D6D6F] p-[16px] text-[14px] font-[700] text-white shadow md:px-[10px] md:py-[8px]",children:[n("p",{className:"text-pretty tracking-[-0.02em] text-[14px]",children:t.insufficientCredits}),n("div",{className:"absolute -top-[8px] left-[48px] size-[16px] origin-top-left rotate-45 rounded-[2px] bg-[#6D6D6F]"})]})})]})]})]},a))}),t.creditsPage?.url&&n("a",{href:t.creditsPage.url,target:"_blank",rel:"noopener noreferrer",className:"mt-auto self-start text-[14px] font-[700] text-[#080a0f] underline",children:t.creditsPage.label??"Go to Credits Page"})]})})}var ie=J;export{ie as default};
2
- //# sourceMappingURL=index.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../../src/components/memberPopup/panels/ConsumeCredits/index.tsx"],
4
- "sourcesContent": ["import { useMemo, useState } from 'react'\nimport { Picture, Button } from '@anker-in/headless-ui'\nimport { classNames as cn, useProductsByHandles, useHeadlessContext } from '@anker-in/lib'\nimport { useMemberPopupContext } from '../../context/provider'\nimport { useViewStack } from '../../context/viewStack'\nimport { useRedeemableList } from './hooks/useRedeemableList'\nimport { useRedeemAndBuy } from './hooks/useRedeemAndBuy'\nimport {\n ConsumeCreditsItemType,\n MemberPopupPanelType,\n type ConsumeCreditsopy,\n type ConsumeCreditsItem,\n} from '../../type'\nimport { numberFormat } from '../../../credits/context/utils'\nimport type { ConsumeCreditRuleResponse } from '../../../credits/context/response'\nimport { ROUNDED_BRANDS } from '../../../../constants'\n\ntype EnrichedItem = ConsumeCreditsItem & {\n alpcData: ConsumeCreditRuleResponse\n insufficient: boolean\n soldOut: boolean\n product?: any\n variant?: any\n}\n\ntype Props = {\n copy: ConsumeCreditsopy\n onClose: () => void\n}\n\nfunction ConsumeCredits({ copy, onClose }: Props) {\n const { profile, creditInfo, openSignUpPopup, alpcConfig } = useMemberPopupContext()\n const { pushView } = useViewStack()\n const { brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n const [redeemAndBuyError, setRedeemAndBuyError] = useState('')\n const [loadingId, setLoadingId] = useState<string | number | null>(null)\n\n const isLogin = !!profile\n const { redeemableList, listLoading } = useRedeemableList(alpcConfig)\n const { trigger: redeemAndBuy } = useRedeemAndBuy(alpcConfig)\n\n const handles = copy.list.map(item => item.product?.handle).filter(Boolean) as string[]\n const { data: products } = useProductsByHandles({ handles })\n\n const list = useMemo(() => {\n return copy.list\n .map(item => {\n const alpcData = redeemableList.find(r => String(r.id) === String(item.redeemId))\n if (!alpcData) return null\n\n const availableCredit = Number(creditInfo?.available_credit ?? 0)\n const insufficient = isLogin && !!profile?.activated && alpcData.consume_credits > availableCredit\n const soldOut = alpcData.is_limited && (!alpcData.remaining_inventory || alpcData.remaining_inventory <= 0)\n\n let product\n let variant\n if (item.type === ConsumeCreditsItemType.RedeemAndBuy && item.product) {\n product = products?.find((p: any) => p.handle === item.product!.handle)\n variant = product?.variants?.find((v: any) => v.sku === item.product!.sku) ?? product?.variants?.[0]\n if (!product || !variant) return null\n }\n\n return { ...item, alpcData, insufficient, soldOut, product, variant }\n })\n .filter(Boolean) as EnrichedItem[]\n }, [copy.list, redeemableList, creditInfo, profile, isLogin, products])\n\n function getButtonLabel(item: (typeof list)[number]) {\n if (!isLogin) return copy.unlockRewards\n if (item.soldOut) return copy.soldOut\n return copy.btnRedeem\n }\n\n function isDisabled(item: (typeof list)[number]) {\n return item.soldOut || item.insufficient\n }\n\n async function handleRedeem(item: (typeof list)[number]) {\n if (!isLogin) {\n openSignUpPopup()\n return\n }\n if (item.type === ConsumeCreditsItemType.Coupon) {\n pushView({\n type: MemberPopupPanelType.RedeemCoupon,\n props: {\n itemTitle: item.title,\n itemCredits: item.alpcData.consume_credits,\n itemImage: copy.imageMapping?.[item.type]\n ? { url: copy.imageMapping[item.type]!.url, alt: item.image?.alt }\n : item.image,\n itemValue: item.value,\n itemOff: copy.off,\n redeemId: Number(item.redeemId),\n userId: profile?.user_id,\n alpcConfig,\n },\n })\n } else {\n setRedeemAndBuyError('')\n setLoadingId(item.redeemId)\n try {\n await redeemAndBuy({\n productVariant: item.variant,\n redeemId: Number(item.redeemId),\n userId: profile?.user_id,\n })\n } catch (e: any) {\n setRedeemAndBuyError(e?.message ?? copy.redeemModal.commonError)\n } finally {\n setLoadingId(null)\n }\n }\n }\n\n return (\n <>\n <div className=\"flex flex-1 flex-col gap-[12px]\">\n <div className=\"flex flex-col gap-[8px]\">\n {copy.title && <h2 className=\"text-[24px] font-[700] leading-[1.2] text-[#080a0f]\">{copy.title}</h2>}\n {copy.subtitle && <p className=\"text-[16px] font-[700] leading-snug text-[#4a4c56]\">{copy.subtitle}</p>}\n </div>\n\n {copy.insufficientCredits && creditInfo && (\n <div className=\"text-[14px] font-[700] text-[#1d1d1f]\">\n {copy.insufficientCredits}: {numberFormat(creditInfo.available_credit)} {copy.pointUnit}\n </div>\n )}\n {redeemAndBuyError && <div className=\"text-[14px] font-[700] text-[#f84d4f]\">{redeemAndBuyError}</div>}\n\n {listLoading ? (\n <div className=\"flex flex-1 items-center justify-center py-[32px]\">\n <div className=\"size-[32px] animate-spin rounded-full border-[3px] border-[#080a0f] border-t-transparent\" />\n </div>\n ) : (\n <div className=\"flex flex-col\">\n {list.map((item, idx) => (\n <div key={idx} className=\"relative py-[16px]\">\n {idx > 0 && <div className=\"absolute inset-x-0 top-0 h-px bg-[#dadce0]\" />}\n <div className=\"flex items-center gap-[12px]\">\n {(() => {\n const isRedeemAndBuy = item.type === ConsumeCreditsItemType.RedeemAndBuy\n const mappedImgUrl = copy.imageMapping?.[item.type]?.url\n const imgUrl = isRedeemAndBuy\n ? (item.variant?.image?.url ?? item.product?.images?.[0]?.url ?? item.image?.url)\n : (mappedImgUrl ?? item.image?.url)\n const imgAlt = isRedeemAndBuy\n ? (item.variant?.image?.altText ?? item.product?.images?.[0]?.alt ?? item.image?.alt ?? '')\n : (item.image?.alt ?? '')\n if (!imgUrl) return null\n return (\n <div className={cn('relative size-[64px] shrink-0 overflow-hidden', rounded ? 'rounded-[4px]' : 'rounded-none')}>\n <Picture\n source={imgUrl}\n alt={imgAlt}\n className=\"flex size-full items-center justify-center\"\n imgClassName={isRedeemAndBuy ? 'object-cover' : 'h-full w-auto object-contain'}\n />\n {!isRedeemAndBuy && item.value && (\n <div className=\"absolute bottom-[20px] left-[4px] text-[14px] font-[800] leading-none text-white\">\n {item.value} {copy.off}\n </div>\n )}\n </div>\n )\n })()}\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-[16px] font-[700] text-[#1e2024] line-clamp-2\">\n {item.type === ConsumeCreditsItemType.RedeemAndBuy && item.product?.title\n ? item.product.title\n : item.title}\n </div>\n <div className=\"mt-[4px] text-[14px] text-[#666]\">\n {item.type === ConsumeCreditsItemType.RedeemAndBuy && item.price != null\n ? `${numberFormat(item.alpcData.consume_credits)} ${copy.pointUnit ?? ''} + $${Number(item.price).toFixed(2)}`\n : `${numberFormat(item.alpcData.consume_credits)} ${copy.pointUnit ?? ''}`}\n </div>\n </div>\n <div className=\"relative group\">\n <Button\n className={cn('bg-[#080a0f] px-[20px] pb-[10px] pt-[11px] text-[14px] font-[700] leading-[1.2] text-white', rounded ? 'rounded-[4px]' : 'rounded-none')}\n disabled={isDisabled(item)}\n loading={loadingId === item.redeemId}\n onClick={() => handleRedeem(item)}\n >\n {getButtonLabel(item)}\n </Button>\n {item.insufficient && (\n <div className=\"pointer-events-none absolute left-[48px] top-full mt-[10px] hidden -translate-x-1/2 group-hover:block\">\n <div className=\"relative bg-[#6D6D6F] p-[16px] text-[14px] font-[700] text-white shadow md:px-[10px] md:py-[8px]\">\n <p className=\"text-pretty tracking-[-0.02em] text-[14px]\">{copy.insufficientCredits}</p>\n <div className=\"absolute -top-[8px] left-[48px] size-[16px] origin-top-left rotate-45 rounded-[2px] bg-[#6D6D6F]\" />\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n ))}\n </div>\n )}\n\n {copy.creditsPage?.url && (\n <a\n href={copy.creditsPage.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"mt-auto self-start text-[14px] font-[700] text-[#080a0f] underline\"\n >\n {copy.creditsPage.label ?? 'Go to Credits Page'}\n </a>\n )}\n </div>\n </>\n )\n}\n\nexport default ConsumeCredits\n"],
5
- "mappings": "AAsHI,mBAAAA,EAGqB,OAAAC,EADjB,QAAAC,MAFJ,oBAtHJ,OAAS,WAAAC,EAAS,YAAAC,MAAgB,QAClC,OAAS,WAAAC,EAAS,UAAAC,MAAc,wBAChC,OAAS,cAAcC,EAAI,wBAAAC,EAAsB,sBAAAC,MAA0B,gBAC3E,OAAS,yBAAAC,MAA6B,yBACtC,OAAS,gBAAAC,MAAoB,0BAC7B,OAAS,qBAAAC,MAAyB,4BAClC,OAAS,mBAAAC,MAAuB,0BAChC,OACE,0BAAAC,EACA,wBAAAC,MAGK,aACP,OAAS,gBAAAC,MAAoB,iCAE7B,OAAS,kBAAAC,MAAsB,wBAe/B,SAASC,EAAe,CAAE,KAAAC,EAAM,QAAAC,CAAQ,EAAU,CAChD,KAAM,CAAE,QAAAC,EAAS,WAAAC,EAAY,gBAAAC,EAAiB,WAAAC,CAAW,EAAId,EAAsB,EAC7E,CAAE,SAAAe,CAAS,EAAId,EAAa,EAC5B,CAAE,MAAAe,CAAM,EAAIjB,EAAmB,EAC/BkB,EAAUV,EAAe,SAASS,CAAK,EAEvC,CAACE,EAAmBC,CAAoB,EAAIzB,EAAS,EAAE,EACvD,CAAC0B,EAAWC,CAAY,EAAI3B,EAAiC,IAAI,EAEjE4B,EAAU,CAAC,CAACX,EACZ,CAAE,eAAAY,EAAgB,YAAAC,CAAY,EAAItB,EAAkBY,CAAU,EAC9D,CAAE,QAASW,CAAa,EAAItB,EAAgBW,CAAU,EAEtDY,EAAUjB,EAAK,KAAK,IAAIkB,GAAQA,EAAK,SAAS,MAAM,EAAE,OAAO,OAAO,EACpE,CAAE,KAAMC,CAAS,EAAI9B,EAAqB,CAAE,QAAA4B,CAAQ,CAAC,EAErDG,EAAOpC,EAAQ,IACZgB,EAAK,KACT,IAAIkB,GAAQ,CACX,MAAMG,EAAWP,EAAe,KAAKQ,GAAK,OAAOA,EAAE,EAAE,IAAM,OAAOJ,EAAK,QAAQ,CAAC,EAChF,GAAI,CAACG,EAAU,OAAO,KAEtB,MAAME,EAAkB,OAAOpB,GAAY,kBAAoB,CAAC,EAC1DqB,EAAeX,GAAW,CAAC,CAACX,GAAS,WAAamB,EAAS,gBAAkBE,EAC7EE,EAAUJ,EAAS,aAAe,CAACA,EAAS,qBAAuBA,EAAS,qBAAuB,GAEzG,IAAIK,EACAC,EACJ,OAAIT,EAAK,OAASvB,EAAuB,cAAgBuB,EAAK,UAC5DQ,EAAUP,GAAU,KAAMS,GAAWA,EAAE,SAAWV,EAAK,QAAS,MAAM,EACtES,EAAUD,GAAS,UAAU,KAAMG,GAAWA,EAAE,MAAQX,EAAK,QAAS,GAAG,GAAKQ,GAAS,WAAW,CAAC,EAC/F,CAACA,GAAW,CAACC,GAAgB,KAG5B,CAAE,GAAGT,EAAM,SAAAG,EAAU,aAAAG,EAAc,QAAAC,EAAS,QAAAC,EAAS,QAAAC,CAAQ,CACtE,CAAC,EACA,OAAO,OAAO,EAChB,CAAC3B,EAAK,KAAMc,EAAgBX,EAAYD,EAASW,EAASM,CAAQ,CAAC,EAEtE,SAASW,EAAeZ,EAA6B,CACnD,OAAKL,EACDK,EAAK,QAAgBlB,EAAK,QACvBA,EAAK,UAFSA,EAAK,aAG5B,CAEA,SAAS+B,EAAWb,EAA6B,CAC/C,OAAOA,EAAK,SAAWA,EAAK,YAC9B,CAEA,eAAec,EAAad,EAA6B,CACvD,GAAI,CAACL,EAAS,CACZT,EAAgB,EAChB,MACF,CACA,GAAIc,EAAK,OAASvB,EAAuB,OACvCW,EAAS,CACP,KAAMV,EAAqB,aAC3B,MAAO,CACL,UAAWsB,EAAK,MAChB,YAAaA,EAAK,SAAS,gBAC3B,UAAWlB,EAAK,eAAekB,EAAK,IAAI,EACpC,CAAE,IAAKlB,EAAK,aAAakB,EAAK,IAAI,EAAG,IAAK,IAAKA,EAAK,OAAO,GAAI,EAC/DA,EAAK,MACT,UAAWA,EAAK,MAChB,QAASlB,EAAK,IACd,SAAU,OAAOkB,EAAK,QAAQ,EAC9B,OAAQhB,GAAS,QACjB,WAAAG,CACF,CACF,CAAC,MACI,CACLK,EAAqB,EAAE,EACvBE,EAAaM,EAAK,QAAQ,EAC1B,GAAI,CACF,MAAMF,EAAa,CACjB,eAAgBE,EAAK,QACrB,SAAU,OAAOA,EAAK,QAAQ,EAC9B,OAAQhB,GAAS,OACnB,CAAC,CACH,OAAS+B,EAAQ,CACfvB,EAAqBuB,GAAG,SAAWjC,EAAK,YAAY,WAAW,CACjE,QAAE,CACAY,EAAa,IAAI,CACnB,CACF,CACF,CAEA,OACE9B,EAAAD,EAAA,CACE,SAAAE,EAAC,OAAI,UAAU,kCACb,UAAAA,EAAC,OAAI,UAAU,0BACZ,UAAAiB,EAAK,OAASlB,EAAC,MAAG,UAAU,sDAAuD,SAAAkB,EAAK,MAAM,EAC9FA,EAAK,UAAYlB,EAAC,KAAE,UAAU,qDAAsD,SAAAkB,EAAK,SAAS,GACrG,EAECA,EAAK,qBAAuBG,GAC3BpB,EAAC,OAAI,UAAU,wCACZ,UAAAiB,EAAK,oBAAoB,KAAGH,EAAaM,EAAW,gBAAgB,EAAE,IAAEH,EAAK,WAChF,EAEDS,GAAqB3B,EAAC,OAAI,UAAU,wCAAyC,SAAA2B,EAAkB,EAE/FM,EACCjC,EAAC,OAAI,UAAU,oDACb,SAAAA,EAAC,OAAI,UAAU,2FAA2F,EAC5G,EAEAA,EAAC,OAAI,UAAU,gBACd,SAAAsC,EAAK,IAAI,CAACF,EAAMgB,IACfnD,EAAC,OAAc,UAAU,qBACtB,UAAAmD,EAAM,GAAKpD,EAAC,OAAI,UAAU,6CAA6C,EACxEC,EAAC,OAAI,UAAU,+BACX,eAAM,CACN,MAAMoD,EAAiBjB,EAAK,OAASvB,EAAuB,aACtDyC,EAAepC,EAAK,eAAekB,EAAK,IAAI,GAAG,IAC/CmB,EAASF,EACVjB,EAAK,SAAS,OAAO,KAAOA,EAAK,SAAS,SAAS,CAAC,GAAG,KAAOA,EAAK,OAAO,IAC1EkB,GAAgBlB,EAAK,OAAO,IAC3BoB,EAASH,EACVjB,EAAK,SAAS,OAAO,SAAWA,EAAK,SAAS,SAAS,CAAC,GAAG,KAAOA,EAAK,OAAO,KAAO,GACrFA,EAAK,OAAO,KAAO,GACxB,OAAKmB,EAEHtD,EAAC,OAAI,UAAWK,EAAG,gDAAiDoB,EAAU,gBAAkB,cAAc,EAC5G,UAAA1B,EAACI,EAAA,CACC,OAAQmD,EACR,IAAKC,EACL,UAAU,6CACV,aAAcH,EAAiB,eAAiB,+BAClD,EACC,CAACA,GAAkBjB,EAAK,OACvBnC,EAAC,OAAI,UAAU,mFACZ,UAAAmC,EAAK,MAAM,IAAElB,EAAK,KACrB,GAEJ,EAdkB,IAgBtB,GAAG,EACHjB,EAAC,OAAI,UAAU,iBACb,UAAAD,EAAC,OAAI,UAAU,qDACZ,SAAAoC,EAAK,OAASvB,EAAuB,cAAgBuB,EAAK,SAAS,MAChEA,EAAK,QAAQ,MACbA,EAAK,MACX,EACApC,EAAC,OAAI,UAAU,mCACZ,SAAAoC,EAAK,OAASvB,EAAuB,cAAgBuB,EAAK,OAAS,KAChE,GAAGrB,EAAaqB,EAAK,SAAS,eAAe,CAAC,IAAIlB,EAAK,WAAa,EAAE,OAAO,OAAOkB,EAAK,KAAK,EAAE,QAAQ,CAAC,CAAC,GAC1G,GAAGrB,EAAaqB,EAAK,SAAS,eAAe,CAAC,IAAIlB,EAAK,WAAa,EAAE,GAC5E,GACF,EACAjB,EAAC,OAAI,UAAU,iBACb,UAAAD,EAACK,EAAA,CACC,UAAWC,EAAG,6FAA8FoB,EAAU,gBAAkB,cAAc,EACtJ,SAAUuB,EAAWb,CAAI,EACzB,QAASP,IAAcO,EAAK,SAC5B,QAAS,IAAMc,EAAad,CAAI,EAE/B,SAAAY,EAAeZ,CAAI,EACtB,EACCA,EAAK,cACJpC,EAAC,OAAI,UAAU,wGACb,SAAAC,EAAC,OAAI,UAAU,mGACb,UAAAD,EAAC,KAAE,UAAU,6CAA8C,SAAAkB,EAAK,oBAAoB,EACpFlB,EAAC,OAAI,UAAU,mGAAmG,GACpH,EACF,GAEJ,GACF,IA3DQoD,CA4DV,CACD,EACH,EAGClC,EAAK,aAAa,KACjBlB,EAAC,KACC,KAAMkB,EAAK,YAAY,IACvB,OAAO,SACP,IAAI,sBACJ,UAAU,qEAET,SAAAA,EAAK,YAAY,OAAS,qBAC7B,GAEJ,EACF,CAEJ,CAEA,IAAOuC,GAAQxC",
6
- "names": ["Fragment", "jsx", "jsxs", "useMemo", "useState", "Picture", "Button", "cn", "useProductsByHandles", "useHeadlessContext", "useMemberPopupContext", "useViewStack", "useRedeemableList", "useRedeemAndBuy", "ConsumeCreditsItemType", "MemberPopupPanelType", "numberFormat", "ROUNDED_BRANDS", "ConsumeCredits", "copy", "onClose", "profile", "creditInfo", "openSignUpPopup", "alpcConfig", "pushView", "brand", "rounded", "redeemAndBuyError", "setRedeemAndBuyError", "loadingId", "setLoadingId", "isLogin", "redeemableList", "listLoading", "redeemAndBuy", "handles", "item", "products", "list", "alpcData", "r", "availableCredit", "insufficient", "soldOut", "product", "variant", "p", "v", "getButtonLabel", "isDisabled", "handleRedeem", "e", "idx", "isRedeemAndBuy", "mappedImgUrl", "imgUrl", "imgAlt", "ConsumeCredits_default"]
7
- }
@@ -1,8 +0,0 @@
1
- import type { AuthCodeActivateCopy } from '../../type';
2
- type Props = {
3
- copy: AuthCodeActivateCopy;
4
- onClose: () => void;
5
- onSuccess?: () => void;
6
- };
7
- export default function ActivatePanel({ copy, onClose, onSuccess }: Props): import("react/jsx-runtime").JSX.Element;
8
- export {};
@@ -1,2 +0,0 @@
1
- import{jsx as n,jsxs as b}from"react/jsx-runtime";import{useState as f,useCallback as A,useRef as O,useEffect as D}from"react";import{Button as U,Text as r}from"@anker-in/headless-ui";import{useSendEmailValidation as q,gaTrack as I,classNames as R,useHeadlessContext as G,useEmailValidation as J,useCountDown as Q}from"@anker-in/lib";import{Message as W}from"../../../registration/authCodeActivate/Message";import{useRegistration as X}from"../../../registration";import{ROUNDED_BRANDS as Y}from"../../../../constants";function Z({copy:e,onClose:x,onSuccess:h}){const{locale:H,brand:L}=G(),{email:i}=X(),V=Y.includes(L),{isMutating:y,trigger:v,data:C}=q(),{isMutating:B,trigger:T}=J(),[P,l]=f(""),[$,c]=f(""),{startCountDown:S,startAction:M,countDown:j}=Q(60),[k,u]=f(""),[_,m]=f(0),[o,E]=f(new Array(6).fill("")),N=O([]),p=o.join("");D(()=>{N.current[_]&&N.current[_].focus()},[_]),D(()=>{i&&v({email:i,data:{redirect_url:`${window?.location?.origin}${window?.location?.pathname}`}},{onSuccess:()=>{c("success"),l(e?.sendEmailSuccessMessage||""),M(),setTimeout(()=>{c(""),l("")},5e3)}})},[i]);const z=A(async()=>{i&&(await v({email:i,data:{redirect_url:`${window?.location?.origin}${window?.location?.pathname}`}},{onSuccess:()=>{c("success"),l(e?.sendEmailSuccessMessage||""),M(),setTimeout(()=>{c(""),l("")},5e3)}}),I({event:"ga4Event",event_name:"lp_button",event_parameters:{page_group:"reg_sub_pop",position:"auth_code",button_name:"sent_again"}}))},[i,v]),F=(d,a)=>{const{value:t}=d.target;if(u(""),Number.isNaN(Number(t)))return;if(t.length>1){a<o.length-1&&(o[a+1]||(m(a+1),E(g=>{const w=[...g];return w[a]=t[0],t.length>1&&(w[a+1]=t[1]),w})));return}const s=[...o];s[a]=t,E(s),t?a<o.length-1&&!o[a+1]&&m(a+1):a>0&&m(a-1)},K=A(async()=>{if(!p?.length){u(e?.codeEmptyError||"");return}if(p.length<6){u(e?.incorrectCodeError||"");return}const d=C?.data?.data?.active_token??C?.data?.active_token;d&&await T({token:d,code:p},{onSuccess:t=>{if(t.status>=200&&t.status<300)c("success"),l(e?.authSuccessMessage||""),h?.(),setTimeout(()=>{x()},3e3);else{const s=t?.data?.error_code??t?.error_code;s==="104"?(h?.(),setTimeout(()=>{x()},3e3)):u(s==="142"?e?.incorrectCodeError||"Invalid verification code.":s==="154"?e?.expiredCodeMessage||"":e?.sendEmailErrorMessage||"")}}});let a=setTimeout(()=>{c(""),l(""),clearTimeout(a)},5e3);I({event:"ga4Event",event_name:"lp_button",event_parameters:{page_group:"reg_sub_pop",position:"auth_code",button_name:"check_and_active"}})},[p,e?.codeEmptyError,e?.authSuccessMessage,e?.incorrectCodeError,e?.expiredCodeMessage,e?.sendEmailErrorMessage,H,C,T,x,h]);return b("div",{className:"relative",children:[b("div",{children:[n(r,{className:"text-[22px] font-extrabold leading-[120%] text-[#333] min-l:text-[24px] [&_abbr]:text-[#005d8e]",html:e?.authCodeTitle}),n(r,{as:"p",className:"mt-3 text-[14px] font-semibold leading-[140%] text-[rgba(51,51,51,0.75)] min-l:text-base [&_abbr]:text-[#333]",html:e?.authCodeDesc?.replace("%email%",i||"")})]}),b("div",{className:"mt-6",children:[n(r,{className:"mt-4 text-[14px] !font-bold font-semibold leading-[140%] text-[#333] min-l:mt-6",html:e?.enterActiveCodeText}),n("div",{className:"my-3 grid grid-cols-6 gap-2",children:o.map((d,a)=>n("div",{className:"col-span-1 aspect-1 text-[#555]",children:n("input",{ref:t=>{t&&(N.current[a]=t)},type:"tel",className:R("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",V&&"rounded-[12px]"),value:d,autoComplete:"false",autoCorrect:"false",spellCheck:"false",autoCapitalize:"false",onChange:t=>F(t,a),onFocus:()=>{m(a)},onPaste:t=>{const s=t.clipboardData.getData("text");if(!Number.isNaN(Number(s))){const g=s.split("").slice(0,6);E(g.concat(Array(6-g.length).fill(""))),g.length<=o.length&&m(g.length-1)}},onKeyDown:t=>{const{value:s}=t.target;t.key==="Backspace"&&!s&&a>0&&m(a-1)}},a)},a))}),k&&n(r,{className:"mb-3 text-[14px] font-semibold leading-[120%] text-[#f84d4f]",html:k}),e?.authCodeContent&&n("ul",{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-["\u2022"]',dangerouslySetInnerHTML:{__html:e?.authCodeContent}})]}),b("div",{className:"mt-4 min-l:mt-6",children:[n(r,{className:"text-base font-semibold leading-[100%] text-[#333]",html:e?.authCodeReceiveText})," ",S?n(r,{html:e?.retrieveText?.replace("%countdownTime%",j.toString()),className:"cursor-pointer text-base font-semibold leading-[100%] !text-brand text-[#005d8e] text-[#333] underline"}):n(r,{onClick:z,className:R("cursor-pointer text-base font-semibold leading-[100%] !text-brand text-[#005d8e] text-[#333] underline",{"pointer-events-none":S||y}),html:e?.sendAgainText}),n(U,{type:"submit",loading:B,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",onClick:K,children:e.buttonText})]}),n(W,{status:$,message:P})]})}export{Z as default};
2
- //# sourceMappingURL=ActivatePanel.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../../src/components/memberPopup/panels/EarnCredits/ActivatePanel.tsx"],
4
- "sourcesContent": ["import { useState, useCallback, useRef, useEffect } from 'react'\nimport { Button, Text } from '@anker-in/headless-ui'\nimport {\n useSendEmailValidation,\n gaTrack,\n classNames as cn,\n useHeadlessContext,\n useEmailValidation,\n useCountDown,\n} from '@anker-in/lib'\nimport { Message } from '../../../registration/authCodeActivate/Message'\nimport type { AuthCodeActivateCopy } from '../../type'\nimport { useRegistration } from '../../../registration'\nimport { ROUNDED_BRANDS } from '../../../../constants'\n\ntype Props = {\n copy: AuthCodeActivateCopy\n onClose: () => void\n onSuccess?: () => void\n}\n\nexport default function ActivatePanel({ copy, onClose, onSuccess }: Props) {\n const { locale, brand } = useHeadlessContext()\n const { email } = useRegistration()\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n const {\n isMutating: isSendingEmail,\n trigger: triggerSendValidationEmail,\n data: sendEmailData,\n } = useSendEmailValidation()\n\n const { isMutating: emailValidationLoading, trigger: triggerEmailValidation } = useEmailValidation()\n\n const [messageText, setMessageText] = useState('')\n const [messageStatus, setMessageStatus] = useState('')\n const { startCountDown: isStartCountDown, startAction: startCountDown, countDown } = useCountDown(60)\n\n const [error, setError] = useState('')\n const [focusIndex, setFocusIndex] = useState(0)\n const [codeArray, setCodeArray] = useState(new Array(6).fill(''))\n\n const inputRefs = useRef<HTMLInputElement[]>([])\n const code = codeArray.join('')\n\n useEffect(() => {\n if (inputRefs.current[focusIndex]) {\n inputRefs.current[focusIndex].focus()\n }\n }, [focusIndex])\n\n useEffect(() => {\n if (email) {\n triggerSendValidationEmail(\n {\n email: email,\n data: {\n redirect_url: `${window?.location?.origin}${window?.location?.pathname}`,\n },\n },\n {\n onSuccess: () => {\n setMessageStatus('success')\n setMessageText(copy?.sendEmailSuccessMessage || '')\n startCountDown()\n setTimeout(() => {\n setMessageStatus('')\n setMessageText('')\n }, 5000)\n },\n }\n )\n }\n }, [email])\n\n const handleSendAgain = useCallback(async () => {\n if (!email) return\n await triggerSendValidationEmail(\n {\n email: email,\n data: {\n redirect_url: `${window?.location?.origin}${window?.location?.pathname}`,\n },\n },\n {\n onSuccess: () => {\n setMessageStatus('success')\n setMessageText(copy?.sendEmailSuccessMessage || '')\n startCountDown()\n setTimeout(() => {\n setMessageStatus('')\n setMessageText('')\n }, 5000)\n },\n }\n )\n gaTrack({\n event: 'ga4Event',\n event_name: 'lp_button',\n event_parameters: {\n page_group: 'reg_sub_pop',\n position: 'auth_code',\n button_name: 'sent_again',\n },\n })\n }, [email, triggerSendValidationEmail])\n\n const handleInputCodeChange = (event: React.ChangeEvent<HTMLInputElement>, index: number) => {\n const { value } = event.target\n\n setError('')\n\n if (Number.isNaN(Number(value))) {\n return\n }\n\n if (value.length > 1) {\n if (index < codeArray.length - 1) {\n if (!codeArray[index + 1]) {\n setFocusIndex(index + 1)\n setCodeArray(old => {\n const newCode = [...old]\n newCode[index] = value[0]\n if (value.length > 1) {\n newCode[index + 1] = value[1]\n }\n return newCode\n })\n }\n }\n return\n }\n const newCode = [...codeArray]\n newCode[index] = value\n setCodeArray(newCode)\n if (value) {\n if (index < codeArray.length - 1 && !codeArray[index + 1]) {\n setFocusIndex(index + 1)\n }\n } else if (index > 0) {\n setFocusIndex(index - 1)\n }\n }\n\n const handleAuthCodeSubmit = useCallback(async () => {\n if (!code?.length) {\n setError(copy?.codeEmptyError || '')\n return\n }\n\n if (code.length < 6) {\n setError(copy?.incorrectCodeError || '')\n return\n }\n\n const token = sendEmailData?.data?.data?.active_token ?? sendEmailData?.data?.active_token\n if (token) {\n await triggerEmailValidation(\n {\n token: token,\n code: code,\n },\n {\n onSuccess: data => {\n if (data.status >= 200 && data.status < 300) {\n setMessageStatus('success')\n setMessageText(copy?.authSuccessMessage || '')\n onSuccess?.()\n setTimeout(() => {\n onClose()\n }, 3000)\n } else {\n const errorCode = data?.data?.error_code ?? data?.error_code\n if (errorCode === '104') {\n onSuccess?.()\n setTimeout(() => {\n onClose()\n }, 3000)\n } else if (errorCode === '142') {\n setError(copy?.incorrectCodeError || 'Invalid verification code.')\n } else if (errorCode === '154') {\n setError(copy?.expiredCodeMessage || '')\n } else {\n setError(copy?.sendEmailErrorMessage || '')\n }\n }\n },\n }\n )\n }\n\n let timer = setTimeout(() => {\n setMessageStatus('')\n setMessageText('')\n clearTimeout(timer)\n }, 5000)\n\n gaTrack({\n event: 'ga4Event',\n event_name: 'lp_button',\n event_parameters: {\n page_group: 'reg_sub_pop',\n position: 'auth_code',\n button_name: 'check_and_active',\n },\n })\n }, [\n code,\n copy?.codeEmptyError,\n copy?.authSuccessMessage,\n copy?.incorrectCodeError,\n copy?.expiredCodeMessage,\n copy?.sendEmailErrorMessage,\n locale,\n sendEmailData,\n triggerEmailValidation,\n onClose,\n onSuccess,\n ])\n\n return (\n <div className=\"relative\">\n <div>\n <Text\n className=\"text-[22px] font-extrabold leading-[120%] text-[#333] min-l:text-[24px] [&_abbr]:text-[#005d8e]\"\n html={copy?.authCodeTitle}\n />\n <Text\n as=\"p\"\n className=\"mt-3 text-[14px] font-semibold leading-[140%] text-[rgba(51,51,51,0.75)] min-l:text-base [&_abbr]:text-[#333]\"\n html={copy?.authCodeDesc?.replace('%email%', email || '')}\n />\n </div>\n <div className=\"mt-6\">\n <Text\n className=\"mt-4 text-[14px] !font-bold font-semibold leading-[140%] text-[#333] min-l:mt-6\"\n html={copy?.enterActiveCodeText}\n />\n <div className=\"my-3 grid grid-cols-6 gap-2\">\n {codeArray.map((item, index) => (\n <div key={index} className=\"col-span-1 aspect-1 text-[#555]\">\n <input\n ref={inputRef => {\n if (inputRef) {\n inputRefs.current[index] = inputRef\n }\n }}\n key={index}\n type=\"tel\"\n className={cn(\n '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',\n rounded && 'rounded-[12px]'\n )}\n value={item}\n autoComplete=\"false\"\n autoCorrect=\"false\"\n spellCheck=\"false\"\n autoCapitalize=\"false\"\n onChange={event => handleInputCodeChange(event, index)}\n onFocus={() => {\n setFocusIndex(index)\n }}\n onPaste={event => {\n const paste = event.clipboardData.getData('text')\n if (!Number.isNaN(Number(paste))) {\n const pastedCode = paste.split('').slice(0, 6)\n setCodeArray(pastedCode.concat(Array(6 - pastedCode.length).fill('')))\n if (pastedCode.length <= codeArray.length) {\n setFocusIndex(pastedCode.length - 1)\n }\n }\n }}\n onKeyDown={event => {\n const { value } = event.target as HTMLInputElement\n if (event.key === 'Backspace' && !value && index > 0) {\n setFocusIndex(index - 1)\n }\n }}\n />\n </div>\n ))}\n </div>\n\n {error && <Text className=\"mb-3 text-[14px] font-semibold leading-[120%] text-[#f84d4f]\" html={error} />}\n {copy?.authCodeContent && (\n <ul\n 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-[\"\u2022\"]'\n dangerouslySetInnerHTML={{ __html: copy?.authCodeContent }}\n />\n )}\n </div>\n <div className=\"mt-4 min-l:mt-6\">\n <Text className=\"text-base font-semibold leading-[100%] text-[#333]\" html={copy?.authCodeReceiveText} />{' '}\n {isStartCountDown ? (\n <Text\n html={copy?.retrieveText?.replace('%countdownTime%', countDown.toString())}\n className=\"cursor-pointer text-base font-semibold leading-[100%] !text-brand text-[#005d8e] text-[#333] underline\"\n />\n ) : (\n <Text\n onClick={handleSendAgain}\n className={cn(\n 'cursor-pointer text-base font-semibold leading-[100%] !text-brand text-[#005d8e] text-[#333] underline',\n {\n 'pointer-events-none': isStartCountDown || isSendingEmail,\n }\n )}\n html={copy?.sendAgainText}\n />\n )}\n <Button\n type=\"submit\"\n loading={emailValidationLoading}\n 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\"\n onClick={handleAuthCodeSubmit}\n >\n {copy.buttonText}\n </Button>\n </div>\n <Message status={messageStatus} message={messageText} />\n </div>\n )\n}\n"],
5
- "mappings": "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",
6
- "names": ["jsx", "jsxs", "useState", "useCallback", "useRef", "useEffect", "Button", "Text", "useSendEmailValidation", "gaTrack", "cn", "useHeadlessContext", "useEmailValidation", "useCountDown", "Message", "useRegistration", "ROUNDED_BRANDS", "ActivatePanel", "copy", "onClose", "onSuccess", "locale", "brand", "email", "rounded", "isSendingEmail", "triggerSendValidationEmail", "sendEmailData", "emailValidationLoading", "triggerEmailValidation", "messageText", "setMessageText", "messageStatus", "setMessageStatus", "isStartCountDown", "startCountDown", "countDown", "error", "setError", "focusIndex", "setFocusIndex", "codeArray", "setCodeArray", "inputRefs", "code", "handleSendAgain", "handleInputCodeChange", "event", "index", "value", "old", "newCode", "handleAuthCodeSubmit", "token", "data", "errorCode", "timer", "item", "inputRef", "paste", "pastedCode"]
7
- }
@@ -1,10 +0,0 @@
1
- import type { CompleteProfileCopy } from '../../type';
2
- type Props = {
3
- isOpen: boolean;
4
- onClose: () => void;
5
- onSuccess?: () => void;
6
- copy: CompleteProfileCopy;
7
- shopifyStoreDomain?: string;
8
- };
9
- export declare function CompleteProfileModal({ isOpen, onClose, onSuccess, copy, shopifyStoreDomain }: Props): import("react/jsx-runtime").JSX.Element;
10
- export {};
@@ -1,2 +0,0 @@
1
- import{jsx as e,jsxs as l}from"react/jsx-runtime";import{useCallback as B,useEffect as O,useState as s}from"react";import{Button as M,Text as c}from"@anker-in/headless-ui";import{classNames as q}from"@anker-in/lib";import{CreditsModalContainer as A}from"../../../credits/modal/ModalContainer";import{useUpdateProfile as I}from"./hooks/useUpdateProfile";import T from"../../../credits/context/hooks/useCountries";import{useMemberPopupContext as U}from"../../context/provider";function W({isOpen:D,onClose:i,onSuccess:N,copy:a,shopifyStoreDomain:L=""}){const{profile:o,fetchCreditInfo:v,alpcConfig:h}=U(),{locale:S}=h,[r,C]=s(""),[d,g]=s(""),[n,k]=s(""),[m,P]=s(""),[p,w]=s(""),[x,f]=s(""),[u,b]=s(""),{updateProfile:y,isLoading:_}=I({locale:S,appName:h.appName}),{countries:z}=T({shopifyStoreDomain:L});O(()=>{o&&(C(o.first_name??""),g(o.last_name??""),k(o.phone_number??""),P(o.dob??""),w(o.country?.id??""))},[o]);const E=B(()=>{let t=!1;return r.trim()?f(""):(f(a.required),t=!0),d.trim()?b(""):(b(a.required),t=!0),t},[r,d,a.required]),F=B(async()=>{if(E())return;await y({first_name:r.trim(),last_name:d.trim(),phone_number:n,country:p,dob:m})&&(v(o?.user_id),N?.(),i())},[E,y,r,d,n,p,m,v,o,N,i]);return e(A,{isOpen:D,onClose:i,title:a.title,titleClassName:"!h-auto !border-b-0 !pb-0",className:"w-[540px] md:h-auto",useAnimation:!0,animationClassName:"md:translate-y-[100vh]",children:l("div",{className:"flex flex-col gap-[20px]",children:[a.subtitle&&e(c,{className:"text-[14px] text-[#1d1d1f]",html:a.subtitle}),l("div",{children:[e("label",{className:"block text-[14px] font-semibold text-[#1d1d1f]",children:a.email}),e("input",{className:"mt-[8px] h-[46px] w-full rounded-[4px] border border-[#d8d8d8] bg-[#f5f5f5] px-[12px] text-[14px] text-[#999]",value:o?.email??"",disabled:!0})]}),l("div",{children:[l("label",{className:"block text-[14px] font-semibold text-[#1d1d1f]",children:[a.firstName," ",e("span",{className:"text-[#f84d4f]",children:"*"})]}),e("input",{className:q("mt-[8px] h-[46px] w-full rounded-[4px] border px-[12px] text-[14px] outline-none",x?"border-[#f84d4f]":"border-[#d8d8d8]"),value:r,onChange:t=>{C(t.target.value),f("")}}),x&&e(c,{className:"mt-[4px] text-[12px] text-[#f84d4f]",html:x})]}),l("div",{children:[l("label",{className:"block text-[14px] font-semibold text-[#1d1d1f]",children:[a.lastName," ",e("span",{className:"text-[#f84d4f]",children:"*"})]}),e("input",{className:q("mt-[8px] h-[46px] w-full rounded-[4px] border px-[12px] text-[14px] outline-none",u?"border-[#f84d4f]":"border-[#d8d8d8]"),value:d,onChange:t=>{g(t.target.value),b("")}}),u&&e(c,{className:"mt-[4px] text-[12px] text-[#f84d4f]",html:u})]}),l("div",{children:[e("label",{className:"block text-[14px] font-semibold text-[#1d1d1f]",children:a.birthday}),e("input",{className:"mt-[8px] h-[46px] w-full rounded-[4px] border border-[#d8d8d8] px-[12px] text-[14px] outline-none",type:"date",value:m,onChange:t=>P(t.target.value)})]}),l("div",{children:[e("label",{className:"block text-[14px] font-semibold text-[#1d1d1f]",children:a.phone}),e("input",{className:"mt-[8px] h-[46px] w-full rounded-[4px] border border-[#d8d8d8] px-[12px] text-[14px] outline-none",value:n,onChange:t=>k(t.target.value)})]}),l("div",{children:[e("label",{className:"block text-[14px] font-semibold text-[#1d1d1f]",children:a.country}),l("select",{className:"mt-[8px] h-[46px] w-full rounded-[4px] border border-[#d8d8d8] px-[12px] text-[14px] outline-none",value:p,onChange:t=>w(t.target.value),children:[e("option",{value:""}),z.map(t=>e("option",{value:t.id,children:t.name},t.id))]})]}),l("div",{className:"flex gap-[12px]",children:[e(M,{variant:"secondary",size:"lg",className:"flex-1",onClick:i,disabled:_,children:a.cancel}),e(M,{variant:"primary",size:"lg",className:"flex-1",loading:_,onClick:F,children:a.save})]})]})})}export{W as CompleteProfileModal};
2
- //# sourceMappingURL=CompleteProfileModal.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../../src/components/memberPopup/panels/EarnCredits/CompleteProfileModal.tsx"],
4
- "sourcesContent": ["import { useCallback, useEffect, useState } from 'react'\nimport { Button, Text } from '@anker-in/headless-ui'\nimport { classNames as cn } from '@anker-in/lib'\nimport { CreditsModalContainer } from '../../../credits/modal/ModalContainer'\nimport type { CompleteProfileCopy } from '../../type'\nimport { useUpdateProfile } from './hooks/useUpdateProfile'\nimport useCountries from '../../../credits/context/hooks/useCountries'\nimport { useMemberPopupContext } from '../../context/provider'\n\ntype Props = {\n isOpen: boolean\n onClose: () => void\n onSuccess?: () => void\n copy: CompleteProfileCopy\n shopifyStoreDomain?: string\n}\n\nexport function CompleteProfileModal({ isOpen, onClose, onSuccess, copy, shopifyStoreDomain = '' }: Props) {\n const { profile, fetchCreditInfo, alpcConfig } = useMemberPopupContext()\n const { locale } = alpcConfig\n\n const [firstName, setFirstName] = useState('')\n const [lastName, setLastName] = useState('')\n const [phone, setPhone] = useState('')\n const [birthDay, setBirthDay] = useState('')\n const [country, setCountry] = useState('')\n const [firstNameError, setFirstNameError] = useState('')\n const [lastNameError, setLastNameError] = useState('')\n\n const { updateProfile, isLoading } = useUpdateProfile({ locale, appName: alpcConfig.appName })\n const { countries } = useCountries({ shopifyStoreDomain })\n\n useEffect(() => {\n if (profile) {\n setFirstName(profile.first_name ?? '')\n setLastName(profile.last_name ?? '')\n setPhone(profile.phone_number ?? '')\n setBirthDay(profile.dob ?? '')\n setCountry(profile.country?.id ?? '')\n }\n }, [profile])\n\n const validate = useCallback(() => {\n let hasError = false\n if (!firstName.trim()) {\n setFirstNameError(copy.required)\n hasError = true\n } else {\n setFirstNameError('')\n }\n if (!lastName.trim()) {\n setLastNameError(copy.required)\n hasError = true\n } else {\n setLastNameError('')\n }\n return hasError\n }, [firstName, lastName, copy.required])\n\n const handleSubmit = useCallback(async () => {\n if (validate()) return\n const success = await updateProfile({\n first_name: firstName.trim(),\n last_name: lastName.trim(),\n phone_number: phone,\n country,\n dob: birthDay,\n })\n if (success) {\n fetchCreditInfo(profile?.user_id)\n onSuccess?.()\n onClose()\n }\n }, [validate, updateProfile, firstName, lastName, phone, country, birthDay, fetchCreditInfo, profile, onSuccess, onClose])\n\n return (\n <CreditsModalContainer\n isOpen={isOpen}\n onClose={onClose}\n title={copy.title}\n titleClassName=\"!h-auto !border-b-0 !pb-0\"\n className=\"w-[540px] md:h-auto\"\n useAnimation\n animationClassName=\"md:translate-y-[100vh]\"\n >\n <div className=\"flex flex-col gap-[20px]\">\n {copy.subtitle && (\n <Text className=\"text-[14px] text-[#1d1d1f]\" html={copy.subtitle} />\n )}\n\n <div>\n <label className=\"block text-[14px] font-semibold text-[#1d1d1f]\">{copy.email}</label>\n <input\n className=\"mt-[8px] h-[46px] w-full rounded-[4px] border border-[#d8d8d8] bg-[#f5f5f5] px-[12px] text-[14px] text-[#999]\"\n value={profile?.email ?? ''}\n disabled\n />\n </div>\n\n <div>\n <label className=\"block text-[14px] font-semibold text-[#1d1d1f]\">\n {copy.firstName} <span className=\"text-[#f84d4f]\">*</span>\n </label>\n <input\n className={cn(\n 'mt-[8px] h-[46px] w-full rounded-[4px] border px-[12px] text-[14px] outline-none',\n firstNameError ? 'border-[#f84d4f]' : 'border-[#d8d8d8]'\n )}\n value={firstName}\n onChange={e => { setFirstName(e.target.value); setFirstNameError('') }}\n />\n {firstNameError && <Text className=\"mt-[4px] text-[12px] text-[#f84d4f]\" html={firstNameError} />}\n </div>\n\n <div>\n <label className=\"block text-[14px] font-semibold text-[#1d1d1f]\">\n {copy.lastName} <span className=\"text-[#f84d4f]\">*</span>\n </label>\n <input\n className={cn(\n 'mt-[8px] h-[46px] w-full rounded-[4px] border px-[12px] text-[14px] outline-none',\n lastNameError ? 'border-[#f84d4f]' : 'border-[#d8d8d8]'\n )}\n value={lastName}\n onChange={e => { setLastName(e.target.value); setLastNameError('') }}\n />\n {lastNameError && <Text className=\"mt-[4px] text-[12px] text-[#f84d4f]\" html={lastNameError} />}\n </div>\n\n <div>\n <label className=\"block text-[14px] font-semibold text-[#1d1d1f]\">{copy.birthday}</label>\n <input\n className=\"mt-[8px] h-[46px] w-full rounded-[4px] border border-[#d8d8d8] px-[12px] text-[14px] outline-none\"\n type=\"date\"\n value={birthDay}\n onChange={e => setBirthDay(e.target.value)}\n />\n </div>\n\n <div>\n <label className=\"block text-[14px] font-semibold text-[#1d1d1f]\">{copy.phone}</label>\n <input\n className=\"mt-[8px] h-[46px] w-full rounded-[4px] border border-[#d8d8d8] px-[12px] text-[14px] outline-none\"\n value={phone}\n onChange={e => setPhone(e.target.value)}\n />\n </div>\n\n <div>\n <label className=\"block text-[14px] font-semibold text-[#1d1d1f]\">{copy.country}</label>\n <select\n className=\"mt-[8px] h-[46px] w-full rounded-[4px] border border-[#d8d8d8] px-[12px] text-[14px] outline-none\"\n value={country}\n onChange={e => setCountry(e.target.value)}\n >\n <option value=\"\" />\n {countries.map((c: { id: string; name: string }) => (\n <option key={c.id} value={c.id}>{c.name}</option>\n ))}\n </select>\n </div>\n\n <div className=\"flex gap-[12px]\">\n <Button\n variant=\"secondary\"\n size=\"lg\"\n className=\"flex-1\"\n onClick={onClose}\n disabled={isLoading}\n >\n {copy.cancel}\n </Button>\n <Button\n variant=\"primary\"\n size=\"lg\"\n className=\"flex-1\"\n loading={isLoading}\n onClick={handleSubmit}\n >\n {copy.save}\n </Button>\n </div>\n </div>\n </CreditsModalContainer>\n )\n}\n"],
5
- "mappings": "AAuFU,cAAAA,EAGF,QAAAC,MAHE,oBAvFV,OAAS,eAAAC,EAAa,aAAAC,EAAW,YAAAC,MAAgB,QACjD,OAAS,UAAAC,EAAQ,QAAAC,MAAY,wBAC7B,OAAS,cAAcC,MAAU,gBACjC,OAAS,yBAAAC,MAA6B,wCAEtC,OAAS,oBAAAC,MAAwB,2BACjC,OAAOC,MAAkB,8CACzB,OAAS,yBAAAC,MAA6B,yBAU/B,SAASC,EAAqB,CAAE,OAAAC,EAAQ,QAAAC,EAAS,UAAAC,EAAW,KAAAC,EAAM,mBAAAC,EAAqB,EAAG,EAAU,CACzG,KAAM,CAAE,QAAAC,EAAS,gBAAAC,EAAiB,WAAAC,CAAW,EAAIT,EAAsB,EACjE,CAAE,OAAAU,CAAO,EAAID,EAEb,CAACE,EAAWC,CAAY,EAAInB,EAAS,EAAE,EACvC,CAACoB,EAAUC,CAAW,EAAIrB,EAAS,EAAE,EACrC,CAACsB,EAAOC,CAAQ,EAAIvB,EAAS,EAAE,EAC/B,CAACwB,EAAUC,CAAW,EAAIzB,EAAS,EAAE,EACrC,CAAC0B,EAASC,CAAU,EAAI3B,EAAS,EAAE,EACnC,CAAC4B,EAAgBC,CAAiB,EAAI7B,EAAS,EAAE,EACjD,CAAC8B,EAAeC,CAAgB,EAAI/B,EAAS,EAAE,EAE/C,CAAE,cAAAgC,EAAe,UAAAC,CAAU,EAAI5B,EAAiB,CAAE,OAAAY,EAAQ,QAASD,EAAW,OAAQ,CAAC,EACvF,CAAE,UAAAkB,CAAU,EAAI5B,EAAa,CAAE,mBAAAO,CAAmB,CAAC,EAEzDd,EAAU,IAAM,CACVe,IACFK,EAAaL,EAAQ,YAAc,EAAE,EACrCO,EAAYP,EAAQ,WAAa,EAAE,EACnCS,EAAST,EAAQ,cAAgB,EAAE,EACnCW,EAAYX,EAAQ,KAAO,EAAE,EAC7Ba,EAAWb,EAAQ,SAAS,IAAM,EAAE,EAExC,EAAG,CAACA,CAAO,CAAC,EAEZ,MAAMqB,EAAWrC,EAAY,IAAM,CACjC,IAAIsC,EAAW,GACf,OAAKlB,EAAU,KAAK,EAIlBW,EAAkB,EAAE,GAHpBA,EAAkBjB,EAAK,QAAQ,EAC/BwB,EAAW,IAIRhB,EAAS,KAAK,EAIjBW,EAAiB,EAAE,GAHnBA,EAAiBnB,EAAK,QAAQ,EAC9BwB,EAAW,IAINA,CACT,EAAG,CAAClB,EAAWE,EAAUR,EAAK,QAAQ,CAAC,EAEjCyB,EAAevC,EAAY,SAAY,CAC3C,GAAIqC,EAAS,EAAG,OACA,MAAMH,EAAc,CAClC,WAAYd,EAAU,KAAK,EAC3B,UAAWE,EAAS,KAAK,EACzB,aAAcE,EACd,QAAAI,EACA,IAAKF,CACP,CAAC,IAECT,EAAgBD,GAAS,OAAO,EAChCH,IAAY,EACZD,EAAQ,EAEZ,EAAG,CAACyB,EAAUH,EAAed,EAAWE,EAAUE,EAAOI,EAASF,EAAUT,EAAiBD,EAASH,EAAWD,CAAO,CAAC,EAEzH,OACEd,EAACQ,EAAA,CACC,OAAQK,EACR,QAASC,EACT,MAAOE,EAAK,MACZ,eAAe,4BACf,UAAU,sBACV,aAAY,GACZ,mBAAmB,yBAEnB,SAAAf,EAAC,OAAI,UAAU,2BACZ,UAAAe,EAAK,UACJhB,EAACM,EAAA,CAAK,UAAU,6BAA6B,KAAMU,EAAK,SAAU,EAGpEf,EAAC,OACC,UAAAD,EAAC,SAAM,UAAU,iDAAkD,SAAAgB,EAAK,MAAM,EAC9EhB,EAAC,SACC,UAAU,gHACV,MAAOkB,GAAS,OAAS,GACzB,SAAQ,GACV,GACF,EAEAjB,EAAC,OACC,UAAAA,EAAC,SAAM,UAAU,iDACd,UAAAe,EAAK,UAAU,IAAChB,EAAC,QAAK,UAAU,iBAAiB,aAAC,GACrD,EACAA,EAAC,SACC,UAAWO,EACT,mFACAyB,EAAiB,mBAAqB,kBACxC,EACA,MAAOV,EACP,SAAUoB,GAAK,CAAEnB,EAAamB,EAAE,OAAO,KAAK,EAAGT,EAAkB,EAAE,CAAE,EACvE,EACCD,GAAkBhC,EAACM,EAAA,CAAK,UAAU,sCAAsC,KAAM0B,EAAgB,GACjG,EAEA/B,EAAC,OACC,UAAAA,EAAC,SAAM,UAAU,iDACd,UAAAe,EAAK,SAAS,IAAChB,EAAC,QAAK,UAAU,iBAAiB,aAAC,GACpD,EACAA,EAAC,SACC,UAAWO,EACT,mFACA2B,EAAgB,mBAAqB,kBACvC,EACA,MAAOV,EACP,SAAUkB,GAAK,CAAEjB,EAAYiB,EAAE,OAAO,KAAK,EAAGP,EAAiB,EAAE,CAAE,EACrE,EACCD,GAAiBlC,EAACM,EAAA,CAAK,UAAU,sCAAsC,KAAM4B,EAAe,GAC/F,EAEAjC,EAAC,OACC,UAAAD,EAAC,SAAM,UAAU,iDAAkD,SAAAgB,EAAK,SAAS,EACjFhB,EAAC,SACC,UAAU,oGACV,KAAK,OACL,MAAO4B,EACP,SAAUc,GAAKb,EAAYa,EAAE,OAAO,KAAK,EAC3C,GACF,EAEAzC,EAAC,OACC,UAAAD,EAAC,SAAM,UAAU,iDAAkD,SAAAgB,EAAK,MAAM,EAC9EhB,EAAC,SACC,UAAU,oGACV,MAAO0B,EACP,SAAUgB,GAAKf,EAASe,EAAE,OAAO,KAAK,EACxC,GACF,EAEAzC,EAAC,OACC,UAAAD,EAAC,SAAM,UAAU,iDAAkD,SAAAgB,EAAK,QAAQ,EAChFf,EAAC,UACC,UAAU,oGACV,MAAO6B,EACP,SAAUY,GAAKX,EAAWW,EAAE,OAAO,KAAK,EAExC,UAAA1C,EAAC,UAAO,MAAM,GAAG,EAChBsC,EAAU,IAAKK,GACd3C,EAAC,UAAkB,MAAO2C,EAAE,GAAK,SAAAA,EAAE,MAAtBA,EAAE,EAAyB,CACzC,GACH,GACF,EAEA1C,EAAC,OAAI,UAAU,kBACb,UAAAD,EAACK,EAAA,CACC,QAAQ,YACR,KAAK,KACL,UAAU,SACV,QAASS,EACT,SAAUuB,EAET,SAAArB,EAAK,OACR,EACAhB,EAACK,EAAA,CACC,QAAQ,UACR,KAAK,KACL,UAAU,SACV,QAASgC,EACT,QAASI,EAER,SAAAzB,EAAK,KACR,GACF,GACF,EACF,CAEJ",
6
- "names": ["jsx", "jsxs", "useCallback", "useEffect", "useState", "Button", "Text", "cn", "CreditsModalContainer", "useUpdateProfile", "useCountries", "useMemberPopupContext", "CompleteProfileModal", "isOpen", "onClose", "onSuccess", "copy", "shopifyStoreDomain", "profile", "fetchCreditInfo", "alpcConfig", "locale", "firstName", "setFirstName", "lastName", "setLastName", "phone", "setPhone", "birthDay", "setBirthDay", "country", "setCountry", "firstNameError", "setFirstNameError", "lastNameError", "setLastNameError", "updateProfile", "isLoading", "countries", "validate", "hasError", "handleSubmit", "e", "c"]
7
- }
@@ -1,9 +0,0 @@
1
- import type { CompleteProfileCopy } from '../../type';
2
- type Props = {
3
- copy: CompleteProfileCopy;
4
- shopifyStoreDomain?: string;
5
- onClose: () => void;
6
- onSuccess?: () => void;
7
- };
8
- export default function CompleteProfilePanel({ copy, shopifyStoreDomain, onClose, onSuccess }: Props): import("react/jsx-runtime").JSX.Element;
9
- export {};
@@ -1,2 +0,0 @@
1
- import{jsx as t,jsxs as o}from"react/jsx-runtime";import{useCallback as S,useEffect as A,useState as r}from"react";import{Button as q,Text as v}from"@anker-in/headless-ui";import{classNames as s,useHeadlessContext as H}from"@anker-in/lib";import{useUpdateProfile as I}from"./hooks/useUpdateProfile";import M from"../../../credits/context/hooks/useCountries";import{useMemberPopupContext as O}from"../../context/provider";import{ROUNDED_BRANDS as T}from"../../../../constants";function G({copy:a,shopifyStoreDomain:L="",onClose:p,onSuccess:h}){const{profile:l,fetchCreditInfo:g,alpcConfig:C}=O(),{locale:z}=C,{brand:F}=H(),n=T.includes(F),[d,k]=r(""),[i,P]=r(""),[x,_]=r(""),[m,w]=r(""),[u,y]=r(""),[f,c]=r(""),[b,N]=r(""),{updateProfile:E,isLoading:D}=I({locale:z,appName:C.appName}),{countries:R}=M({shopifyStoreDomain:L});A(()=>{l&&(k(l.first_name??""),P(l.last_name??""),_(l.phone_number??""),w(l.dob??""),y(l.country?.id??""))},[l]);const B=S(()=>{let e=!1;return d.trim()?c(""):(c(a.required),e=!0),i.trim()?N(""):(N(a.required),e=!0),e},[d,i,a.required]),U=S(async()=>{if(B())return;await E({first_name:d.trim(),last_name:i.trim(),phone_number:x,country:u,dob:m})&&(g(l?.user_id),h?.(),p())},[B,E,d,i,x,u,m,g,l,h,p]);return o("div",{className:"flex flex-col gap-[20px]",children:[a.subtitle&&t(v,{className:"text-[14px] text-[#1d1d1f]",html:a.subtitle}),o("div",{children:[t("label",{className:"block text-[14px] font-[700] text-[#1d1d1f]",children:a.email}),t("input",{className:s("mt-[8px] h-[46px] w-full border border-[#d8d8d8] bg-[#f5f5f5] px-[12px] text-[14px] text-[#999]",n?"rounded-[4px]":"rounded-none"),value:l?.email??"",disabled:!0})]}),o("div",{children:[o("label",{className:"block text-[14px] font-[700] text-[#1d1d1f]",children:[a.firstName," ",t("span",{className:"text-[#f84d4f]",children:"*"})]}),t("input",{className:s("mt-[8px] h-[46px] w-full border px-[12px] text-[14px] outline-none",f?"border-[#f84d4f]":"border-[#d8d8d8]",n?"rounded-[4px]":"rounded-none"),value:d,onChange:e=>{k(e.target.value),c("")}}),f&&t(v,{className:"mt-[4px] text-[12px] text-[#f84d4f]",html:f})]}),o("div",{children:[o("label",{className:"block text-[14px] font-[700] text-[#1d1d1f]",children:[a.lastName," ",t("span",{className:"text-[#f84d4f]",children:"*"})]}),t("input",{className:s("mt-[8px] h-[46px] w-full border px-[12px] text-[14px] outline-none",b?"border-[#f84d4f]":"border-[#d8d8d8]",n?"rounded-[4px]":"rounded-none"),value:i,onChange:e=>{P(e.target.value),N("")}}),b&&t(v,{className:"mt-[4px] text-[12px] text-[#f84d4f]",html:b})]}),o("div",{children:[t("label",{className:"block text-[14px] font-[700] text-[#1d1d1f]",children:a.birthday}),t("input",{className:s("mt-[8px] h-[46px] w-full border border-[#d8d8d8] px-[12px] text-[14px] outline-none",n?"rounded-[4px]":"rounded-none"),type:"date",value:m,onChange:e=>w(e.target.value)})]}),o("div",{children:[t("label",{className:"block text-[14px] font-[700] text-[#1d1d1f]",children:a.phone}),t("input",{className:s("mt-[8px] h-[46px] w-full border border-[#d8d8d8] px-[12px] text-[14px] outline-none",n?"rounded-[4px]":"rounded-none"),value:x,onChange:e=>_(e.target.value)})]}),o("div",{children:[t("label",{className:"block text-[14px] font-[700] text-[#1d1d1f]",children:a.country}),o("select",{className:s("mt-[8px] h-[46px] w-full border border-[#d8d8d8] px-[12px] text-[14px] outline-none",n?"rounded-[4px]":"rounded-none"),value:u,onChange:e=>y(e.target.value),children:[t("option",{value:""}),R.map(e=>t("option",{value:e.id,children:e.name},e.id))]})]}),o("div",{className:"flex gap-[12px]",children:[t(q,{variant:"secondary",size:"lg",className:"flex-1",onClick:p,disabled:D,children:a.cancel}),t(q,{variant:"primary",size:"lg",className:"flex-1",loading:D,onClick:U,children:a.save})]})]})}export{G as default};
2
- //# sourceMappingURL=CompleteProfilePanel.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../../src/components/memberPopup/panels/EarnCredits/CompleteProfilePanel.tsx"],
4
- "sourcesContent": ["import { useCallback, useEffect, useState } from 'react'\nimport { Button, Text } from '@anker-in/headless-ui'\nimport { classNames as cn, useHeadlessContext } from '@anker-in/lib'\nimport type { CompleteProfileCopy } from '../../type'\nimport { useUpdateProfile } from './hooks/useUpdateProfile'\nimport useCountries from '../../../credits/context/hooks/useCountries'\nimport { useMemberPopupContext } from '../../context/provider'\nimport { ROUNDED_BRANDS } from '../../../../constants'\n\ntype Props = {\n copy: CompleteProfileCopy\n shopifyStoreDomain?: string\n onClose: () => void\n onSuccess?: () => void\n}\n\nexport default function CompleteProfilePanel({ copy, shopifyStoreDomain = '', onClose, onSuccess }: Props) {\n const { profile, fetchCreditInfo, alpcConfig } = useMemberPopupContext()\n const { locale } = alpcConfig\n const { brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n const [firstName, setFirstName] = useState('')\n const [lastName, setLastName] = useState('')\n const [phone, setPhone] = useState('')\n const [birthDay, setBirthDay] = useState('')\n const [country, setCountry] = useState('')\n const [firstNameError, setFirstNameError] = useState('')\n const [lastNameError, setLastNameError] = useState('')\n\n const { updateProfile, isLoading } = useUpdateProfile({ locale, appName: alpcConfig.appName })\n const { countries } = useCountries({ shopifyStoreDomain })\n\n useEffect(() => {\n if (profile) {\n setFirstName(profile.first_name ?? '')\n setLastName(profile.last_name ?? '')\n setPhone(profile.phone_number ?? '')\n setBirthDay(profile.dob ?? '')\n setCountry(profile.country?.id ?? '')\n }\n }, [profile])\n\n const validate = useCallback(() => {\n let hasError = false\n if (!firstName.trim()) {\n setFirstNameError(copy.required)\n hasError = true\n } else {\n setFirstNameError('')\n }\n if (!lastName.trim()) {\n setLastNameError(copy.required)\n hasError = true\n } else {\n setLastNameError('')\n }\n return hasError\n }, [firstName, lastName, copy.required])\n\n const handleSubmit = useCallback(async () => {\n if (validate()) return\n const success = await updateProfile({\n first_name: firstName.trim(),\n last_name: lastName.trim(),\n phone_number: phone,\n country,\n dob: birthDay,\n })\n if (success) {\n fetchCreditInfo(profile?.user_id)\n onSuccess?.()\n onClose()\n }\n }, [validate, updateProfile, firstName, lastName, phone, country, birthDay, fetchCreditInfo, profile, onSuccess, onClose])\n\n return (\n <div className=\"flex flex-col gap-[20px]\">\n {copy.subtitle && (\n <Text className=\"text-[14px] text-[#1d1d1f]\" html={copy.subtitle} />\n )}\n\n <div>\n <label className=\"block text-[14px] font-[700] text-[#1d1d1f]\">{copy.email}</label>\n <input\n className={cn('mt-[8px] h-[46px] w-full border border-[#d8d8d8] bg-[#f5f5f5] px-[12px] text-[14px] text-[#999]', rounded ? 'rounded-[4px]' : 'rounded-none')}\n value={profile?.email ?? ''}\n disabled\n />\n </div>\n\n <div>\n <label className=\"block text-[14px] font-[700] text-[#1d1d1f]\">\n {copy.firstName} <span className=\"text-[#f84d4f]\">*</span>\n </label>\n <input\n className={cn(\n 'mt-[8px] h-[46px] w-full border px-[12px] text-[14px] outline-none',\n firstNameError ? 'border-[#f84d4f]' : 'border-[#d8d8d8]',\n rounded ? 'rounded-[4px]' : 'rounded-none'\n )}\n value={firstName}\n onChange={e => { setFirstName(e.target.value); setFirstNameError('') }}\n />\n {firstNameError && <Text className=\"mt-[4px] text-[12px] text-[#f84d4f]\" html={firstNameError} />}\n </div>\n\n <div>\n <label className=\"block text-[14px] font-[700] text-[#1d1d1f]\">\n {copy.lastName} <span className=\"text-[#f84d4f]\">*</span>\n </label>\n <input\n className={cn(\n 'mt-[8px] h-[46px] w-full border px-[12px] text-[14px] outline-none',\n lastNameError ? 'border-[#f84d4f]' : 'border-[#d8d8d8]',\n rounded ? 'rounded-[4px]' : 'rounded-none'\n )}\n value={lastName}\n onChange={e => { setLastName(e.target.value); setLastNameError('') }}\n />\n {lastNameError && <Text className=\"mt-[4px] text-[12px] text-[#f84d4f]\" html={lastNameError} />}\n </div>\n\n <div>\n <label className=\"block text-[14px] font-[700] text-[#1d1d1f]\">{copy.birthday}</label>\n <input\n className={cn('mt-[8px] h-[46px] w-full border border-[#d8d8d8] px-[12px] text-[14px] outline-none', rounded ? 'rounded-[4px]' : 'rounded-none')}\n type=\"date\"\n value={birthDay}\n onChange={e => setBirthDay(e.target.value)}\n />\n </div>\n\n <div>\n <label className=\"block text-[14px] font-[700] text-[#1d1d1f]\">{copy.phone}</label>\n <input\n className={cn('mt-[8px] h-[46px] w-full border border-[#d8d8d8] px-[12px] text-[14px] outline-none', rounded ? 'rounded-[4px]' : 'rounded-none')}\n value={phone}\n onChange={e => setPhone(e.target.value)}\n />\n </div>\n\n <div>\n <label className=\"block text-[14px] font-[700] text-[#1d1d1f]\">{copy.country}</label>\n <select\n className={cn('mt-[8px] h-[46px] w-full border border-[#d8d8d8] px-[12px] text-[14px] outline-none', rounded ? 'rounded-[4px]' : 'rounded-none')}\n value={country}\n onChange={e => setCountry(e.target.value)}\n >\n <option value=\"\" />\n {countries.map((c: { id: string; name: string }) => (\n <option key={c.id} value={c.id}>{c.name}</option>\n ))}\n </select>\n </div>\n\n <div className=\"flex gap-[12px]\">\n <Button\n variant=\"secondary\"\n size=\"lg\"\n className=\"flex-1\"\n onClick={onClose}\n disabled={isLoading}\n >\n {copy.cancel}\n </Button>\n <Button\n variant=\"primary\"\n size=\"lg\"\n className=\"flex-1\"\n loading={isLoading}\n onClick={handleSubmit}\n >\n {copy.save}\n </Button>\n </div>\n </div>\n )\n}\n"],
5
- "mappings": "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",
6
- "names": ["jsx", "jsxs", "useCallback", "useEffect", "useState", "Button", "Text", "cn", "useHeadlessContext", "useUpdateProfile", "useCountries", "useMemberPopupContext", "ROUNDED_BRANDS", "CompleteProfilePanel", "copy", "shopifyStoreDomain", "onClose", "onSuccess", "profile", "fetchCreditInfo", "alpcConfig", "locale", "brand", "rounded", "firstName", "setFirstName", "lastName", "setLastName", "phone", "setPhone", "birthDay", "setBirthDay", "country", "setCountry", "firstNameError", "setFirstNameError", "lastNameError", "setLastNameError", "updateProfile", "isLoading", "countries", "validate", "hasError", "handleSubmit", "c"]
7
- }