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