import { Box, TextInput, Field, FieldGroup, FieldLabel, FieldRow, FieldError } from '@rocket.chat/fuselage'; import { useAutoFocus } from '@rocket.chat/fuselage-hooks'; import { GenericModal } from '@rocket.chat/ui-client'; import type { ReactElement, ChangeEvent, SyntheticEvent } from 'react'; import { useId, useState } from 'react'; import { useTranslation } from 'react-i18next'; import type { OnConfirm } from './TwoFactorModal'; import { Method } from './TwoFactorModal'; type TwoFactorTotpModalProps = { onConfirm: OnConfirm; onClose: () => void; onDismiss?: () => void; invalidAttempt?: boolean; }; const TwoFactorTotpModal = ({ onConfirm, onClose, onDismiss, invalidAttempt }: TwoFactorTotpModalProps): ReactElement => { const { t } = useTranslation(); const [code, setCode] = useState(''); const ref = useAutoFocus(); const onConfirmTotpCode = (e: SyntheticEvent): void => { e.preventDefault(); onConfirm(code, Method.TOTP); }; const onChange = ({ currentTarget }: ChangeEvent): void => { setCode(currentTarget.value); }; const id = useId(); return ( } onCancel={onClose} confirmText={t('Verify')} title={t('Enter_TOTP_password')} onClose={onClose} onDismiss={onDismiss} variant='warning' confirmDisabled={!code} tagline={t('Two-factor_authentication')} icon={null} > {t('Enter_the_code_provided_by_your_authentication_app_to_continue')} {invalidAttempt && {t('Invalid_password')}} ); }; export default TwoFactorTotpModal;