import React, { FC, useEffect, memo } from '../../lib/teact/teact'; import { withGlobal } from '../../lib/teact/teactn'; import { GlobalActions, GlobalState } from '../../global/types'; import '../../modules/actions/initial'; import { pick } from '../../util/iteratees'; import { PLATFORM_ENV } from '../../util/environment'; import windowSize from '../../util/windowSize'; import useHistoryBack from '../../hooks/useHistoryBack'; import UiLoader from '../common/UiLoader'; import AuthPhoneNumber from './AuthPhoneNumber'; import AuthCode from './AuthCode.async'; import AuthPassword from './AuthPassword.async'; import AuthRegister from './AuthRegister.async'; import AuthQrCode from './AuthQrCode'; import './Auth.scss'; type StateProps = Pick; type DispatchProps = Pick; const Auth: FC = ({ authState, reset, initApi, returnToAuthPhoneNumber, goToAuthQrCode, }) => { useEffect(() => { reset(); initApi(); }, [reset, initApi]); const isMobile = PLATFORM_ENV === 'iOS' || PLATFORM_ENV === 'Android'; const handleChangeAuthorizationMethod = () => { if (!isMobile) { goToAuthQrCode(); } else { returnToAuthPhoneNumber(); } }; useHistoryBack( (!isMobile && authState === 'authorizationStateWaitPhoneNumber') || (isMobile && authState === 'authorizationStateWaitQrCode'), handleChangeAuthorizationMethod, ); // Prevent refresh when rotating device useEffect(() => { windowSize.disableRefresh(); return () => { windowSize.enableRefresh(); }; }, []); switch (authState) { case 'authorizationStateWaitCode': return ; case 'authorizationStateWaitPassword': return ; case 'authorizationStateWaitRegistration': return ; case 'authorizationStateWaitPhoneNumber': return ; case 'authorizationStateWaitQrCode': return ; default: return isMobile ? : ; } }; export default memo(withGlobal( (global): StateProps => pick(global, ['authState']), (global, actions): DispatchProps => pick(actions, ['reset', 'initApi', 'returnToAuthPhoneNumber', 'goToAuthQrCode']), )(Auth));