import type { FormEvent } from 'react'; import type { FC } from '../../lib/teact/teact'; import React, { useState, useEffect, useCallback, memo, useRef, } from '../../lib/teact/teact'; import { getActions, withGlobal } from '../../global'; import type { GlobalState } from '../../global/types'; import { IS_TOUCH_ENV } from '../../util/environment'; import { pick } from '../../util/iteratees'; import renderText from '../common/helpers/renderText'; import useHistoryBack from '../../hooks/useHistoryBack'; import useLang from '../../hooks/useLang'; import InputText from '../ui/InputText'; import Loading from '../ui/Loading'; import TrackingMonkey from '../common/TrackingMonkey'; type StateProps = Pick; const CODE_LENGTH = 5; const AuthCode: FC = ({ authPhoneNumber, authIsCodeViaApp, authIsLoading, authError, }) => { const { setAuthCode, returnToAuthPhoneNumber, clearAuthError, } = getActions(); const lang = useLang(); // eslint-disable-next-line no-null/no-null const inputRef = useRef(null); const [code, setCode] = useState(''); const [isTracking, setIsTracking] = useState(false); const [trackingDirection, setTrackingDirection] = useState(1); useEffect(() => { if (!IS_TOUCH_ENV) { inputRef.current!.focus(); } }, []); useHistoryBack({ isActive: true, onBack: returnToAuthPhoneNumber, }); const onCodeChange = useCallback((e: FormEvent) => { if (authError) { clearAuthError(); } const { currentTarget: target } = e; target.value = target.value.replace(/[^\d]+/, '').substr(0, CODE_LENGTH); if (target.value === code) { return; } setCode(target.value); if (!isTracking) { setIsTracking(true); } else if (!target.value.length) { setIsTracking(false); } if (code && code.length > target.value.length) { setTrackingDirection(-1); } else { setTrackingDirection(1); } if (target.value.length === CODE_LENGTH) { setAuthCode({ code: target.value }); } }, [authError, clearAuthError, code, isTracking, setAuthCode]); return (

{authPhoneNumber}

{renderText(lang(authIsCodeViaApp ? 'SentAppCode' : 'Login.JustSentSms'), ['simple_markdown'])}

{authIsLoading && }
); }; export default memo(withGlobal( (global): StateProps => pick(global, ['authPhoneNumber', 'authIsCodeViaApp', 'authIsLoading', 'authError']), )(AuthCode));