on master help sign in
refactor: move Inputs.js to lib/useInputs.js and re-order relevant imports
1dbc526Matt Condon (shrugs)
src/components/Inputs.js → src/lib/useInputs.jsrenamed+2−28
@@ -3,8 +3,6 @@ import { AccessoryIcon, useForm } from 'indigo-react';
3import { identity } from 'lodash';
3import { identity } from 'lodash';
4import * as bip39 from 'bip39';
4import * as bip39 from 'bip39';
5
5
6−import InputSigil from 'components/InputSigil';
7−
8import { DEFAULT_HD_PATH } from 'lib/wallet';
6import { DEFAULT_HD_PATH } from 'lib/wallet';
9import {
7import {
10 validateNotEmpty,
8 validateNotEmpty,
@@ -19,35 +17,11 @@ import {
19} from 'lib/validators';
17} from 'lib/validators';
20import { prependSig } from 'lib/transformers';
18import { prependSig } from 'lib/transformers';
21
19
20+import InputSigil from 'components/InputSigil';
21+
22const EXAMPLE_PRIVATE_KEY =
22const EXAMPLE_PRIVATE_KEY =
23 '0xa44de2416ee6beb2f323fab48b432925c9785808d33a6ca6d7ba00b45e9370c3';
23 '0xa44de2416ee6beb2f323fab48b432925c9785808d33a6ca6d7ba00b45e9370c3';
24
24
25−// const RequiredInput = advancedInput({
26−// WrappedComponent: Input,
27−// validators: [validateNotEmpty],
28−// });
29−
30−// const NetworkKeyInput = advancedInput({
31−// WrappedComponent: Input,
32−// validators: [validateNotEmpty, validateNetworkKey],
33−// });
34−
35−// const NetworkSeedInput = advancedInput({
36−// WrappedComponent: Input,
37−// validators: [validateNotEmpty, validateNetworkSeed],
38−// });
39−
40−// const AddressInput = advancedInput({
41−// WrappedComponent: Input,
42−// validators: [validateEthereumAddress, validateNotEmpty],
43−// });
44−
45−// const GalaxyInput = advancedInput({
46−// WrappedComponent: Input,
47−// validators: [validateGalaxy, validateNotEmpty],
48−// transformers: [prependSig],
49−// });
50−
51// pulls out the first input from a useForm() call
25// pulls out the first input from a useForm() call
52function useFirstOf({ inputs, setValue, ...rest }, mapper = identity) {
26function useFirstOf({ inputs, setValue, ...rest }, mapper = identity) {
53 // ask the mapper function for any values to overwrite
27 // ask the mapper function for any values to overwrite
src/views/Activate/ActivateCode.js+1−1
@@ -1,7 +1,6 @@
1import React, { useCallback, useEffect, useState } from 'react';
1import React, { useCallback, useEffect, useState } from 'react';
2import { Just, Nothing } from 'folktale/maybe';
2import { Just, Nothing } from 'folktale/maybe';
3import * as azimuth from 'azimuth-js';
3import * as azimuth from 'azimuth-js';
4−import { useTicketInput } from 'components/Inputs';
5import { Grid, Input, H4, ErrorText } from 'indigo-react';
4import { Grid, Input, H4, ErrorText } from 'indigo-react';
6
5
7import View from 'components/View';
6import View from 'components/View';
@@ -10,6 +9,7 @@ import Passport from 'components/Passport';
10
9
11import { useHistory } from 'store/history';
10import { useHistory } from 'store/history';
12
11
12+import { useTicketInput } from 'lib/useInputs';
13import * as need from 'lib/need';
13import * as need from 'lib/need';
14import { ROUTE_NAMES } from 'lib/routeNames';
14import { ROUTE_NAMES } from 'lib/routeNames';
15import { useSyncKnownPoints } from 'lib/useSyncPoints';
15import { useSyncKnownPoints } from 'lib/useSyncPoints';
src/views/Activate/ActivateDisclaimer.js+3−2
@@ -2,10 +2,11 @@ import React, { useCallback } from 'react';
2import cn from 'classnames';
2import cn from 'classnames';
3import { Grid, H3, B, Text, CheckboxInput } from 'indigo-react';
3import { Grid, H3, B, Text, CheckboxInput } from 'indigo-react';
4
4
5+import { useCheckboxInput } from 'lib/useInputs';
6+import { useLocalRouter } from 'lib/LocalRouter';
7+
5import View from 'components/View';
8import View from 'components/View';
6−import { useCheckboxInput } from 'components/Inputs';
7import { ForwardButton } from 'components/Buttons';
9import { ForwardButton } from 'components/Buttons';
8−import { useLocalRouter } from 'lib/LocalRouter';
9import WarningBox from 'components/WarningBox';
10import WarningBox from 'components/WarningBox';
10
11
11const TEXT_STYLE = 'f5';
12const TEXT_STYLE = 'f5';
src/views/Activate/PassportVerify.js+2−2
@@ -4,13 +4,13 @@ import { Grid, H4, Input, P } from 'indigo-react';
4
4
5import * as need from 'lib/need';
5import * as need from 'lib/need';
6import { useLocalRouter } from 'lib/LocalRouter';
6import { useLocalRouter } from 'lib/LocalRouter';
7+import { useTicketInput } from 'lib/useInputs';
8+import { validateExactly } from 'lib/validators';
7
9
8import { ForwardButton } from 'components/Buttons';
10import { ForwardButton } from 'components/Buttons';
9import Steps from 'components/Steps';
11import Steps from 'components/Steps';
10−import { useTicketInput } from 'components/Inputs';
11
12
12import { useActivateFlow } from './ActivateFlow';
13import { useActivateFlow } from './ActivateFlow';
13−import { validateExactly } from 'lib/validators';
14
14
15const STUB_VERIFY_TICKET = process.env.NODE_ENV === 'development';
15const STUB_VERIFY_TICKET = process.env.NODE_ENV === 'development';
16
16
src/views/Admin/Reticket/ReticketVerify.jsnew file+47
@@ -0,0 +1,47 @@
1+import React, { useCallback, useMemo } from 'react';
2+import { Input, Text, Grid } from 'indigo-react';
3+
4+import { ForwardButton } from 'components/Buttons';
5+
6+import { useTicketInput } from 'lib/useInputs';
7+import { useLocalRouter } from 'lib/LocalRouter';
8+import { validateExactly } from 'lib/validators';
9+import { isDevelopment } from 'lib/flags';
10+
11+const STUB_VERIFY_TICKET = isDevelopment;
12+
13+export default function ReticketVerify({ newWallet }) {
14+ const { push, names } = useLocalRouter();
15+
16+ const ticket = newWallet.value.wallet.ticket;
17+ const validators = useMemo(
18+ () => [validateExactly(ticket, 'Does not match expected master ticket.')],
19+ [ticket]
20+ );
21+ const [ticketInput, { pass }] = useTicketInput({
22+ name: 'ticket',
23+ label: 'New master ticket',
24+ initialValue: STUB_VERIFY_TICKET ? ticket : undefined,
25+ autoFocus: true,
26+ validators,
27+ });
28+
29+ const goExecute = useCallback(() => push(names.EXECUTE), [push, names]);
30+
31+ return (
32+ <Grid gap={4} className="mt4">
33+ <Grid.Item full as={Text}>
34+ Verify New Master Ticket
35+ </Grid.Item>
36+ <Grid.Item full as={Input} {...ticketInput} />
37+ <Grid.Item
38+ full
39+ as={ForwardButton}
40+ solid
41+ disabled={!pass}
42+ onClick={goExecute}>
43+ Verify & Reticket
44+ </Grid.Item>
45+ </Grid>
46+ );
47+}
src/views/Invite/InviteEmail.js+12−12
@@ -11,11 +11,14 @@ import {
11 Text,
11 Text,
12 ErrorText,
12 ErrorText,
13 AccessoryIcon,
13 AccessoryIcon,
14+ useForm,
14} from 'indigo-react';
15} from 'indigo-react';
15import { uniq } from 'lodash';
16import { uniq } from 'lodash';
16
17
17−import * as need from 'lib/need';
18+import { usePointCursor } from 'store/pointCursor';
18−import * as wg from 'lib/walletgen';
19+import { useNetwork } from 'store/network';
20+import { usePointCache } from 'store/pointCache';
21+import { useWallet } from 'store/wallet';
19
22
20// for transaction generation and signing
23// for transaction generation and signing
21import {
24import {
@@ -28,22 +31,19 @@ import {
28} from 'lib/txn';
31} from 'lib/txn';
29import * as tank from 'lib/tank';
32import * as tank from 'lib/tank';
30import { useLocalRouter } from 'lib/LocalRouter';
33import { useLocalRouter } from 'lib/LocalRouter';
31−
32−import MiniBackButton from 'components/MiniBackButton';
33−import { usePointCursor } from 'store/pointCursor';
34−import LoadableButton from 'components/LoadableButton';
35import useArray from 'lib/useArray';
34import useArray from 'lib/useArray';
36−import useForm from 'indigo-react/lib/useForm';
37−import { buildEmailInputConfig } from 'components/Inputs';
35+import { buildEmailInputConfig } from 'lib/useInputs';
38import { MIN_PLANET, GAS_LIMITS } from 'lib/constants';
36import { MIN_PLANET, GAS_LIMITS } from 'lib/constants';
39−import Highlighted from 'components/Highlighted';
37+import * as need from 'lib/need';
40−import { useNetwork } from 'store/network';
38+import * as wg from 'lib/walletgen';
41−import { usePointCache } from 'store/pointCache';
42−import { useWallet } from 'store/wallet';
43import useSetState from 'lib/useSetState';
39import useSetState from 'lib/useSetState';
44import pluralize from 'lib/pluralize';
40import pluralize from 'lib/pluralize';
45import useMailer from 'lib/useMailer';
41import useMailer from 'lib/useMailer';
46
42
43+import MiniBackButton from 'components/MiniBackButton';
44+import LoadableButton from 'components/LoadableButton';
45+import Highlighted from 'components/Highlighted';
46+
47const GAS_PRICE_GWEI = 20; // we pay the premium for faster ux
47const GAS_PRICE_GWEI = 20; // we pay the premium for faster ux
48const GAS_LIMIT = GAS_LIMITS.GIFT_PLANET;
48const GAS_LIMIT = GAS_LIMITS.GIFT_PLANET;
49const INVITE_COST = toWei((GAS_PRICE_GWEI * GAS_LIMIT).toString(), 'gwei');
49const INVITE_COST = toWei((GAS_PRICE_GWEI * GAS_LIMIT).toString(), 'gwei');
src/views/Login/Keystore.js+5−5
@@ -1,18 +1,18 @@
1import React, { useState } from 'react';
1import React, { useState } from 'react';
2import { Just, Nothing } from 'folktale/maybe';
2import { Just, Nothing } from 'folktale/maybe';
3−import * as keythereum from 'keythereum';
4import { P, Grid, Input, ErrorText } from 'indigo-react';
3import { P, Grid, Input, ErrorText } from 'indigo-react';
5−
4+import * as keythereum from 'keythereum';
6−import { usePassphraseInput } from 'components/Inputs';
7−import { ForwardButton } from 'components/Buttons';
8
5
9import { useWallet } from 'store/wallet';
6import { useWallet } from 'store/wallet';
10
7
8+import { usePassphraseInput } from 'lib/useInputs';
11import * as need from 'lib/need';
9import * as need from 'lib/need';
12import { EthereumWallet, WALLET_TYPES } from 'lib/wallet';
10import { EthereumWallet, WALLET_TYPES } from 'lib/wallet';
13−import UploadButton from 'components/UploadButton';
14import useLoginView from 'lib/useLoginView';
11import useLoginView from 'lib/useLoginView';
15
12
13+import { ForwardButton } from 'components/Buttons';
14+import UploadButton from 'components/UploadButton';
15+
16export default function Keystore({ className }) {
16export default function Keystore({ className }) {
17 useLoginView(WALLET_TYPES.KEYSTORE);
17 useLoginView(WALLET_TYPES.KEYSTORE);
18
18
src/views/Login/Ledger.js+13−5
@@ -1,21 +1,30 @@
1import React, { useCallback, useEffect } from 'react';
1import React, { useCallback, useEffect } from 'react';
2import cn from 'classnames';
2import cn from 'classnames';
3import { Just, Nothing } from 'folktale/maybe';
3import { Just, Nothing } from 'folktale/maybe';
4+import {
5+ P,
6+ Text,
7+ Input,
8+ Grid,
9+ H5,
10+ CheckboxInput,
11+ SelectInput,
4−import { P, Text, Input, Grid, H5, CheckboxInput } from 'indigo-react';
12+} from 'indigo-react';
5import { times } from 'lodash';
13import { times } from 'lodash';
6import * as bip32 from 'bip32';
14import * as bip32 from 'bip32';
7import Transport from '@ledgerhq/hw-transport-u2f';
15import Transport from '@ledgerhq/hw-transport-u2f';
8import Eth from '@ledgerhq/hw-app-eth';
16import Eth from '@ledgerhq/hw-app-eth';
9import * as secp256k1 from 'secp256k1';
17import * as secp256k1 from 'secp256k1';
10
18
19+import { useWallet } from 'store/wallet';
20+
11import { ForwardButton } from 'components/Buttons';
21import { ForwardButton } from 'components/Buttons';
22+
12import {
23import {
13 useCheckboxInput,
24 useCheckboxInput,
14 useHdPathInput,
25 useHdPathInput,
15 useSelectInput,
26 useSelectInput,
16−} from 'components/Inputs';
27+} from 'lib/useInputs';
17−
18−import { useWallet } from 'store/wallet';
19
28
20import {
29import {
21 LEDGER_LIVE_PATH,
30 LEDGER_LIVE_PATH,
@@ -25,7 +34,6 @@ import {
25} from 'lib/ledger';
34} from 'lib/ledger';
26import { WALLET_TYPES } from 'lib/wallet';
35import { WALLET_TYPES } from 'lib/wallet';
27import useLoginView from 'lib/useLoginView';
36import useLoginView from 'lib/useLoginView';
28−import SelectInput from 'indigo-react/components/SelectInput';
29import useBreakpoints from 'lib/useBreakpoints';
37import useBreakpoints from 'lib/useBreakpoints';
30
38
31const PATH_OPTIONS = [
39const PATH_OPTIONS = [
src/views/Login/Mnemonic.js+3−4
@@ -2,15 +2,14 @@ import React, { useEffect } from 'react';
2import { Just, Nothing } from 'folktale/maybe';
2import { Just, Nothing } from 'folktale/maybe';
3import { Grid, Input, CheckboxInput } from 'indigo-react';
3import { Grid, Input, CheckboxInput } from 'indigo-react';
4
4
5+import { useWallet } from 'store/wallet';
6+
5import {
7import {
6 usePassphraseInput,
8 usePassphraseInput,
7 useMnemonicInput,
9 useMnemonicInput,
8 useHdPathInput,
10 useHdPathInput,
9 useCheckboxInput,
11 useCheckboxInput,
10−} from 'components/Inputs';
12+} from 'lib/useInputs';
11−
12−import { useWallet } from 'store/wallet';
13−
14import { walletFromMnemonic, WALLET_TYPES } from 'lib/wallet';
13import { walletFromMnemonic, WALLET_TYPES } from 'lib/wallet';
15import useLoginView from 'lib/useLoginView';
14import useLoginView from 'lib/useLoginView';
16
15
src/views/Login/PrivateKey.js+1−2
@@ -2,10 +2,9 @@ import React, { useEffect } from 'react';
2import { Just, Nothing } from 'folktale/maybe';
2import { Just, Nothing } from 'folktale/maybe';
3import { Grid, Input } from 'indigo-react';
3import { Grid, Input } from 'indigo-react';
4
4
5−import { useHexInput } from 'components/Inputs';
6−
7import { useWallet } from 'store/wallet';
5import { useWallet } from 'store/wallet';
8
6
7+import { useHexInput } from 'lib/useInputs';
9import { EthereumWallet, WALLET_TYPES, stripHexPrefix } from 'lib/wallet';
8import { EthereumWallet, WALLET_TYPES, stripHexPrefix } from 'lib/wallet';
10import useLoginView from 'lib/useLoginView';
9import useLoginView from 'lib/useLoginView';
11
10
src/views/Login/Ticket.js+5−6
@@ -5,17 +5,16 @@ import * as ob from 'urbit-ob';
5import * as kg from 'urbit-key-generation/dist/index';
5import * as kg from 'urbit-key-generation/dist/index';
6import { Input, Grid, CheckboxInput } from 'indigo-react';
6import { Input, Grid, CheckboxInput } from 'indigo-react';
7
7
8+import { useNetwork } from 'store/network';
9+import { useWallet } from 'store/wallet';
10+import { usePointCursor } from 'store/pointCursor';
11+
8import {
12import {
9 usePointInput,
13 usePointInput,
10 useTicketInput,
14 useTicketInput,
11 usePassphraseInput,
15 usePassphraseInput,
12 useCheckboxInput,
16 useCheckboxInput,
13−} from 'components/Inputs';
17+} from 'lib/useInputs';
14−
15−import { useNetwork } from 'store/network';
16−import { useWallet } from 'store/wallet';
17−import { usePointCursor } from 'store/pointCursor';
18−
19import * as need from 'lib/need';
18import * as need from 'lib/need';
20import { WALLET_TYPES, urbitWalletFromTicket } from 'lib/wallet';
19import { WALLET_TYPES, urbitWalletFromTicket } from 'lib/wallet';
21import useImpliedPoint from 'lib/useImpliedPoint';
20import useImpliedPoint from 'lib/useImpliedPoint';
src/views/Login/Trezor.js+12−6
@@ -4,21 +4,27 @@ import * as bip32 from 'bip32';
4import { times } from 'lodash';
4import { times } from 'lodash';
5import TrezorConnect from 'trezor-connect';
5import TrezorConnect from 'trezor-connect';
6import * as secp256k1 from 'secp256k1';
6import * as secp256k1 from 'secp256k1';
7+import {
8+ Text,
9+ Input,
10+ Grid,
11+ H5,
12+ CheckboxInput,
13+ SelectInput,
7−import { Text, Input, Grid, H5, CheckboxInput } from 'indigo-react';
14+} from 'indigo-react';
8
15
9−import { ForwardButton } from 'components/Buttons';
16+import { useWallet } from 'store/wallet';
10
17
11import { TREZOR_PATH } from 'lib/trezor';
18import { TREZOR_PATH } from 'lib/trezor';
12import { WALLET_TYPES } from 'lib/wallet';
19import { WALLET_TYPES } from 'lib/wallet';
13−
14−import { useWallet } from 'store/wallet';
15import useLoginView from 'lib/useLoginView';
20import useLoginView from 'lib/useLoginView';
16import {
21import {
17 useHdPathInput,
22 useHdPathInput,
18 useCheckboxInput,
23 useCheckboxInput,
19 useSelectInput,
24 useSelectInput,
20−} from 'components/Inputs';
25+} from 'lib/useInputs';
26+
21−import SelectInput from 'indigo-react/components/SelectInput';
27+import { ForwardButton } from 'components/Buttons';
22
28
23const ACCOUNT_OPTIONS = times(20, i => ({
29const ACCOUNT_OPTIONS = times(20, i => ({
24 text: `Account #${i + 1}`,
30 text: `Account #${i + 1}`,
src/views/Reticket/Verify.js+4−4
@@ -1,13 +1,13 @@
1import React, { useCallback, useMemo } from 'react';
1import React, { useCallback, useMemo } from 'react';
2import { Input } from 'indigo-react';
2import { Input } from 'indigo-react';
3
3
4−import View from 'components/View';
5−import { useTicketInput } from 'components/Inputs';
4+import { useTicketInput } from 'lib/useInputs';
6−import { ForwardButton } from 'components/Buttons';
7−
8import { useLocalRouter } from 'lib/LocalRouter';
5import { useLocalRouter } from 'lib/LocalRouter';
9import { validateExactly } from 'lib/validators';
6import { validateExactly } from 'lib/validators';
10
7
8+import View from 'components/View';
9+import { ForwardButton } from 'components/Buttons';
10+
11const STUB_VERIFY_TICKET = process.env.NODE_ENV === 'development';
11const STUB_VERIFY_TICKET = process.env.NODE_ENV === 'development';
12
12
13//TODO deduplicate with PassportVerify
13//TODO deduplicate with PassportVerify
src/views/ViewPoint.js+1−1
@@ -9,10 +9,10 @@ import { usePointCursor } from 'store/pointCursor';
9
9
10import { ROUTE_NAMES } from 'lib/routeNames';
10import { ROUTE_NAMES } from 'lib/routeNames';
11import patp2dec from 'lib/patp2dec';
11import patp2dec from 'lib/patp2dec';
12+import { usePointInput } from 'lib/useInputs';
12
13
13import View from 'components/View';
14import View from 'components/View';
14import { ForwardButton } from 'components/Buttons';
15import { ForwardButton } from 'components/Buttons';
15−import { usePointInput } from 'components/Inputs';
16
16
17export default function ViewPoint() {
17export default function ViewPoint() {
18 const history = useHistory();
18 const history = useHistory();