import type { ReactElement } from 'react'; import TwoFactorEmail from './TwoFactorEmailModal'; import TwoFactorPassword from './TwoFactorPasswordModal'; import TwoFactorTotp from './TwoFactorTotpModal'; export enum Method { TOTP = 'totp', EMAIL = 'email', PASSWORD = 'password', } export type OnConfirm = (code: string, method: Method) => void; type TwoFactorModalProps = { onConfirm: OnConfirm; onClose: () => void; invalidAttempt?: boolean; } & ( | { method: 'totp' | 'password'; } | { method: 'email'; emailOrUsername: string; } ); const TwoFactorModal = ({ onConfirm, onClose, invalidAttempt, ...props }: TwoFactorModalProps): ReactElement => { if (props.method === Method.TOTP) { return ; } if (props.method === Method.EMAIL) { const { emailOrUsername } = props; return ; } if (props.method === Method.PASSWORD) { return ; } throw new Error('Invalid Two Factor method'); }; export default TwoFactorModal;