Remove payments API routing initialization
[ProtonMail-WebClient.git] / packages / components / containers / mnemonic / MnemonicInputField.tsx
blob30f7cbee7a878bbb2431e243b0d5dfa22e23ccdd
1 import { useEffect, useState } from 'react';
3 import { c } from 'ttag';
5 import InputFieldTwo from '@proton/components/components/v2/field/InputField';
6 import TextAreaTwo from '@proton/components/components/v2/input/TextArea';
7 import { validateMnemonic } from '@proton/shared/lib/mnemonic';
9 import type { InputFieldProps } from '../../components/v2/field/InputField';
11 export const useMnemonicInputValidation = (
12     mnemonic: string,
13     {
14         invalidFormatError = c('Error').t`Wrong recovery phrase. Try again or use another recovery method.`,
15     }: { invalidFormatError?: string } = {}
16 ) => {
17     const [mnemonicError, setMnemonicError] = useState('');
19     useEffect(() => {
20         validateMnemonic(mnemonic)
21             .then((isValid) => setMnemonicError(!isValid ? invalidFormatError : ''))
22             .catch(() => setMnemonicError(''));
23     }, [mnemonic]);
25     return [
26         (() => {
27             const splitWords = mnemonic.split(/\s+/);
28             return splitWords.length !== 12 ? invalidFormatError : '';
29         })(),
30         (() => {
31             return mnemonicError;
32         })(),
33     ];
36 interface Props extends Omit<InputFieldProps<typeof TextAreaTwo>, 'as'> {}
38 const MnemonicInputField = ({
39     id = 'mnemonic',
40     bigger = true,
41     rows = 3,
42     label = c('Label').t`Recovery phrase`,
43     assistiveText = c('Label').t`Phrase consists of 12 unique words in a specific order`,
44     onValue,
45     ...rest
46 }: Props) => {
47     return (
48         <InputFieldTwo
49             id={id}
50             bigger={bigger}
51             as={TextAreaTwo}
52             rows={rows}
53             label={label}
54             assistiveText={assistiveText}
55             onValue={(newValue: string) => {
56                 const splitWords = newValue.split(/\s+/);
57                 const mnemonic = splitWords.slice(0, 12).join(' ');
58                 return onValue?.(mnemonic);
59             }}
60             {...rest}
61         />
62     );
65 export default MnemonicInputField;