@anker-in/campaign-ui 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/chat/index.js +1 -1
- package/dist/cjs/components/chat/index.js.map +3 -3
- package/dist/cjs/components/credits/const.d.ts +1 -0
- package/dist/cjs/components/credits/const.js +2 -0
- package/dist/cjs/components/credits/const.js.map +7 -0
- package/dist/cjs/components/credits/context/hooks/useRedeemAndBuy.js +1 -1
- package/dist/cjs/components/credits/context/hooks/useRedeemAndBuy.js.map +2 -2
- package/dist/cjs/components/credits/context/hooks/useSubscribed.js +1 -1
- package/dist/cjs/components/credits/context/hooks/useSubscribed.js.map +3 -3
- package/dist/cjs/components/credits/context/provider.d.ts +8 -33
- package/dist/cjs/components/credits/context/provider.js +1 -1
- package/dist/cjs/components/credits/context/provider.js.map +3 -3
- package/dist/cjs/components/credits/creditsBanner/index.d.ts +16 -16
- package/dist/cjs/components/credits/creditsBanner/index.js +1 -1
- package/dist/cjs/components/credits/creditsBanner/index.js.map +2 -2
- package/dist/cjs/components/credits/creditsBenefits/benefitItem.js +1 -1
- package/dist/cjs/components/credits/creditsBenefits/benefitItem.js.map +3 -3
- package/dist/cjs/components/credits/creditsBenefits/index.d.ts +7 -8
- package/dist/cjs/components/credits/creditsBenefits/index.js +3 -3
- package/dist/cjs/components/credits/creditsBenefits/index.js.map +3 -3
- package/dist/cjs/components/credits/creditsCash/CreditsCash.d.ts +4 -0
- package/dist/cjs/components/credits/creditsCash/CreditsCash.js +2 -0
- package/dist/cjs/components/credits/creditsCash/CreditsCash.js.map +7 -0
- package/dist/cjs/components/credits/creditsCash/RedeemableItem.d.ts +1 -5
- package/dist/cjs/components/credits/creditsCash/RedeemableItem.js +1 -1
- package/dist/cjs/components/credits/creditsCash/RedeemableItem.js.map +3 -3
- package/dist/cjs/components/credits/creditsCash/index.d.ts +2 -11
- package/dist/cjs/components/credits/creditsCash/index.js +1 -1
- package/dist/cjs/components/credits/creditsCash/index.js.map +4 -4
- package/dist/cjs/components/credits/creditsCash/type.d.ts +1 -3
- package/dist/cjs/components/credits/creditsCash/type.js +1 -1
- package/dist/cjs/components/credits/creditsCash/type.js.map +1 -1
- package/dist/cjs/components/credits/creditsFaq/faqItem/FaqItem.js +1 -1
- package/dist/cjs/components/credits/creditsFaq/faqItem/FaqItem.js.map +3 -3
- package/dist/cjs/components/credits/creditsFaq/index.d.ts +2 -2
- package/dist/cjs/components/credits/creditsFaq/index.js +1 -1
- package/dist/cjs/components/credits/creditsFaq/index.js.map +3 -3
- package/dist/cjs/components/credits/creditsInfoCard/index.d.ts +9 -15
- package/dist/cjs/components/credits/creditsInfoCard/index.js +1 -1
- package/dist/cjs/components/credits/creditsInfoCard/index.js.map +3 -3
- package/dist/cjs/components/credits/creditsRedeemList/AddressForm/CountrySelect.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/AddressForm/CountrySelect.js.map +3 -3
- package/dist/cjs/components/credits/creditsRedeemList/AddressForm/StateSelect.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/AddressForm/StateSelect.js.map +3 -3
- package/dist/cjs/components/credits/creditsRedeemList/AddressForm/index.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/AddressForm/index.js.map +3 -3
- package/dist/cjs/components/credits/creditsRedeemList/CreditsRedeemList.d.ts +4 -0
- package/dist/cjs/components/credits/creditsRedeemList/CreditsRedeemList.js +2 -0
- package/dist/cjs/components/credits/creditsRedeemList/CreditsRedeemList.js.map +7 -0
- package/dist/cjs/components/credits/creditsRedeemList/NonProductValue.d.ts +1 -3
- package/dist/cjs/components/credits/creditsRedeemList/NonProductValue.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/NonProductValue.js.map +3 -3
- package/dist/cjs/components/credits/creditsRedeemList/RedeemCouponModal.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/RedeemCouponModal.js.map +3 -3
- package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/Address.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/Address.js.map +3 -3
- package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/Init.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/Init.js.map +3 -3
- package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/NonProductValue.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/NonProductValue.js.map +3 -3
- package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/ProductInfo.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/ProductInfo.js.map +3 -3
- package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/Success.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/Success.js.map +3 -3
- package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/index.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/index.js.map +3 -3
- package/dist/cjs/components/credits/creditsRedeemList/RedeemableItem.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/RedeemableItem.js.map +3 -3
- package/dist/cjs/components/credits/creditsRedeemList/index.d.ts +2 -12
- package/dist/cjs/components/credits/creditsRedeemList/index.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/index.js.map +4 -4
- package/dist/cjs/components/credits/creditsRedeemList/type.d.ts +1 -15
- package/dist/cjs/components/credits/creditsRedeemList/type.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/type.js.map +1 -1
- package/dist/cjs/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.d.ts +2 -0
- package/dist/cjs/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.js +2 -0
- package/dist/cjs/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.js.map +7 -0
- package/dist/cjs/components/credits/creditsWaysToGetCredits/index.d.ts +2 -2
- package/dist/cjs/components/credits/creditsWaysToGetCredits/index.js +1 -1
- package/dist/cjs/components/credits/creditsWaysToGetCredits/index.js.map +4 -4
- package/dist/cjs/components/credits/creditsWaysToGetCredits/type.d.ts +5 -15
- package/dist/cjs/components/credits/creditsWaysToGetCredits/type.js +1 -1
- package/dist/cjs/components/credits/creditsWaysToGetCredits/type.js.map +2 -2
- package/dist/cjs/components/credits/creditsWaysToGetCredits/useActions.d.ts +11 -2
- package/dist/cjs/components/credits/creditsWaysToGetCredits/useActions.js +1 -1
- package/dist/cjs/components/credits/creditsWaysToGetCredits/useActions.js.map +3 -3
- package/dist/cjs/components/credits/modal/MyRewardsModal.js +1 -1
- package/dist/cjs/components/credits/modal/MyRewardsModal.js.map +3 -3
- package/dist/cjs/components/credits/modal/activitiesModal.js +1 -1
- package/dist/cjs/components/credits/modal/activitiesModal.js.map +3 -3
- package/dist/cjs/components/credits/modal/creditsUploadReceiptModal.js +1 -1
- package/dist/cjs/components/credits/modal/creditsUploadReceiptModal.js.map +3 -3
- package/dist/cjs/components/credits/modal/modalContainer.js +1 -1
- package/dist/cjs/components/credits/modal/modalContainer.js.map +3 -3
- package/dist/cjs/components/credits/modal/rulesModal.js +1 -1
- package/dist/cjs/components/credits/modal/rulesModal.js.map +3 -3
- package/dist/cjs/components/credits/modal/subscribeModal.d.ts +15 -0
- package/dist/cjs/components/credits/modal/subscribeModal.js +2 -0
- package/dist/cjs/components/credits/modal/subscribeModal.js.map +7 -0
- package/dist/cjs/components/credits/modal/tip.js +1 -1
- package/dist/cjs/components/credits/modal/tip.js.map +3 -3
- package/dist/cjs/components/credits/type.d.ts +23 -4
- package/dist/cjs/components/credits/type.js +1 -1
- package/dist/cjs/components/credits/type.js.map +1 -1
- package/dist/cjs/components/index.d.ts +1 -0
- package/dist/cjs/components/index.js +1 -1
- package/dist/cjs/components/index.js.map +2 -2
- package/dist/cjs/components/registration/authCodeActivate/Message.js +1 -1
- package/dist/cjs/components/registration/authCodeActivate/Message.js.map +2 -2
- package/dist/cjs/components/registration/authCodeActivate/index.js +1 -1
- package/dist/cjs/components/registration/authCodeActivate/index.js.map +3 -3
- package/dist/cjs/components/registration/authCodeActivate/type.d.ts +1 -2
- package/dist/cjs/components/registration/authCodeActivate/type.js +1 -1
- package/dist/cjs/components/registration/authCodeActivate/type.js.map +1 -1
- package/dist/cjs/components/registration/context/index.d.ts +1 -0
- package/dist/cjs/components/registration/context/index.js +2 -0
- package/dist/cjs/components/registration/context/index.js.map +7 -0
- package/dist/cjs/components/registration/context/provider.d.ts +27 -0
- package/dist/cjs/components/registration/context/provider.js +2 -0
- package/dist/cjs/components/registration/context/provider.js.map +7 -0
- package/dist/cjs/components/registration/index.d.ts +1 -0
- package/dist/cjs/components/registration/index.js +1 -1
- package/dist/cjs/components/registration/index.js.map +2 -2
- package/dist/cjs/components/registration/modalContainer.d.ts +1 -2
- package/dist/cjs/components/registration/modalContainer.js +1 -1
- package/dist/cjs/components/registration/modalContainer.js.map +3 -3
- package/dist/cjs/index.d.ts +2 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/templates/credits.d.ts +59 -0
- package/dist/cjs/templates/credits.js +2 -0
- package/dist/cjs/templates/credits.js.map +7 -0
- package/dist/cjs/templates/index.d.ts +1 -0
- package/dist/cjs/templates/index.js +2 -0
- package/dist/cjs/templates/index.js.map +7 -0
- package/dist/esm/components/chat/index.js +1 -1
- package/dist/esm/components/chat/index.js.map +2 -2
- package/dist/esm/components/credits/const.d.ts +1 -0
- package/dist/esm/components/credits/const.js +2 -0
- package/dist/esm/components/credits/const.js.map +7 -0
- package/dist/esm/components/credits/context/hooks/useRedeemAndBuy.js +1 -1
- package/dist/esm/components/credits/context/hooks/useRedeemAndBuy.js.map +2 -2
- package/dist/esm/components/credits/context/hooks/useSubscribed.js +1 -1
- package/dist/esm/components/credits/context/hooks/useSubscribed.js.map +3 -3
- package/dist/esm/components/credits/context/provider.d.ts +8 -33
- package/dist/esm/components/credits/context/provider.js +1 -1
- package/dist/esm/components/credits/context/provider.js.map +3 -3
- package/dist/esm/components/credits/creditsBanner/index.d.ts +16 -16
- package/dist/esm/components/credits/creditsBanner/index.js +1 -1
- package/dist/esm/components/credits/creditsBanner/index.js.map +2 -2
- package/dist/esm/components/credits/creditsBenefits/benefitItem.js +1 -1
- package/dist/esm/components/credits/creditsBenefits/benefitItem.js.map +3 -3
- package/dist/esm/components/credits/creditsBenefits/index.d.ts +7 -8
- package/dist/esm/components/credits/creditsBenefits/index.js +3 -3
- package/dist/esm/components/credits/creditsBenefits/index.js.map +2 -2
- package/dist/esm/components/credits/creditsCash/CreditsCash.d.ts +4 -0
- package/dist/esm/components/credits/creditsCash/CreditsCash.js +2 -0
- package/dist/esm/components/credits/creditsCash/CreditsCash.js.map +7 -0
- package/dist/esm/components/credits/creditsCash/RedeemableItem.d.ts +1 -5
- package/dist/esm/components/credits/creditsCash/RedeemableItem.js +1 -1
- package/dist/esm/components/credits/creditsCash/RedeemableItem.js.map +3 -3
- package/dist/esm/components/credits/creditsCash/index.d.ts +2 -11
- package/dist/esm/components/credits/creditsCash/index.js +1 -1
- package/dist/esm/components/credits/creditsCash/index.js.map +4 -4
- package/dist/esm/components/credits/creditsCash/type.d.ts +1 -3
- package/dist/esm/components/credits/creditsFaq/faqItem/FaqItem.js +1 -1
- package/dist/esm/components/credits/creditsFaq/faqItem/FaqItem.js.map +2 -2
- package/dist/esm/components/credits/creditsFaq/index.d.ts +2 -2
- package/dist/esm/components/credits/creditsFaq/index.js +1 -1
- package/dist/esm/components/credits/creditsFaq/index.js.map +3 -3
- package/dist/esm/components/credits/creditsInfoCard/index.d.ts +9 -15
- package/dist/esm/components/credits/creditsInfoCard/index.js +1 -1
- package/dist/esm/components/credits/creditsInfoCard/index.js.map +3 -3
- package/dist/esm/components/credits/creditsRedeemList/AddressForm/CountrySelect.js +1 -1
- package/dist/esm/components/credits/creditsRedeemList/AddressForm/CountrySelect.js.map +3 -3
- package/dist/esm/components/credits/creditsRedeemList/AddressForm/StateSelect.js +1 -1
- package/dist/esm/components/credits/creditsRedeemList/AddressForm/StateSelect.js.map +3 -3
- package/dist/esm/components/credits/creditsRedeemList/AddressForm/index.js +1 -1
- package/dist/esm/components/credits/creditsRedeemList/AddressForm/index.js.map +3 -3
- package/dist/esm/components/credits/creditsRedeemList/CreditsRedeemList.d.ts +4 -0
- package/dist/esm/components/credits/creditsRedeemList/CreditsRedeemList.js +2 -0
- package/dist/esm/components/credits/creditsRedeemList/CreditsRedeemList.js.map +7 -0
- package/dist/esm/components/credits/creditsRedeemList/NonProductValue.d.ts +1 -3
- package/dist/esm/components/credits/creditsRedeemList/NonProductValue.js +1 -1
- package/dist/esm/components/credits/creditsRedeemList/NonProductValue.js.map +3 -3
- package/dist/esm/components/credits/creditsRedeemList/RedeemCouponModal.js +1 -1
- package/dist/esm/components/credits/creditsRedeemList/RedeemCouponModal.js.map +3 -3
- package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/Address.js +1 -1
- package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/Address.js.map +3 -3
- package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/Init.js +1 -1
- package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/Init.js.map +3 -3
- package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/NonProductValue.js +1 -1
- package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/NonProductValue.js.map +3 -3
- package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/ProductInfo.js +1 -1
- package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/ProductInfo.js.map +3 -3
- package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/Success.js +1 -1
- package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/Success.js.map +3 -3
- package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/index.js +1 -1
- package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/index.js.map +3 -3
- package/dist/esm/components/credits/creditsRedeemList/RedeemableItem.js +1 -1
- package/dist/esm/components/credits/creditsRedeemList/RedeemableItem.js.map +3 -3
- package/dist/esm/components/credits/creditsRedeemList/index.d.ts +2 -12
- package/dist/esm/components/credits/creditsRedeemList/index.js +1 -1
- package/dist/esm/components/credits/creditsRedeemList/index.js.map +4 -4
- package/dist/esm/components/credits/creditsRedeemList/type.d.ts +1 -15
- package/dist/esm/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.d.ts +2 -0
- package/dist/esm/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.js +2 -0
- package/dist/esm/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.js.map +7 -0
- package/dist/esm/components/credits/creditsWaysToGetCredits/index.d.ts +2 -2
- package/dist/esm/components/credits/creditsWaysToGetCredits/index.js +1 -1
- package/dist/esm/components/credits/creditsWaysToGetCredits/index.js.map +4 -4
- package/dist/esm/components/credits/creditsWaysToGetCredits/type.d.ts +5 -15
- package/dist/esm/components/credits/creditsWaysToGetCredits/type.js.map +2 -2
- package/dist/esm/components/credits/creditsWaysToGetCredits/useActions.d.ts +11 -2
- package/dist/esm/components/credits/creditsWaysToGetCredits/useActions.js +1 -1
- package/dist/esm/components/credits/creditsWaysToGetCredits/useActions.js.map +3 -3
- package/dist/esm/components/credits/modal/MyRewardsModal.js +1 -1
- package/dist/esm/components/credits/modal/MyRewardsModal.js.map +3 -3
- package/dist/esm/components/credits/modal/activitiesModal.js +1 -1
- package/dist/esm/components/credits/modal/activitiesModal.js.map +3 -3
- package/dist/esm/components/credits/modal/creditsUploadReceiptModal.js +1 -1
- package/dist/esm/components/credits/modal/creditsUploadReceiptModal.js.map +3 -3
- package/dist/esm/components/credits/modal/modalContainer.js +1 -1
- package/dist/esm/components/credits/modal/modalContainer.js.map +3 -3
- package/dist/esm/components/credits/modal/rulesModal.js +1 -1
- package/dist/esm/components/credits/modal/rulesModal.js.map +2 -2
- package/dist/esm/components/credits/modal/subscribeModal.d.ts +15 -0
- package/dist/esm/components/credits/modal/subscribeModal.js +2 -0
- package/dist/esm/components/credits/modal/subscribeModal.js.map +7 -0
- package/dist/esm/components/credits/modal/tip.js +1 -1
- package/dist/esm/components/credits/modal/tip.js.map +3 -3
- package/dist/esm/components/credits/type.d.ts +23 -4
- package/dist/esm/components/index.d.ts +1 -0
- package/dist/esm/components/index.js +1 -1
- package/dist/esm/components/index.js.map +2 -2
- package/dist/esm/components/registration/authCodeActivate/Message.js +1 -1
- package/dist/esm/components/registration/authCodeActivate/Message.js.map +2 -2
- package/dist/esm/components/registration/authCodeActivate/index.js +1 -1
- package/dist/esm/components/registration/authCodeActivate/index.js.map +3 -3
- package/dist/esm/components/registration/authCodeActivate/type.d.ts +1 -2
- package/dist/esm/components/registration/context/index.d.ts +1 -0
- package/dist/esm/components/registration/context/index.js +2 -0
- package/dist/esm/components/registration/context/index.js.map +7 -0
- package/dist/esm/components/registration/context/provider.d.ts +27 -0
- package/dist/esm/components/registration/context/provider.js +2 -0
- package/dist/esm/components/registration/context/provider.js.map +7 -0
- package/dist/esm/components/registration/index.d.ts +1 -0
- package/dist/esm/components/registration/index.js +1 -1
- package/dist/esm/components/registration/index.js.map +2 -2
- package/dist/esm/components/registration/modalContainer.d.ts +1 -2
- package/dist/esm/components/registration/modalContainer.js +1 -1
- package/dist/esm/components/registration/modalContainer.js.map +3 -3
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +2 -2
- package/dist/esm/templates/credits.d.ts +59 -0
- package/dist/esm/templates/credits.js +2 -0
- package/dist/esm/templates/credits.js.map +7 -0
- package/dist/esm/templates/index.d.ts +1 -0
- package/dist/esm/templates/index.js +2 -0
- package/dist/esm/templates/index.js.map +7 -0
- package/package.json +5 -4
- package/src/components/chat/index.tsx +1 -1
- package/src/components/credits/context/hooks/useRedeemAndBuy.ts +0 -2
- package/src/components/credits/context/hooks/useSubscribed.ts +1 -2
- package/src/components/credits/context/provider.tsx +16 -20
- package/src/components/credits/creditsBanner/index.tsx +14 -16
- package/src/components/credits/creditsBenefits/benefitItem.tsx +19 -4
- package/src/components/credits/creditsBenefits/index.tsx +6 -10
- package/src/components/credits/creditsCash/{index.tsx → CreditsCash.tsx} +8 -26
- package/src/components/credits/creditsCash/RedeemableItem.tsx +35 -17
- package/src/components/credits/creditsCash/index.ts +2 -0
- package/src/components/credits/creditsCash/type.ts +1 -3
- package/src/components/credits/creditsFaq/faqItem/FaqItem.tsx +12 -12
- package/src/components/credits/creditsFaq/index.tsx +6 -4
- package/src/components/credits/creditsInfoCard/index.tsx +38 -33
- package/src/components/credits/creditsRedeemList/AddressForm/CountrySelect.tsx +7 -3
- package/src/components/credits/creditsRedeemList/AddressForm/StateSelect.tsx +5 -1
- package/src/components/credits/creditsRedeemList/AddressForm/index.tsx +5 -4
- package/src/components/credits/creditsRedeemList/{index.tsx → CreditsRedeemList.tsx} +15 -28
- package/src/components/credits/creditsRedeemList/NonProductValue.tsx +4 -3
- package/src/components/credits/creditsRedeemList/RedeemCouponModal.tsx +6 -6
- package/src/components/credits/creditsRedeemList/RedeemProductModal/Address.tsx +14 -11
- package/src/components/credits/creditsRedeemList/RedeemProductModal/Init.tsx +4 -2
- package/src/components/credits/creditsRedeemList/RedeemProductModal/NonProductValue.tsx +3 -1
- package/src/components/credits/creditsRedeemList/RedeemProductModal/ProductInfo.tsx +9 -5
- package/src/components/credits/creditsRedeemList/RedeemProductModal/Success.tsx +4 -1
- package/src/components/credits/creditsRedeemList/RedeemProductModal/index.tsx +2 -2
- package/src/components/credits/creditsRedeemList/RedeemableItem.tsx +11 -7
- package/src/components/credits/creditsRedeemList/index.ts +2 -0
- package/src/components/credits/creditsRedeemList/type.ts +1 -16
- package/src/components/credits/creditsWaysToGetCredits/{index.tsx → CreditsWaysToGetCredits.tsx} +64 -15
- package/src/components/credits/creditsWaysToGetCredits/index.ts +2 -0
- package/src/components/credits/creditsWaysToGetCredits/type.ts +5 -15
- package/src/components/credits/creditsWaysToGetCredits/useActions.ts +22 -8
- package/src/components/credits/modal/MyRewardsModal.tsx +10 -2
- package/src/components/credits/modal/activitiesModal.tsx +8 -3
- package/src/components/credits/modal/creditsUploadReceiptModal.tsx +9 -1
- package/src/components/credits/modal/modalContainer.tsx +5 -1
- package/src/components/credits/modal/rulesModal.tsx +1 -1
- package/src/components/credits/modal/subscribeModal.tsx +201 -0
- package/src/components/credits/modal/tip.tsx +10 -1
- package/src/components/credits/type.ts +23 -4
- package/src/components/index.ts +2 -2
- package/src/components/registration/authCodeActivate/Message.tsx +43 -0
- package/src/components/registration/authCodeActivate/index.tsx +338 -0
- package/src/components/registration/authCodeActivate/type.ts +23 -0
- package/src/components/registration/context/index.tsx +1 -0
- package/src/components/registration/context/provider.tsx +86 -0
- package/src/components/registration/index.ts +2 -0
- package/src/components/registration/modalContainer.tsx +114 -0
- package/src/index.ts +2 -1
- package/src/templates/credits.tsx +134 -0
- package/src/templates/index.ts +1 -0
- package/dist/cjs/components/credits/context/hooks/useSendEmailValidation.d.ts +0 -1
- package/dist/cjs/components/credits/context/hooks/useSendEmailValidation.js +0 -2
- package/dist/cjs/components/credits/context/hooks/useSendEmailValidation.js.map +0 -7
- package/dist/cjs/components/credits/context/hooks/useSubscriptions.d.ts +0 -9
- package/dist/cjs/components/credits/context/hooks/useSubscriptions.js +0 -2
- package/dist/cjs/components/credits/context/hooks/useSubscriptions.js.map +0 -7
- package/dist/cjs/helpers/fetchResponse.d.ts +0 -14
- package/dist/cjs/helpers/fetchResponse.js +0 -2
- package/dist/cjs/helpers/fetchResponse.js.map +0 -7
- package/dist/cjs/helpers/fetcher.d.ts +0 -2
- package/dist/cjs/helpers/fetcher.js +0 -2
- package/dist/cjs/helpers/fetcher.js.map +0 -7
- package/dist/cjs/helpers/index.d.ts +0 -2
- package/dist/cjs/helpers/index.js +0 -2
- package/dist/cjs/helpers/index.js.map +0 -7
- package/dist/cjs/helpers/track.d.ts +0 -19
- package/dist/cjs/helpers/track.js +0 -2
- package/dist/cjs/helpers/track.js.map +0 -7
- package/dist/cjs/helpers/utils.d.ts +0 -3
- package/dist/cjs/helpers/utils.js +0 -2
- package/dist/cjs/helpers/utils.js.map +0 -7
- package/dist/esm/components/credits/context/hooks/useSendEmailValidation.d.ts +0 -1
- package/dist/esm/components/credits/context/hooks/useSendEmailValidation.js +0 -2
- package/dist/esm/components/credits/context/hooks/useSendEmailValidation.js.map +0 -7
- package/dist/esm/components/credits/context/hooks/useSubscriptions.d.ts +0 -9
- package/dist/esm/components/credits/context/hooks/useSubscriptions.js +0 -2
- package/dist/esm/components/credits/context/hooks/useSubscriptions.js.map +0 -7
- package/dist/esm/helpers/fetchResponse.d.ts +0 -14
- package/dist/esm/helpers/fetchResponse.js +0 -2
- package/dist/esm/helpers/fetchResponse.js.map +0 -7
- package/dist/esm/helpers/fetcher.d.ts +0 -2
- package/dist/esm/helpers/fetcher.js +0 -2
- package/dist/esm/helpers/fetcher.js.map +0 -7
- package/dist/esm/helpers/index.d.ts +0 -2
- package/dist/esm/helpers/index.js +0 -2
- package/dist/esm/helpers/index.js.map +0 -7
- package/dist/esm/helpers/track.d.ts +0 -19
- package/dist/esm/helpers/track.js +0 -2
- package/dist/esm/helpers/track.js.map +0 -7
- package/dist/esm/helpers/utils.d.ts +0 -3
- package/dist/esm/helpers/utils.js +0 -2
- package/dist/esm/helpers/utils.js.map +0 -7
- package/src/components/credits/context/hooks/useSendEmailValidation.ts +0 -20
- package/src/components/credits/context/hooks/useSubscriptions.ts +0 -29
- package/src/helpers/fetchResponse.ts +0 -35
- package/src/helpers/fetcher.ts +0 -44
- package/src/helpers/index.ts +0 -2
- package/src/helpers/track.ts +0 -73
- package/src/helpers/utils.ts +0 -8
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import { useCallback, useEffect, useState } from 'react'
|
|
2
|
+
import { useRouter } from 'next/router'
|
|
3
|
+
import { Button, Checkbox, Picture, Text } from '@anker-in/headless-ui'
|
|
4
|
+
import { classNames, fetcher, gaTrack, useHeadlessContext, ROUNDED_BRANDS } from '@anker-in/lib'
|
|
5
|
+
import Cookies from 'js-cookie'
|
|
6
|
+
import { parse } from 'query-string'
|
|
7
|
+
import sha256 from 'crypto-js/sha256'
|
|
8
|
+
import { useCreditsContext } from '../context/provider'
|
|
9
|
+
import { emailValidate } from '../context/utils'
|
|
10
|
+
import { CreditsModalContainer, type ModalContainerProps } from './modalContainer'
|
|
11
|
+
|
|
12
|
+
export type CreditsSubscribeModalCopy = {
|
|
13
|
+
title: string
|
|
14
|
+
desc?: string
|
|
15
|
+
placeholder: string
|
|
16
|
+
policy?: string
|
|
17
|
+
successTips?: string
|
|
18
|
+
dealsType?: string
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
interface CreditsSubscribeModalProps extends ModalContainerProps {
|
|
22
|
+
copy: CreditsSubscribeModalCopy
|
|
23
|
+
onSuccess?: () => void
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const getAdCookie = () => {
|
|
27
|
+
if (typeof window === 'undefined') {
|
|
28
|
+
return { register_source: '' }
|
|
29
|
+
}
|
|
30
|
+
const { search, href } = window.location || {}
|
|
31
|
+
const query = parse(search)
|
|
32
|
+
|
|
33
|
+
return {
|
|
34
|
+
fbuy_ref_code: Cookies.get('fbuy_ref_code'),
|
|
35
|
+
affiliate: Cookies.get('affiliate'),
|
|
36
|
+
ref: Cookies.get('ref_ads'),
|
|
37
|
+
inviter_code: query.ic || query.inviter_code || Cookies.get('inviter_code'),
|
|
38
|
+
register_source: query.redirect || Cookies.get('reg_source') || href,
|
|
39
|
+
deals_type: Cookies.get('deal'),
|
|
40
|
+
transfer_id: Cookies.get('transfer_id'),
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function CreditsSubscribeModal({ copy, onSuccess, ...props }: CreditsSubscribeModalProps) {
|
|
45
|
+
const { brand } = useHeadlessContext()
|
|
46
|
+
const rounded = ROUNDED_BRANDS.includes(brand)
|
|
47
|
+
const { locale } = useRouter()
|
|
48
|
+
const [policy, setPolicy] = useState(false)
|
|
49
|
+
const [email, setEmail] = useState('')
|
|
50
|
+
const [errorMessage, setErrorMessage] = useState('')
|
|
51
|
+
const [successMessage, setSuccessMessage] = useState('')
|
|
52
|
+
const [loading, setLoading] = useState(false)
|
|
53
|
+
const { profile } = useCreditsContext()
|
|
54
|
+
|
|
55
|
+
const handleEmailChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {
|
|
56
|
+
setErrorMessage('')
|
|
57
|
+
setEmail(event.target?.value?.trim())
|
|
58
|
+
}, [])
|
|
59
|
+
|
|
60
|
+
const handleSubmit = useCallback(async () => {
|
|
61
|
+
setErrorMessage('')
|
|
62
|
+
if (!email) {
|
|
63
|
+
return setErrorMessage('Please fill in your email')
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (!emailValidate(email)) {
|
|
67
|
+
return setErrorMessage('Invalid email address')
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (!policy) {
|
|
71
|
+
return setErrorMessage('Please agree to the policy')
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
setLoading(true)
|
|
75
|
+
const { register_source } = getAdCookie()
|
|
76
|
+
|
|
77
|
+
const result = await fetcher({
|
|
78
|
+
locale,
|
|
79
|
+
action: 'subscribe',
|
|
80
|
+
url: '/api/multipass/subscribe/subscribe_emails',
|
|
81
|
+
method: 'POST',
|
|
82
|
+
body: {
|
|
83
|
+
email,
|
|
84
|
+
register_source,
|
|
85
|
+
brand,
|
|
86
|
+
deals_type: copy.dealsType || 'vip_subscribe',
|
|
87
|
+
},
|
|
88
|
+
headers: {},
|
|
89
|
+
type: '',
|
|
90
|
+
})
|
|
91
|
+
setLoading(false)
|
|
92
|
+
|
|
93
|
+
if (!result.errors) {
|
|
94
|
+
setSuccessMessage(copy.successTips || 'Subscribed successfully!')
|
|
95
|
+
if (onSuccess) {
|
|
96
|
+
onSuccess()
|
|
97
|
+
}
|
|
98
|
+
setTimeout(() => {
|
|
99
|
+
setSuccessMessage('')
|
|
100
|
+
}, 3000)
|
|
101
|
+
gaTrack({
|
|
102
|
+
subscribe_hashed_email: email ? sha256(email) : '',
|
|
103
|
+
})
|
|
104
|
+
gaTrack({
|
|
105
|
+
event: 'ga4Event',
|
|
106
|
+
event_name: 'subscribe',
|
|
107
|
+
event_parameters: {
|
|
108
|
+
page_group: copy.dealsType || 'vip_subscribe',
|
|
109
|
+
position: 'pop_up',
|
|
110
|
+
},
|
|
111
|
+
})
|
|
112
|
+
gaTrack({
|
|
113
|
+
event: 'uaEvent',
|
|
114
|
+
eventCategory: 'subscribe',
|
|
115
|
+
eventAction: copy.dealsType || 'vip_subscribe',
|
|
116
|
+
eventLabel: 'pop_up',
|
|
117
|
+
nonInteraction: false,
|
|
118
|
+
})
|
|
119
|
+
} else {
|
|
120
|
+
setErrorMessage(result.errors || result.statusText)
|
|
121
|
+
}
|
|
122
|
+
}, [email, policy, locale, brand, copy.dealsType, copy.successTips, onSuccess])
|
|
123
|
+
|
|
124
|
+
useEffect(() => {
|
|
125
|
+
if (profile && profile?.email) {
|
|
126
|
+
setEmail(profile?.email)
|
|
127
|
+
}
|
|
128
|
+
}, [profile])
|
|
129
|
+
|
|
130
|
+
return (
|
|
131
|
+
<CreditsModalContainer
|
|
132
|
+
className="w-[540px] md:h-auto"
|
|
133
|
+
scrollClassName="mb-[40px] min-l:px-[48px] md:mb-[24px]"
|
|
134
|
+
titleClassName="h-[56px]"
|
|
135
|
+
useAnimation
|
|
136
|
+
animationClassName="md:translate-y-[100vh]"
|
|
137
|
+
{...props}
|
|
138
|
+
>
|
|
139
|
+
<div className="flex flex-col gap-[16px] text-center min-l:px-[16px]">
|
|
140
|
+
<div>
|
|
141
|
+
<Text className={classNames('mb-[24px] text-[22px] font-bold')} html={copy.title}></Text>
|
|
142
|
+
</div>
|
|
143
|
+
{copy.desc && (
|
|
144
|
+
<Text
|
|
145
|
+
className="mb-[8px] text-left text-[16px] font-semibold leading-[1.4] text-[#1F2021]"
|
|
146
|
+
html={copy.desc}
|
|
147
|
+
></Text>
|
|
148
|
+
)}
|
|
149
|
+
<div
|
|
150
|
+
className={classNames(
|
|
151
|
+
'relative flex h-[52px] w-full overflow-hidden rounded-[2px] md:grid md:h-auto md:grid-rows-1 md:gap-[16px]',
|
|
152
|
+
!rounded && 'rounded-none'
|
|
153
|
+
)}
|
|
154
|
+
>
|
|
155
|
+
<input
|
|
156
|
+
className={classNames(
|
|
157
|
+
'h-full flex-1 rounded-l-[2px] border-[1px] border-[#d8d8d8] px-[14px] py-[17px] text-[16px] font-semibold leading-[1] outline-none placeholder:text-[#999] md:h-[52px] md:rounded-[2px]',
|
|
158
|
+
!rounded && 'rounded-none'
|
|
159
|
+
)}
|
|
160
|
+
placeholder={copy.placeholder}
|
|
161
|
+
value={email}
|
|
162
|
+
onChange={handleEmailChange}
|
|
163
|
+
/>
|
|
164
|
+
<Button
|
|
165
|
+
variant="primary"
|
|
166
|
+
onClick={handleSubmit}
|
|
167
|
+
loading={loading}
|
|
168
|
+
className={classNames(
|
|
169
|
+
'legacy-headless-ui-primary-button !h-full !min-w-0 !rounded-l-none !rounded-r-[2px] !px-[40px] !py-[13px]',
|
|
170
|
+
!rounded && 'rounded-none'
|
|
171
|
+
)}
|
|
172
|
+
>
|
|
173
|
+
<Picture
|
|
174
|
+
source="https://cdn.shopify.com/s/files/1/0512/8568/8505/files/icon_email.png?v=1697527383"
|
|
175
|
+
className="h-[24px] w-[24px]"
|
|
176
|
+
alt="email"
|
|
177
|
+
/>
|
|
178
|
+
</Button>
|
|
179
|
+
</div>
|
|
180
|
+
<div className="flex w-full">
|
|
181
|
+
<Checkbox checked={policy} onCheckedChange={() => setPolicy(!policy)} required className="border-[#1d1d1f]" />
|
|
182
|
+
<label
|
|
183
|
+
className="text-left ml-2 text-[14px] font-semibold text-[#777] [&_a]:underline"
|
|
184
|
+
dangerouslySetInnerHTML={{
|
|
185
|
+
__html: copy?.policy || '',
|
|
186
|
+
}}
|
|
187
|
+
/>
|
|
188
|
+
</div>
|
|
189
|
+
<div
|
|
190
|
+
className={classNames(
|
|
191
|
+
'w-full text-left text-[16px] font-semibold',
|
|
192
|
+
errorMessage && 'text-[#F84D4F]',
|
|
193
|
+
successMessage && 'text-[#52C41A]'
|
|
194
|
+
)}
|
|
195
|
+
>
|
|
196
|
+
<Text html={successMessage || errorMessage || ''} />
|
|
197
|
+
</div>
|
|
198
|
+
</div>
|
|
199
|
+
</CreditsModalContainer>
|
|
200
|
+
)
|
|
201
|
+
}
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
import { useHeadlessContext, ROUNDED_BRANDS } from '@anker-in/lib'
|
|
1
2
|
import classNames from 'classnames'
|
|
2
3
|
import { useState } from 'react'
|
|
3
4
|
|
|
4
5
|
function Tip({ info, index }: { info: string; index: number }) {
|
|
5
6
|
const [show, setShow] = useState(false)
|
|
6
7
|
|
|
8
|
+
const { brand } = useHeadlessContext()
|
|
9
|
+
const rounded = ROUNDED_BRANDS.includes(brand)
|
|
10
|
+
|
|
7
11
|
return (
|
|
8
12
|
<div
|
|
9
13
|
className="relative ml-[6px] cursor-pointer"
|
|
@@ -81,7 +85,12 @@ function Tip({ info, index }: { info: string; index: number }) {
|
|
|
81
85
|
}
|
|
82
86
|
}
|
|
83
87
|
></i>
|
|
84
|
-
<p
|
|
88
|
+
<p
|
|
89
|
+
className={classNames(
|
|
90
|
+
'relative block rounded-[4px] bg-white px-[14px] py-[12px]',
|
|
91
|
+
!rounded && 'rounded-none'
|
|
92
|
+
)}
|
|
93
|
+
>
|
|
85
94
|
<span className="block text-left text-[14px] font-semibold leading-[1.4] text-[#333]">{info}</span>
|
|
86
95
|
</p>
|
|
87
96
|
</div>
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { Product, ProductVariant } from '@anker-in/lib'
|
|
2
2
|
import type { AlpcConsumeType, ConsumeType } from './context/const'
|
|
3
|
+
import { MyActivitiesMetafields } from './modal/activitiesModal'
|
|
4
|
+
import { MyRewardsMetafields } from './modal/MyRewardsModal'
|
|
3
5
|
|
|
4
6
|
export interface Subscription {
|
|
5
7
|
preference: {
|
|
@@ -49,12 +51,29 @@ export interface ShippingZone {
|
|
|
49
51
|
}
|
|
50
52
|
|
|
51
53
|
export type CreditsPageCommon = {
|
|
52
|
-
pointUnit
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
54
|
+
pointUnit?: string
|
|
55
|
+
infoIcon?: string
|
|
56
|
+
ruleLabel?: string
|
|
57
|
+
soldOut?: string
|
|
58
|
+
copied?: string
|
|
59
|
+
off?: string
|
|
60
|
+
copy?: string
|
|
61
|
+
giftCardLabel?: string
|
|
62
|
+
imageMapping?: {
|
|
56
63
|
[key in ConsumeType]: {
|
|
57
64
|
url: string
|
|
58
65
|
}
|
|
59
66
|
}
|
|
67
|
+
activitiesModal?: MyActivitiesMetafields
|
|
68
|
+
rewardsModal?: MyRewardsMetafields
|
|
69
|
+
insufficientCredits?: string
|
|
70
|
+
validatorInfo?: {
|
|
71
|
+
addressInfo: {
|
|
72
|
+
name: string
|
|
73
|
+
country: string
|
|
74
|
+
province: string
|
|
75
|
+
city: string
|
|
76
|
+
address: string
|
|
77
|
+
}
|
|
78
|
+
}
|
|
60
79
|
}
|
package/src/components/index.ts
CHANGED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export const Message = ({ status, message }: { status: string; message: string }) => {
|
|
2
|
+
return (
|
|
3
|
+
status && (
|
|
4
|
+
<div className="absolute left-5 right-5 top-2 flex items-center gap-2 rounded-sm bg-white px-4 py-3 shadow-lg min-md:left-12 min-md:right-12">
|
|
5
|
+
<div className="flex-shrink-0">
|
|
6
|
+
{status === 'success' && (
|
|
7
|
+
<span className="inline-block h-5 w-5">
|
|
8
|
+
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
9
|
+
<g clipPath="url(#clip0_205_16388)">
|
|
10
|
+
<circle cx="10" cy="10" r="10" fill="#1677FF" />
|
|
11
|
+
<path d="M10 16L10 10" stroke="white" strokeWidth="2" strokeLinecap="round" />
|
|
12
|
+
<circle cx="10" cy="6.5" r="1.5" transform="rotate(-180 10 6.5)" fill="white" />
|
|
13
|
+
</g>
|
|
14
|
+
<defs>
|
|
15
|
+
<clipPath id="clip0_205_16388">
|
|
16
|
+
<rect width="20" height="20" fill="white" />
|
|
17
|
+
</clipPath>
|
|
18
|
+
</defs>
|
|
19
|
+
</svg>
|
|
20
|
+
</span>
|
|
21
|
+
)}
|
|
22
|
+
{status === 'error' && (
|
|
23
|
+
<span className="inline-block h-5 w-5">
|
|
24
|
+
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
25
|
+
<g clipPath="url(#clip0_205_16236)">
|
|
26
|
+
<circle cx="10" cy="10" r="10" fill="#F84D4F" />
|
|
27
|
+
<path d="M10 5L10 11" stroke="white" strokeWidth="2" strokeLinecap="round" />
|
|
28
|
+
<circle cx="10" cy="14.5" r="1.5" fill="white" />
|
|
29
|
+
</g>
|
|
30
|
+
<defs>
|
|
31
|
+
<clipPath id="clip0_205_16236">
|
|
32
|
+
<rect width="20" height="20" fill="white" />
|
|
33
|
+
</clipPath>
|
|
34
|
+
</defs>
|
|
35
|
+
</svg>
|
|
36
|
+
</span>
|
|
37
|
+
)}
|
|
38
|
+
</div>
|
|
39
|
+
<p className="text-sm font-semibold leading-[120%] text-[#333]">{message}</p>
|
|
40
|
+
</div>
|
|
41
|
+
)
|
|
42
|
+
)
|
|
43
|
+
}
|
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
import { Button, Text } from '@anker-in/headless-ui'
|
|
2
|
+
import {
|
|
3
|
+
useSendEmailValidation,
|
|
4
|
+
gaTrack,
|
|
5
|
+
classNames as cn,
|
|
6
|
+
useHeadlessContext,
|
|
7
|
+
useEmailValidation,
|
|
8
|
+
useCountDown,
|
|
9
|
+
ROUNDED_BRANDS,
|
|
10
|
+
} from '@anker-in/lib'
|
|
11
|
+
import React, { useCallback, useEffect, useRef, useState } from 'react'
|
|
12
|
+
import { Message } from './Message'
|
|
13
|
+
import { AuthCodeActivateProps } from './type'
|
|
14
|
+
import { useRegistration } from '../context'
|
|
15
|
+
import { RegistrationModalContainer } from '../modalContainer'
|
|
16
|
+
|
|
17
|
+
export const AuthCodeActivate: React.FC<AuthCodeActivateProps> = ({ copy }) => {
|
|
18
|
+
const { locale, brand } = useHeadlessContext()
|
|
19
|
+
const { email, authCodeActivate } = useRegistration()
|
|
20
|
+
const rounded = ROUNDED_BRANDS.includes(brand)
|
|
21
|
+
|
|
22
|
+
const { activeToken, setActiveToken, setIsSendingActivateEmail, setIsActivateSuccess, onAuthSuccess, autoSendEmail } =
|
|
23
|
+
authCodeActivate
|
|
24
|
+
|
|
25
|
+
const { isMutating: emailValidationLoading, trigger: triggerEmailValidation } = useEmailValidation()
|
|
26
|
+
|
|
27
|
+
const {
|
|
28
|
+
isMutating: isSendingEmail,
|
|
29
|
+
trigger: triggerSendValidationEmail,
|
|
30
|
+
data: sendEmailData,
|
|
31
|
+
} = useSendEmailValidation()
|
|
32
|
+
|
|
33
|
+
const [messageText, setMessageText] = useState('')
|
|
34
|
+
const [messageStatus, setMessageStatus] = useState('')
|
|
35
|
+
const { startCountDown: isStartCountDown, startAction: startCountDown, countDown } = useCountDown(60)
|
|
36
|
+
|
|
37
|
+
const [error, setError] = useState('')
|
|
38
|
+
const [focusIndex, setFocusIndex] = useState(0)
|
|
39
|
+
const [codeArray, setCodeArray] = useState(new Array(6).fill(''))
|
|
40
|
+
|
|
41
|
+
const inputRefs = useRef<HTMLInputElement[]>([])
|
|
42
|
+
const code = codeArray.join('')
|
|
43
|
+
|
|
44
|
+
useEffect(() => {
|
|
45
|
+
if (inputRefs.current[focusIndex]) {
|
|
46
|
+
inputRefs.current[focusIndex].focus()
|
|
47
|
+
}
|
|
48
|
+
}, [focusIndex])
|
|
49
|
+
|
|
50
|
+
useEffect(() => {
|
|
51
|
+
if (sendEmailData?.data?.data?.active_token) {
|
|
52
|
+
setActiveToken(sendEmailData.data.data.active_token)
|
|
53
|
+
}
|
|
54
|
+
}, [sendEmailData?.data?.data?.active_token])
|
|
55
|
+
|
|
56
|
+
useEffect(() => {
|
|
57
|
+
setIsSendingActivateEmail(isSendingEmail)
|
|
58
|
+
}, [isSendingEmail, setIsSendingActivateEmail])
|
|
59
|
+
|
|
60
|
+
// 自动发送邮箱验证码
|
|
61
|
+
useEffect(() => {
|
|
62
|
+
if (autoSendEmail && email) {
|
|
63
|
+
triggerSendValidationEmail(
|
|
64
|
+
{
|
|
65
|
+
email: email,
|
|
66
|
+
data: {
|
|
67
|
+
redirect_url: `${window?.location?.origin}${window?.location?.pathname}`,
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
onSuccess: () => {
|
|
72
|
+
setMessageStatus('success')
|
|
73
|
+
setMessageText(copy?.sendEmailSuccessMessage || '')
|
|
74
|
+
startCountDown()
|
|
75
|
+
setTimeout(() => {
|
|
76
|
+
setMessageStatus('')
|
|
77
|
+
setMessageText('')
|
|
78
|
+
}, 5000)
|
|
79
|
+
},
|
|
80
|
+
}
|
|
81
|
+
)
|
|
82
|
+
}
|
|
83
|
+
}, [autoSendEmail, email, triggerSendValidationEmail])
|
|
84
|
+
|
|
85
|
+
const handleSendAgain = useCallback(async () => {
|
|
86
|
+
if (!email) return
|
|
87
|
+
// 发起网络请求
|
|
88
|
+
await triggerSendValidationEmail(
|
|
89
|
+
{
|
|
90
|
+
email: email,
|
|
91
|
+
data: {
|
|
92
|
+
redirect_url: `${window?.location?.origin}${window?.location?.pathname}`,
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
onSuccess: () => {
|
|
97
|
+
setMessageStatus('success')
|
|
98
|
+
setMessageText(copy?.sendEmailSuccessMessage || '')
|
|
99
|
+
startCountDown()
|
|
100
|
+
setTimeout(() => {
|
|
101
|
+
setMessageStatus('')
|
|
102
|
+
setMessageText('')
|
|
103
|
+
}, 5000)
|
|
104
|
+
},
|
|
105
|
+
}
|
|
106
|
+
)
|
|
107
|
+
gaTrack({
|
|
108
|
+
event: 'ga4Event',
|
|
109
|
+
event_name: 'lp_button',
|
|
110
|
+
event_parameters: {
|
|
111
|
+
page_group: 'reg_sub_pop',
|
|
112
|
+
position: 'auth_code',
|
|
113
|
+
button_name: 'sent_again',
|
|
114
|
+
},
|
|
115
|
+
})
|
|
116
|
+
}, [email, triggerSendValidationEmail])
|
|
117
|
+
|
|
118
|
+
const handleInputCodeChange = (event: React.ChangeEvent<HTMLInputElement>, index: number) => {
|
|
119
|
+
const { value } = event.target
|
|
120
|
+
|
|
121
|
+
setError('')
|
|
122
|
+
|
|
123
|
+
if (Number.isNaN(Number(value))) {
|
|
124
|
+
return
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
if (value.length > 1) {
|
|
128
|
+
if (index < codeArray.length - 1) {
|
|
129
|
+
if (!codeArray[index + 1]) {
|
|
130
|
+
setFocusIndex(index + 1)
|
|
131
|
+
setCodeArray(old => {
|
|
132
|
+
const newCode = [...old]
|
|
133
|
+
newCode[index] = value[0]
|
|
134
|
+
if (value.length > 1) {
|
|
135
|
+
newCode[index + 1] = value[1]
|
|
136
|
+
}
|
|
137
|
+
return newCode
|
|
138
|
+
})
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return
|
|
142
|
+
}
|
|
143
|
+
const newCode = [...codeArray]
|
|
144
|
+
newCode[index] = value
|
|
145
|
+
setCodeArray(newCode)
|
|
146
|
+
if (value) {
|
|
147
|
+
if (index < codeArray.length - 1 && !codeArray[index + 1]) {
|
|
148
|
+
setFocusIndex(index + 1)
|
|
149
|
+
}
|
|
150
|
+
} else if (index > 0) {
|
|
151
|
+
setFocusIndex(index - 1)
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
const handleAuthCodeSubmit = useCallback(async () => {
|
|
156
|
+
if (!code?.length) {
|
|
157
|
+
setError(copy?.codeEmptyError || '')
|
|
158
|
+
return
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
if (code.length < 6) {
|
|
162
|
+
setError(copy?.incorrectCodeError || '')
|
|
163
|
+
return
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
if (activeToken) {
|
|
167
|
+
await triggerEmailValidation(
|
|
168
|
+
{
|
|
169
|
+
token: activeToken,
|
|
170
|
+
code: code,
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
onSuccess: data => {
|
|
174
|
+
if (data.status >= 200 && data.status < 300) {
|
|
175
|
+
setMessageStatus('success')
|
|
176
|
+
setMessageText(copy?.authSuccessMessage || '')
|
|
177
|
+
setIsActivateSuccess(true)
|
|
178
|
+
if (onAuthSuccess) {
|
|
179
|
+
onAuthSuccess()
|
|
180
|
+
} else {
|
|
181
|
+
setTimeout(() => {
|
|
182
|
+
authCodeActivate.close()
|
|
183
|
+
}, 3000)
|
|
184
|
+
}
|
|
185
|
+
} else {
|
|
186
|
+
if (data?.data?.error_code === '104') {
|
|
187
|
+
if (onAuthSuccess) {
|
|
188
|
+
onAuthSuccess()
|
|
189
|
+
} else {
|
|
190
|
+
setTimeout(() => {
|
|
191
|
+
authCodeActivate.close()
|
|
192
|
+
}, 3000)
|
|
193
|
+
}
|
|
194
|
+
} else if (data?.data?.error_code === '142') {
|
|
195
|
+
setError(copy?.incorrectCodeError || 'Invalid verification code.')
|
|
196
|
+
} else if (data?.data?.error_code === '154') {
|
|
197
|
+
setError(copy?.expiredCodeMessage || '')
|
|
198
|
+
} else {
|
|
199
|
+
setError(copy?.sendEmailErrorMessage || '')
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
},
|
|
203
|
+
}
|
|
204
|
+
)
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// 设置定时器清除状态信息
|
|
208
|
+
let timer = setTimeout(() => {
|
|
209
|
+
setMessageStatus('')
|
|
210
|
+
setMessageText('')
|
|
211
|
+
clearTimeout(timer)
|
|
212
|
+
}, 5000)
|
|
213
|
+
|
|
214
|
+
gaTrack({
|
|
215
|
+
event: 'ga4Event',
|
|
216
|
+
event_name: 'lp_button',
|
|
217
|
+
event_parameters: {
|
|
218
|
+
page_group: 'reg_sub_pop',
|
|
219
|
+
position: 'auth_code',
|
|
220
|
+
button_name: 'check_and_active',
|
|
221
|
+
},
|
|
222
|
+
})
|
|
223
|
+
}, [
|
|
224
|
+
code,
|
|
225
|
+
copy?.codeEmptyError,
|
|
226
|
+
copy?.authSuccessMessage,
|
|
227
|
+
copy?.incorrectCodeError,
|
|
228
|
+
copy?.expiredCodeMessage,
|
|
229
|
+
copy?.sendEmailErrorMessage,
|
|
230
|
+
locale,
|
|
231
|
+
activeToken,
|
|
232
|
+
])
|
|
233
|
+
|
|
234
|
+
return (
|
|
235
|
+
<RegistrationModalContainer isOpen={authCodeActivate.isOpen} onClose={authCodeActivate.close}>
|
|
236
|
+
<div className="relative">
|
|
237
|
+
<div>
|
|
238
|
+
<Text
|
|
239
|
+
className="text-[22px] font-extrabold leading-[120%] text-[#333] min-l:text-[24px] [&_abbr]:text-[#005d8e]"
|
|
240
|
+
html={copy?.authCodeTitle}
|
|
241
|
+
/>
|
|
242
|
+
<Text
|
|
243
|
+
as="p"
|
|
244
|
+
className="mt-3 text-[14px] font-semibold leading-[140%] text-[rgba(51,51,51,0.75)] min-l:text-base [&_abbr]:text-[#333]"
|
|
245
|
+
html={copy?.authCodeDesc?.replace('%email%', email || '')}
|
|
246
|
+
/>
|
|
247
|
+
</div>
|
|
248
|
+
<div className="mt-6">
|
|
249
|
+
<Text
|
|
250
|
+
className="mt-4 text-[14px] !font-bold font-semibold leading-[140%] text-[#333] min-l:mt-6"
|
|
251
|
+
html={copy?.enterActiveCodeText}
|
|
252
|
+
/>
|
|
253
|
+
<div className="my-3 grid grid-cols-6 gap-2">
|
|
254
|
+
{codeArray.map((item, index) => (
|
|
255
|
+
<div key={index} className="col-span-1 aspect-1 text-[#555]">
|
|
256
|
+
<input
|
|
257
|
+
ref={inputRef => {
|
|
258
|
+
if (inputRef) {
|
|
259
|
+
inputRefs.current[index] = inputRef
|
|
260
|
+
}
|
|
261
|
+
}}
|
|
262
|
+
key={index}
|
|
263
|
+
type="tel"
|
|
264
|
+
className={cn(
|
|
265
|
+
'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',
|
|
266
|
+
rounded && 'rounded-[12px]'
|
|
267
|
+
)}
|
|
268
|
+
value={item}
|
|
269
|
+
autoComplete="false"
|
|
270
|
+
autoCorrect="false"
|
|
271
|
+
spellCheck="false"
|
|
272
|
+
autoCapitalize="false"
|
|
273
|
+
onChange={event => handleInputCodeChange(event, index)}
|
|
274
|
+
onFocus={() => {
|
|
275
|
+
setFocusIndex(index)
|
|
276
|
+
}}
|
|
277
|
+
onPaste={event => {
|
|
278
|
+
const paste = event.clipboardData.getData('text')
|
|
279
|
+
if (!Number.isNaN(Number(paste))) {
|
|
280
|
+
const pastedCode = paste.split('').slice(0, 6)
|
|
281
|
+
setCodeArray(pastedCode.concat(Array(6 - pastedCode.length).fill('')))
|
|
282
|
+
if (pastedCode.length <= codeArray.length) {
|
|
283
|
+
setFocusIndex(pastedCode.length - 1)
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}}
|
|
287
|
+
onKeyDown={event => {
|
|
288
|
+
const { value } = event.target as HTMLInputElement
|
|
289
|
+
if (event.key === 'Backspace' && !value && index > 0) {
|
|
290
|
+
setFocusIndex(index - 1)
|
|
291
|
+
}
|
|
292
|
+
}}
|
|
293
|
+
/>
|
|
294
|
+
</div>
|
|
295
|
+
))}
|
|
296
|
+
</div>
|
|
297
|
+
|
|
298
|
+
{error && <Text className="mb-3 text-[14px] font-semibold leading-[120%] text-[#f84d4f]" html={error} />}
|
|
299
|
+
{copy?.authCodeContent && (
|
|
300
|
+
<ul
|
|
301
|
+
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-["•"]'
|
|
302
|
+
dangerouslySetInnerHTML={{ __html: copy?.authCodeContent }}
|
|
303
|
+
/>
|
|
304
|
+
)}
|
|
305
|
+
</div>
|
|
306
|
+
<div className="mt-4 min-l:mt-6">
|
|
307
|
+
<Text className="text-base font-semibold leading-[100%] text-[#333]" html={copy?.authCodeReceiveText} />{' '}
|
|
308
|
+
{isStartCountDown ? (
|
|
309
|
+
<Text
|
|
310
|
+
html={copy?.retrieveText?.replace('%countdownTime%', countDown.toString())}
|
|
311
|
+
className="cursor-pointer text-base font-semibold leading-[100%] !text-brand text-[#005d8e] text-[#333] underline"
|
|
312
|
+
/>
|
|
313
|
+
) : (
|
|
314
|
+
<Text
|
|
315
|
+
onClick={handleSendAgain}
|
|
316
|
+
className={cn(
|
|
317
|
+
'cursor-pointer text-base font-semibold leading-[100%] !text-brand text-[#005d8e] text-[#333] underline',
|
|
318
|
+
{
|
|
319
|
+
'pointer-events-none': isStartCountDown || isSendingEmail,
|
|
320
|
+
}
|
|
321
|
+
)}
|
|
322
|
+
html={copy?.sendAgainText}
|
|
323
|
+
/>
|
|
324
|
+
)}
|
|
325
|
+
<Button
|
|
326
|
+
type="submit"
|
|
327
|
+
loading={emailValidationLoading}
|
|
328
|
+
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"
|
|
329
|
+
onClick={handleAuthCodeSubmit}
|
|
330
|
+
>
|
|
331
|
+
{copy.buttonText}
|
|
332
|
+
</Button>
|
|
333
|
+
</div>
|
|
334
|
+
<Message status={messageStatus} message={messageText} />
|
|
335
|
+
</div>
|
|
336
|
+
</RegistrationModalContainer>
|
|
337
|
+
)
|
|
338
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export type AuthCodeActivateCopy = {
|
|
2
|
+
authCodeTitle?: string
|
|
3
|
+
authCodeDesc?: string
|
|
4
|
+
enterActiveCodeText?: string
|
|
5
|
+
authCodeContent?: string
|
|
6
|
+
authCodeReceiveText?: string
|
|
7
|
+
sendAgainText?: string
|
|
8
|
+
buttonText?: string
|
|
9
|
+
note?: string
|
|
10
|
+
codeEmptyError?: string
|
|
11
|
+
incorrectCodeError?: string
|
|
12
|
+
retrieveText?: string
|
|
13
|
+
authSuccessMessage?: string
|
|
14
|
+
sendEmailSuccessMessage?: string
|
|
15
|
+
sendEmailErrorMessage?: string
|
|
16
|
+
beenActivatedMessage?: string
|
|
17
|
+
invalidCodeMessage?: string
|
|
18
|
+
expiredCodeMessage?: string
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export type AuthCodeActivateProps = {
|
|
22
|
+
copy: AuthCodeActivateCopy
|
|
23
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './provider'
|