The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Rocket.Chat/client/account/security/VerifyCodeModal.tsx

55 lines
1.7 KiB

import React, { FC, useCallback, useEffect, useRef } from 'react';
import { Box, Button, TextInput, Icon, ButtonGroup, Modal } from '@rocket.chat/fuselage';
import { useTranslation } from '../../contexts/TranslationContext';
import { useForm } from '../../hooks/useForm';
type VerifyCodeModalProps = {
onVerify: (code: string) => void;
onCancel: () => void;
};
const VerifyCodeModal: FC<VerifyCodeModalProps> = ({ onVerify, onCancel, ...props }) => {
const t = useTranslation();
const ref = useRef<HTMLInputElement>();
useEffect(() => {
if (typeof ref?.current?.focus === 'function') {
ref.current.focus();
}
}, [ref]);
const { values, handlers } = useForm({ code: '' });
const { code } = values as { code: string };
const { handleCode } = handlers;
const handleVerify = useCallback((e) => {
if (e.type === 'click' || (e.type === 'keydown' && e.keyCode === 13)) {
onVerify(code);
}
}, [code, onVerify]);
return <Modal {...props}>
<Modal.Header>
<Icon name='info' size={20}/>
<Modal.Title>{t('Two-factor_authentication')}</Modal.Title>
<Modal.Close onClick={onCancel}/>
</Modal.Header>
<Modal.Content fontScale='p1'>
<Box mbe='x8'>{t('Open_your_authentication_app_and_enter_the_code')}</Box>
<Box display='flex' alignItems='stretch'>
<TextInput ref={ref} placeholder={t('Enter_authentication_code')} value={code} onChange={handleCode} onKeyDown={handleVerify}/>
</Box>
</Modal.Content>
<Modal.Footer>
<ButtonGroup align='end'>
<Button onClick={onCancel}>{t('Cancel')}</Button>
<Button primary onClick={handleVerify}>{t('Verify')}</Button>
</ButtonGroup>
</Modal.Footer>
</Modal>;
};
export default VerifyCodeModal;