import React, { useMemo } from 'react';
import { Input, AccessoryIcon } from 'indigo-react';
import { useField } from 'react-final-form';
import {
validateNotEmpty,
validateTicket,
kDefaultValidator,
validateMnemonic,
} from 'lib/validators';
import { compose } from 'lib/lib';
import { prependSig } from 'lib/transformers';
import { DEFAULT_HD_PATH } from 'lib/wallet';
// TODO: why is `validate` called when routing away? new props?
// active not true: https://github.com/final-form/react-final-form/issues/558
const kEmptyValidators = []; // necessary for referential stability
const kEmptyTransformers = []; // also for referential stability
const PLACEHOLDER_POINT = '~sampel-ponnym';
const PLACEHOLDER_HD_PATH = DEFAULT_HD_PATH;
const PLACEHOLDER_MNEMONIC =
'example crew supreme gesture quantum web media hazard theory mercy wing kitten';
const PLACEHOLDER_TICKET = '~sampel-ticlyt-migfun-falmel';
const PLACEHOLDER_ADDRESS = '0x12345abcdeDB11D175F123F6891AA64F01c24F7d';
const PLACEHOLDER_PRIVATE_KEY =
'0x12345abcdee6beb2f323fab48b432925c9785808d33a6ca6d7ba00b45e9370c3';
const buildValidator = (
validators = [],
fn = x => undefined
) => async value => {
// console.log('validating:', value);
return (
compose(
...validators,
kDefaultValidator
)(value).error || (await fn(value))
);
};
const kTicketValidators = [validateTicket, validateNotEmpty];
export function TicketInput({
name,
validators = kEmptyValidators,
transformers = kEmptyTransformers,
validate,
...rest
}) {
const { valid, error, validating } = useField(name, {
subscription: { error: true, validating: true },
});
const _validate = useMemo(
() => buildValidator([...validators, ...kTicketValidators], validate),
[validate, validators]
);
const _format = (value, name) => prependSig(value);
return (
) : validating ? (
) : valid ? (
) : null
}
config={{ validate: _validate, format: _format }}
mono
{...rest}
/>
);
}
const kMnemonicValidators = [validateMnemonic, validateNotEmpty];
export function MnemonicInput({
name,
validators = kEmptyValidators,
transformers = kEmptyTransformers,
validate,
...rest
}) {
const _validate = useMemo(
() => buildValidator([...validators, ...kMnemonicValidators], validate),
[validate, validators]
);
return (
);
}
const kHdPathValidators = [validateNotEmpty];
export function HdPathInput({
name,
validators = kEmptyValidators,
transformers = kEmptyTransformers,
validate,
...rest
}) {
const _validate = useMemo(
() => buildValidator([...validators, ...kHdPathValidators], validate),
[validate, validators]
);
return (
);
}
export function PassphraseInput({ ...rest }) {
return (
);
}