import QrCreator from 'qr-creator'; import React, { FC, useEffect, useRef, memo, useCallback, } from '../../lib/teact/teact'; import { withGlobal } from '../../lib/teact/teactn'; import { GlobalState, GlobalActions } from '../../global/types'; import { LangCode } from '../../types'; import { pick } from '../../util/iteratees'; import { setLanguage } from '../../util/langProvider'; import renderText from '../common/helpers/renderText'; import useLangString from '../../hooks/useLangString'; import useFlag from '../../hooks/useFlag'; import useLang from '../../hooks/useLang'; import { getSuggestedLanguage } from './helpers/getSuggestedLanguage'; import Loading from '../ui/Loading'; import Button from '../ui/Button'; type StateProps = Pick & { language?: LangCode; }; type DispatchProps = Pick; const DATA_PREFIX = 'tg://login?token='; const AuthCode: FC = ({ connectionState, authState, authQrCode, language, returnToAuthPhoneNumber, setSettingOption, }) => { const suggestedLanguage = getSuggestedLanguage(); const lang = useLang(); // eslint-disable-next-line no-null/no-null const qrCodeRef = useRef(null); const continueText = useLangString(suggestedLanguage, 'ContinueOnThisLanguage'); const [isLoading, markIsLoading, unmarkIsLoading] = useFlag(); useEffect(() => { if (!authQrCode || connectionState !== 'connectionStateReady') { return; } const container = qrCodeRef.current!; container.innerHTML = ''; container.classList.remove('pre-animate'); QrCreator.render({ text: `${DATA_PREFIX}${authQrCode.token}`, radius: 0.5, ecLevel: 'M', fill: '#4E96D4', size: 280, }, container); }, [connectionState, authQrCode]); const handleLangChange = useCallback(() => { markIsLoading(); void setLanguage(suggestedLanguage, () => { unmarkIsLoading(); setSettingOption({ language: suggestedLanguage }); }); }, [markIsLoading, setSettingOption, suggestedLanguage, unmarkIsLoading]); const isAuthReady = authState === 'authorizationStateWaitQrCode'; return (
{authQrCode ? (
) : (
)}

{lang('Login.QR.Title')}

  1. {lang('Login.QR.Help1')}
  2. {renderText(lang('Login.QR.Help2'), ['simple_markdown'])}
  3. {lang('Login.QR.Help3')}
{isAuthReady && ( )} {suggestedLanguage && suggestedLanguage !== language && continueText && ( )}
); }; export default memo(withGlobal( (global): StateProps => { const { connectionState, authState, authQrCode, settings: { byKey: { language } }, } = global; return { connectionState, authState, authQrCode, language, }; }, (setGlobal, actions): DispatchProps => pick(actions, [ 'returnToAuthPhoneNumber', 'setSettingOption', ]), )(AuthCode));