{"version":3,"file":"verify-code-login-c88c05d6.js","sources":["../../../../packages/login/component/web/verify-code-login.tsx"],"sourcesContent":["import { CaptchaSendType } from '@next-space/fe-api-idl';\nimport classnames from 'classnames';\nimport type { FC } from 'react';\nimport { useEffect, useMemo, useState } from 'react';\nimport { INVITE_CODE_REQUIRED_TEXT, INVITE_CODE_TEXT, VITE_PRODUCT_NAME } from '../../const';\nimport { useCheckComplete } from '../../hook/use-check-complete';\nimport { useInitYidunCaptcha } from '../../hook/use-init-yidun-captcha';\nimport { useLogin } from '../../hook/use-login';\nimport { Images } from '../../images';\nimport type { CombineViewProps } from '../../types';\nimport { AccountStatus, ViewType } from '../../types';\nimport { Button } from '../../uikit/web/button';\nimport { CaptchaComp } from '../../uikit/web/captcha';\nimport { Input } from '../../uikit/web/input';\nimport { Title } from '../../uikit/web/title';\nimport { tmpAccount } from '../../utils';\nimport { cx } from '@flowus/common/cx';\n\n/**验证码登录/注册 */\nexport const VerifyCodeLogin: FC = (props) => {\n const {\n canSendVerifyCode,\n accountStatus,\n account,\n accountError,\n setAccount,\n verifyCode,\n verifyCodeError,\n setVerifyCode,\n password,\n passwordError,\n setPassword,\n next,\n sendVerifyCode,\n authorization,\n inviteCode,\n setPromotionChannel,\n setInviteCode,\n isPhoneNumber,\n setYidunCaptcha,\n } = useLogin({\n account: sessionStorage.getItem(tmpAccount) ?? undefined,\n ...props,\n newInviteCode: props.inviteCode,\n });\n const checkComplete = useCheckComplete(props.switchViewType);\n const [showPassword, setShowPassword] = useState(false);\n const hideVerifyCodeOrHasVerifyCode = accountStatus === undefined || verifyCode.length > 0;\n const hidePasswordOrHasPassword = accountStatus !== AccountStatus.CAN_SIGN || password.length > 0;\n const allowClick =\n account.length > 0 && hideVerifyCodeOrHasVerifyCode && hidePasswordOrHasPassword;\n const alreadyHasInviteCode = Boolean(props.inviteCode);\n const { initNECaptcha } = useInitYidunCaptcha(setYidunCaptcha);\n\n const labelInfo = useMemo(() => {\n switch (accountStatus) {\n case AccountStatus.CAN_LOGIN:\n return { title: '👋 欢迎回来', btnText: '登录' };\n case AccountStatus.CAN_SIGN:\n return { title: '🎉 欢迎加入', btnText: '继续' };\n default:\n return {\n title: props.defaultTitle || ['欢迎来到', VITE_PRODUCT_NAME ?? 'FlowUs'].join(''),\n btnText: '继续',\n };\n }\n }, [accountStatus, props.defaultTitle]);\n\n useEffect(() => {\n if (accountStatus === AccountStatus.NEED_BIND_PHONE) {\n props.switchViewType({\n type: ViewType.BIND_PHONE,\n props: {\n authorization,\n password,\n },\n });\n }\n }, [accountStatus, props, authorization, setPassword, password]);\n\n useEffect(() => {\n if (accountStatus === AccountStatus.CAN_SIGN) {\n setPassword('');\n }\n }, [accountStatus, setPassword]);\n\n useEffect(() => {\n setPromotionChannel(props.promotionChannel);\n }, [props.promotionChannel, setPromotionChannel]);\n\n const tryLogin = async () => {\n const user = await next();\n if (user) {\n props.onRegister?.(user);\n }\n if (user && (!props.complete || checkComplete(user))) {\n props.onSuccess?.(user);\n }\n };\n\n useEffect(() => {\n if (accountStatus === AccountStatus.CAN_SIGN && isPhoneNumber()) {\n initNECaptcha();\n }\n }, [accountStatus, initNECaptcha, isPhoneNumber]);\n\n return (\n
\n \n <div className=\"sm:px5\">\n <Input\n warning={accountError}\n className=\"t-input-account w-full h-[50px] h-md:text-h4 px-3\"\n inputClassName=\"px-0\"\n autoFocus\n type={props.quickRegister ? 'number' : 'text'}\n maxLength={props.quickRegister ? 11 : undefined}\n onEnter={tryLogin}\n value={account}\n placeholder={props.quickRegister ? '请输入手机号' : '请输入手机号/邮箱'}\n onChange={(v) => {\n setAccount(v.toString());\n }}\n />\n {accountStatus !== undefined && (\n <>\n <div id=\"yidun-captcha\" className=\"mt-5\" />\n <Input\n autoFocus\n type=\"number\"\n value={verifyCode}\n maxLength={6}\n warning={verifyCodeError}\n onEnter={tryLogin}\n className=\"t-input-verify-code w-full h-[50px] mt-5 h-md:text-h4 px-3 input-verify-code\"\n inputClassName=\"px-0\"\n placeholder=\"请输入验证码\"\n onChange={(v) => setVerifyCode(v.toString())}\n addonAfter={\n <CaptchaComp\n //未注册且图形验证码通过之后才允许发手机验证码,否则就是disable\n disable={!canSendVerifyCode}\n autoClick={canSendVerifyCode}\n onSendVerifyCode={() => {\n return sendVerifyCode(\n accountStatus === AccountStatus.CAN_SIGN\n ? CaptchaSendType.SIGNUP\n : CaptchaSendType.LOGIN\n );\n }}\n />\n }\n />\n </>\n )}\n {accountStatus === AccountStatus.CAN_SIGN && (\n <>\n <Input\n inputType={showPassword ? 'text' : 'password'}\n warning={passwordError}\n className=\"t-input-password w-full h-[50px] mt-5 h-md:text-h4 px-3 input-password\"\n onEnter={tryLogin}\n value={password}\n placeholder=\"请输入密码\"\n onChange={setPassword}\n addonAfter={\n <img\n src={showPassword ? Images.IcMenuItemHide : Images.IcMenuItemShow}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setShowPassword(!showPassword);\n }}\n className=\"w-5 h-5 cursor-pointer absolute right-2.5 text-grey3\"\n />\n }\n />\n <div className=\"text-t2 text-grey3 mt-2.5\">\n 6-16位密码,需包含数字、英文大写字母和小写字母\n </div>\n {isPhoneNumber() && (\n <Input\n readonly={alreadyHasInviteCode && !__PRIVATE__}\n value={inviteCode}\n maxLength={6}\n onEnter={tryLogin}\n className={cx(\n 't-input-invite-code w-full h-[50px] mt-5 h-md:text-h4 px-3',\n props.inviteCodeRequired && '!border-red'\n )}\n inputClassName={cx('px-0', props.inviteCodeRequired && 'placeholder:text-red')}\n placeholder={\n props.inviteCodeRequired ? INVITE_CODE_REQUIRED_TEXT : INVITE_CODE_TEXT\n }\n onChange={setInviteCode}\n />\n )}\n </>\n )}\n <Button\n disable={!allowClick}\n onClick={tryLogin}\n colorType=\"primary\"\n className={classnames('t-btn-login mt-7 w-full h-[50px] text-t1-medium h-md:text-h4', {\n 'opacity-[0.3]': !allowClick,\n })}\n size=\"auto\"\n >\n {labelInfo.btnText}\n </Button>\n </div>\n </div>\n );\n};\n"],"names":["VerifyCodeLogin","props","canSendVerifyCode","accountStatus","account","accountError","setAccount","verifyCode","verifyCodeError","setVerifyCode","password","passwordError","setPassword","next","sendVerifyCode","authorization","inviteCode","setPromotionChannel","setInviteCode","isPhoneNumber","setYidunCaptcha","useLogin","_a","tmpAccount","checkComplete","useCheckComplete","showPassword","setShowPassword","useState","hideVerifyCodeOrHasVerifyCode","hidePasswordOrHasPassword","AccountStatus","allowClick","alreadyHasInviteCode","initNECaptcha","useInitYidunCaptcha","labelInfo","useMemo","VITE_PRODUCT_NAME","useEffect","ViewType","tryLogin","user","_b","classnames","jsx","Title","cx","jsxs","Input","v","Fragment","CaptchaComp","CaptchaSendType","Images","e","INVITE_CODE_REQUIRED_TEXT","INVITE_CODE_TEXT","Button"],"mappings":"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"}