import React, { useState, useMemo } from 'react'; import * as bip39 from 'bip39'; import InputSigil from 'components/InputSigil'; import { DEFAULT_HD_PATH } from 'lib/wallet'; import { validateNotEmpty, validateMnemonic, validatePoint, validateTicket, validateEmail, } from 'lib/validators'; import { prependSig } from 'lib/transformers'; import useForm from 'indigo-react/lib/useForm'; import { AccessoryIcon } from 'indigo-react'; // const RequiredInput = advancedInput({ // WrappedComponent: Input, // validators: [validateNotEmpty], // }); // const NetworkKeyInput = advancedInput({ // WrappedComponent: Input, // validators: [validateNotEmpty, validateNetworkKey], // }); // const NetworkSeedInput = advancedInput({ // WrappedComponent: Input, // validators: [validateNotEmpty, validateNetworkSeed], // }); // const AddressInput = advancedInput({ // WrappedComponent: Input, // validators: [validateEthereumAddress, validateNotEmpty], // }); const firstOf = state => state.inputs[0]; export function usePassphraseInput(props) { return firstOf( useForm([ { type: 'password', autoComplete: 'off', placeholder: 'Passphrase', ...props, }, ]) ); } const kExampleMnemonic = bip39.generateMnemonic(); const kMnemonicValidators = [validateMnemonic, validateNotEmpty]; export function useMnemonicInput(props) { return firstOf( useForm([ { type: 'text', autoComplete: 'off', placeholder: `e.g. ${kExampleMnemonic}`, validators: kMnemonicValidators, ...props, }, ]) ); } export function useHdPathInput(props) { return firstOf( useForm([ { type: 'text', autoComplete: 'off', placeholder: `e.g. ${DEFAULT_HD_PATH}`, ...props, }, ]) ); } // const GalaxyInput = advancedInput({ // WrappedComponent: Input, // validators: [validateGalaxy, validateNotEmpty], // transformers: [prependSig], // }); const kTicketValidators = [validateTicket, validateNotEmpty]; const kTicketTransformers = [prependSig]; //TODO needs to be fancier, displaying sig and dashes instead of •ing all export function useTicketInput({ validators = [], ...rest }) { const input = firstOf( useForm([ { type: 'password', label: 'Ticket', placeholder: '~ragtyd-modwen-bostec-hinsep', validators: useMemo(() => [...validators, ...kTicketValidators], [ validators, ]), transformers: kTicketTransformers, mono: true, ...rest, }, ]) ); return { ...input, accessory: input.pass ? : null }; } const kPointValidators = [validatePoint, validateNotEmpty]; const kPointTransformers = [prependSig]; export function usePointInput(rest) { const [lastValidPoint, setLastValidPoint] = useState(''); const input = firstOf( useForm([ { type: 'text', label: 'Point', placeholder: 'e.g. ~zod', validators: kPointValidators, transformers: kPointTransformers, mono: true, onValue: setLastValidPoint, ...rest, }, ]) ); const { pass, focused, error } = input; return { ...input, accessory: lastValidPoint && ( ), }; } export function useCheckboxInput({ initialValue, ...rest }) { return firstOf( useForm([ { type: 'checkbox', ...rest, }, ]) ); } const kEmailValidators = [validateEmail, validateNotEmpty]; export const buildEmailInputConfig = extra => ({ type: 'email', autoComplete: 'off', validators: kEmailValidators, initialValue: '', ...extra, }); // const TicketInput = advancedInput({ // WrappedComponent: Input, // validators: [validateTicket, validateNotEmpty], // transformers: [prependSig], // });