@@ -1,4 +1,4 @@
1−import React, { useCallback, useMemo } from 'react';
1+import React, { useCallback, useState, useMemo } from 'react';
2import cn from 'classnames';
2import cn from 'classnames';
3import { Just, Nothing } from 'folktale/maybe';
3import { Just, Nothing } from 'folktale/maybe';
4import { Grid, CheckboxInput } from 'indigo-react';
4import { Grid, CheckboxInput } from 'indigo-react';
@@ -10,6 +10,7 @@ import useLoginView from 'lib/useLoginView';
10import { MnemonicInput, HdPathInput, PassphraseInput } from 'form/Inputs';
10import { MnemonicInput, HdPathInput, PassphraseInput } from 'form/Inputs';
12 composeValidator,
12 composeValidator,
13+ buildAnyMnemonicValidator,
13 buildMnemonicValidator,
14 buildMnemonicValidator,
14 buildCheckboxValidator,
15 buildCheckboxValidator,
15 buildPassphraseValidator,
16 buildPassphraseValidator,
@@ -25,25 +26,34 @@ export default function Mnemonic({ className, goHome }) {
26 const { setWallet, setAuthMnemonic, setWalletHdPath } = useWallet();
27 const { setWallet, setAuthMnemonic, setWalletHdPath } = useWallet();
29+ const [anyMnemonic, setAnyMnemonic] = useState(false);
28− const validate = useMemo(
31+ const validate = useMemo(() => {
29− () =>
32+ const mnemonicValidator = anyMnemonic
33+ ? buildAnyMnemonicValidator()
34+ : buildMnemonicValidator();
30− composeValidator({
35+ return composeValidator({
31− useAdvanced: buildCheckboxValidator(),
36+ useAdvanced: buildCheckboxValidator(),
32− mnemonic: buildMnemonicValidator(),
37+ mnemonic: mnemonicValidator,
33− passphrase: buildPassphraseValidator(),
38+ passphrase: buildPassphraseValidator(),
34− hdpath: buildHdPathValidator(),
39+ hdpath: buildHdPathValidator(),
36− []
41+ }, [anyMnemonic]);
39 // when the properties change, re-derive wallet and set global state
43 // when the properties change, re-derive wallet and set global state
40 const onValues = useCallback(
44 const onValues = useCallback(
41 ({ valid, values }) => {
45 ({ valid, values }) => {
46+ setAnyMnemonic(values.anyMnemonic);
42 if (valid) {
47 if (valid) {
43 setWalletHdPath(values.hdpath);
48 setWalletHdPath(values.hdpath);
44 setAuthMnemonic(Just(values.mnemonic));
49 setAuthMnemonic(Just(values.mnemonic));
45 setWallet(
50 setWallet(
46− walletFromMnemonic(values.mnemonic, values.hdpath, values.passphrase)
51+ walletFromMnemonic(
49 setAuthMnemonic(Nothing());
59 setAuthMnemonic(Nothing());
@@ -53,7 +63,11 @@ export default function Mnemonic({ className, goHome }) {
53 [setAuthMnemonic, setWallet, setWalletHdPath]
63 [setAuthMnemonic, setWallet, setWalletHdPath]
66+ const initialValues = {
56− const initialValues = { hdpath: DEFAULT_HD_PATH, useAdvanced: false };
67+ hdpath: DEFAULT_HD_PATH,
59 <Grid className={cn('mt4', className)}>
73 <Grid className={cn('mt4', className)}>
@@ -71,6 +85,13 @@ export default function Mnemonic({ className, goHome }) {
71 label="BIP39 Mnemonic"
85 label="BIP39 Mnemonic"
92+ label="Skip mnemonic validation"
74 <Condition when="useAdvanced" is={true}>
95 <Condition when="useAdvanced" is={true}>
75 <Grid.Item
96 <Grid.Item