on fb6d07a help sign in
bridge/src/components/Inputs.js
157 lines 3.7 kB history raw
1import React, { useState } from 'react';
2import * as bip39 from 'bip39';
4import InputSigil from 'components/InputSigil';
6import { DEFAULT_HD_PATH } from 'lib/wallet';
7import {
8 validateNotEmpty,
9 validateMnemonic,
10 validatePoint,
11 validateTicket,
12 validateEmail,
13} from 'lib/validators';
14import { prependSig } from 'lib/transformers';
15import useForm from 'indigo-react/lib/useForm';
17// const RequiredInput = advancedInput({
18// WrappedComponent: Input,
19// validators: [validateNotEmpty],
20// });
22// const NetworkKeyInput = advancedInput({
23// WrappedComponent: Input,
24// validators: [validateNotEmpty, validateNetworkKey],
25// });
27// const NetworkSeedInput = advancedInput({
28// WrappedComponent: Input,
29// validators: [validateNotEmpty, validateNetworkSeed],
30// });
32// const AddressInput = advancedInput({
33// WrappedComponent: Input,
34// validators: [validateEthereumAddress, validateNotEmpty],
35// });
37const firstOf = state => state.inputs[0];
39export function usePassphraseInput(props) {
40 return firstOf(
41 useForm([
42 {
43 type: 'password',
44 autoComplete: 'off',
45 placeholder: 'Passphrase',
46 ...props,
47 },
48 ])
49 );
52const kExampleMnemonic = bip39.generateMnemonic();
53const kMnemonicValidators = [validateMnemonic, validateNotEmpty];
54export function useMnemonicInput(props) {
55 return firstOf(
56 useForm([
57 {
58 type: 'text',
59 autoComplete: 'off',
60 placeholder: `e.g. ${kExampleMnemonic}`,
61 validators: kMnemonicValidators,
62 ...props,
63 },
64 ])
65 );
68export function useHdPathInput(props) {
69 return firstOf(
70 useForm([
71 {
72 type: 'text',
73 autoComplete: 'off',
74 placeholder: `e.g. ${DEFAULT_HD_PATH}`,
75 ...props,
76 },
77 ])
78 );
81// const GalaxyInput = advancedInput({
82// WrappedComponent: Input,
83// validators: [validateGalaxy, validateNotEmpty],
84// transformers: [prependSig],
85// });
87const kTicketValidators = [validateTicket, validateNotEmpty];
88const kTicketTransformers = [prependSig];
89//TODO needs to be fancier, displaying sig and dashes instead of •ing all
90export function useTicketInput({ initialValue = '~', ...rest }) {
91 return firstOf(
92 useForm([
93 {
94 type: 'password',
95 label: 'Ticket',
96 placeholder: '~master-ticket',
97 validators: kTicketValidators,
98 transformers: kTicketTransformers,
99 mono: true,
100 initialValue,
101 ...rest,
102 },
103 ])
104 );
107const kPointValidators = [validatePoint, validateNotEmpty];
108const kPointTransformers = [prependSig];
109export function usePointInput({ initialValue = '~', ...rest }) {
110 const [lastValidPoint, setLastValidPoint] = useState('');
111 const input = firstOf(
112 useForm([
113 {
114 type: 'text',
115 label: 'Point',
116 placeholder: 'e.g. ~zod',
117 validators: kPointValidators,
118 transformers: kPointTransformers,
119 mono: true,
120 initialValue,
121 onValue: setLastValidPoint,
122 ...rest,
123 },
124 ])
125 );
127 const { pass, focused, error } = input;
129 return {
130 ...input,
131 accessory: lastValidPoint && (
132 <InputSigil
133 patp={lastValidPoint}
134 size={68}
135 margin={8}
136 pass={pass}
137 focused={focused}
138 error={error}
139 />
140 ),
141 };
144const kEmailValidators = [validateEmail, validateNotEmpty];
145export const buildEmailInputConfig = extra => ({
146 type: 'email',
147 autoComplete: 'off',
148 validators: kEmailValidators,
149 initialValue: '',
150 ...extra,
151});
153// const TicketInput = advancedInput({
154// WrappedComponent: Input,
155// validators: [validateTicket, validateNotEmpty],
156// transformers: [prependSig],
157// });