on master help sign in
feat: integrate withNetwork across app where required
commitf412226c3fc217394454e1d037c6407edd7af86d authorMatt Condon (shrugs) <mattgcondon@gmail.com> dateTue 11 Jun 2019, 14:59 (7 years ago) parent3bd9a57
24 files changed+128−99
src/Root.js+1−1 src/bridge/Bridge.js+8−9 src/bridge/components/Header.js+8−2 src/bridge/components/StatelessTransaction.js+4−1 src/bridge/lib/invite.js+2−2 src/bridge/lib/network.js+6−6 src/bridge/lib/router.js+7−5 src/bridge/lib/txn.js+4−4 src/bridge/store/network.js+5−5 src/bridge/views/AcceptTransfer.js+6−5 src/bridge/views/CancelTransfer.js+2−1 src/bridge/views/CreateGalaxy.js+6−5 src/bridge/views/InviteTicket.js+4−3 src/bridge/views/InvitesManage.js+2−1 src/bridge/views/InvitesSend.js+2−1 src/bridge/views/IssueChild.js+6−5 src/bridge/views/Network.js+5−5 src/bridge/views/Point.js+2−1 src/bridge/views/Points.js+4−3 src/bridge/views/SentTransaction.js+15−10 src/bridge/views/SetKeys.js+2−1 src/bridge/views/SetProxy.js+19−18 src/bridge/views/Transfer.js+6−5 src/walletgen/Walletgen.js+2
src/Root.js+1−1
@@ -15,7 +15,7 @@ class Root extends React.Component {
1515 super(props);
1616
1717 this.state = {
18− appView: 'walletgen',
18+ appView: 'bridge',
1919 };
2020
2121 this.setView = this.setView.bind(this);
src/bridge/Bridge.js+8−9
@@ -10,7 +10,7 @@ import { router } from './lib/router';
1010import { ROUTE_NAMES } from './lib/routeNames';
1111import { HistoryProvider, withHistory, useHistory } from './store/history';
1212import { TxnConfirmationsProvider } from './store/txnConfirmations';
13−import { NETWORK_NAMES } from './lib/network';
13+import { NETWORK_TYPES } from './lib/network';
1414import {
1515 WALLET_NAMES,
1616 DEFAULT_HD_PATH,
@@ -36,9 +36,12 @@ const kInitialRoutes = isStubbed
3636 { name: ROUTE_NAMES.LANDING },
3737 ]
3838 : [{ name: ROUTE_NAMES.LANDING }];
39+const kInitialNetworkType = isDevelopment
40+ ? NETWORK_TYPES.LOCAL
41+ : NETWORK_TYPES.MAINNET;
3942
40−// the router itself is a component that renders a specific view
41−// based on the latest history state
43+// the router itself is just a component that renders a specific view
44+// depending on the history
4245const Router = function(props) {
4346 const history = useHistory();
4447 const Route = router(history.peek());
@@ -137,7 +140,7 @@ class Bridge extends React.Component {
137140 }
138141
139142 setNetworkType(symbol) {
140− if (includes(NETWORK_NAMES, symbol)) {
143+ if (includes(NETWORK_TYPES, symbol)) {
141144 this.setState({
142145 networkType: symbol,
143146 });
@@ -225,14 +228,10 @@ class Bridge extends React.Component {
225228 txnHashCursor,
226229 } = this.state;
227230
228− const initialNetworkType = isDevelopment
229− ? NETWORK_NAMES.LOCAL
230− : NETWORK_NAMES.MAINNET;
231−
232231 return (
233232 <AllProviders
234233 initialRoutes={kInitialRoutes}
235− initialNetworkType={initialNetworkType}>
234+ initialNetworkType={kInitialNetworkType}>
236235 <Container>
237236 <Row>
238237 <VariableWidthColumn>
src/bridge/components/Header.js+8−2
@@ -5,9 +5,16 @@ import { getRouteBreadcrumb } from '../lib/router';
55import { ROUTE_NAMES } from '../lib/routeNames';
66import { useHistory } from '../store/history';
77import { isLast } from '../lib/lib';
8+import { useNetwork } from '../store/network';
9+
10+function useRouteBreadcrumbBuilder(props) {
11+ const { networkType } = useNetwork();
12+ return getRouteBreadcrumb({ ...props, networkType });
13+}
814
915function Crumbs(props) {
1016 const history = useHistory();
17+ const breadcrumbBuilder = useRouteBreadcrumbBuilder(props);
1118
1219 return (
1320 <>
@@ -17,9 +24,8 @@ function Crumbs(props) {
1724 <Button
1825 prop-type={'link'}
1926 prop-size={'sm'}
20− key={`history-button-${idx}`}
2127 onClick={() => history.pop(history.size - idx - 1)}>
22− {getRouteBreadcrumb(props, route)}
28+ {breadcrumbBuilder(route)}
2329 </Button>
2430
2531 {isLast(history.size, idx) ? (
src/bridge/components/StatelessTransaction.js+4−1
@@ -22,6 +22,7 @@ import {
2222 signTransaction,
2323} from '../lib/txn';
2424import { withTxnConfirmations } from '../store/txnConfirmations';
25+import { withNetwork } from '../store/network';
2526
2627const SUBMISSION_STATES = {
2728 PROMPT: 'Send transaction',
@@ -579,4 +580,6 @@ class StatelessTransaction extends React.Component {
579580 }
580581}
581582
582−export default withTxnConfirmations(withHistory(StatelessTransaction));
583+export default withNetwork(
584+ withTxnConfirmations(withHistory(StatelessTransaction))
585+);
src/bridge/lib/invite.js+2−2
@@ -105,8 +105,8 @@ async function downloadWallet(paper) {
105105async function startTransactions(args) {
106106 let {
107107 realPointM,
108− web3M,
109− contractsM,
108+ web3: web3M,
109+ contracts: contractsM,
110110 inviteWalletM,
111111 realWalletM,
112112 setUrbitWallet,
src/bridge/lib/network.js+6−6
@@ -1,4 +1,4 @@
1−const NETWORK_NAMES = {
1+const NETWORK_TYPES = {
22 OFFLINE: Symbol('OFFLINE'),
33 LOCAL: Symbol('LOCAL'),
44 ROPSTEN: Symbol('ROPSTEN'),
@@ -6,14 +6,14 @@ const NETWORK_NAMES = {
66};
77
88const renderNetworkType = network =>
9− network === NETWORK_NAMES.OFFLINE
9+ network === NETWORK_TYPES.OFFLINE
1010 ? 'Offline'
11− : network === NETWORK_NAMES.ROPSTEN
11+ : network === NETWORK_TYPES.ROPSTEN
1212 ? 'Ropsten'
13− : network === NETWORK_NAMES.MAINNET
13+ : network === NETWORK_TYPES.MAINNET
1414 ? 'Main Network'
15− : network === NETWORK_NAMES.LOCAL
15+ : network === NETWORK_TYPES.LOCAL
1616 ? 'Local Node'
1717 : 'Offline';
1818
19−export { NETWORK_NAMES, renderNetworkType };
19+export { NETWORK_TYPES, renderNetworkType };
src/bridge/lib/router.js+7−5
@@ -67,9 +67,11 @@ const ROUTES = {
6767 [ROUTE_NAMES.GEN_KEYFILE]: GenKeyfile,
6868};
6969
70−export const getRouteBreadcrumb = (props, route) => {
71− const { wallet, networkType } = props;
72−
70+export const getRouteBreadcrumb = ({
71+ networkType,
72+ wallet,
73+ pointCursor,
74+}) => route => {
7375 switch (route.name) {
7476 case ROUTE_NAMES.INVITE_TICKET:
7577 return 'Invite code';
@@ -80,7 +82,7 @@ export const getRouteBreadcrumb = (props, route) => {
8082 case ROUTE_NAMES.INVITES_MANAGE:
8183 return 'Manage invites';
8284 case ROUTE_NAMES.NETWORK:
83− return `${renderNetworkType(networkType)}`;
85+ return renderNetworkType(networkType);
8486 case ROUTE_NAMES.WALLET:
8587 return wallet.matchWith({
8688 Nothing: () => 'Wallet',
@@ -110,7 +112,7 @@ export const getRouteBreadcrumb = (props, route) => {
110112 case ROUTE_NAMES.VIEW_SHIP:
111113 return 'View';
112114 case ROUTE_NAMES.SHIP:
113− return ob.patp(need.pointCursor(props));
115+ return ob.patp(need.pointCursor({ pointCursor }));
114116 case ROUTE_NAMES.SET_TRANSFER_PROXY:
115117 case ROUTE_NAMES.SET_MANAGEMENT_PROXY:
116118 case ROUTE_NAMES.SET_SPAWN_PROXY:
src/bridge/lib/txn.js+4−4
@@ -4,7 +4,7 @@ import Tx from 'ethereumjs-tx';
44import { toWei, fromWei, toHex } from 'web3-utils';
55
66import { BRIDGE_ERROR } from '../lib/error';
7−import { NETWORK_NAMES } from '../lib/network';
7+import { NETWORK_TYPES } from '../lib/network';
88import { ledgerSignTransaction } from '../lib/ledger';
99import { trezorSignTransaction } from '../lib/trezor';
1010import { WALLET_NAMES, addHexPrefix } from '../lib/wallet';
@@ -90,9 +90,9 @@ const signTransaction = async config => {
9090 };
9191
9292 const defaultEip155Networks = [
93− NETWORK_NAMES.MAINNET,
94− NETWORK_NAMES.ROPSTEN,
95− NETWORK_NAMES.OFFLINE,
93+ NETWORK_TYPES.MAINNET,
94+ NETWORK_TYPES.ROPSTEN,
95+ NETWORK_TYPES.OFFLINE,
9696 ];
9797
9898 const needEip155Params =
src/bridge/store/network.js+5−5
@@ -10,14 +10,14 @@ import Web3 from 'web3';
1010import Maybe from 'folktale/maybe';
1111
1212import { CONTRACT_ADDRESSES } from '../lib/contracts';
13−import { NETWORK_NAMES } from '../lib/network';
13+import { NETWORK_TYPES } from '../lib/network';
1414import { isDevelopment } from '../lib/flags';
1515
1616function _useNetwork(initialNetworkType = null) {
1717 const [networkType, setNetworkType] = useState(initialNetworkType);
1818
1919 const { web3, contracts } = useMemo(() => {
20− if (networkType === NETWORK_NAMES.LOCAL) {
20+ if (networkType === NETWORK_TYPES.LOCAL) {
2121 const protocol = isDevelopment ? 'ws' : 'wss';
2222 const endpoint = `${protocol}://localhost:8545`;
2323 const provider = new Web3.providers.WebsocketProvider(endpoint);
@@ -27,7 +27,7 @@ function _useNetwork(initialNetworkType = null) {
2727 return { web3: Maybe.Just(web3), contracts: Maybe.Just(contracts) };
2828 }
2929
30− if (networkType === NETWORK_NAMES.ROPSTEN) {
30+ if (networkType === NETWORK_TYPES.ROPSTEN) {
3131 const endpoint = `https://ropsten.infura.io/v3/${process.env.REACT_APP_INFURA_ENDPOINT}`;
3232
3333 const provider = new Web3.providers.HttpProvider(endpoint);
@@ -37,7 +37,7 @@ function _useNetwork(initialNetworkType = null) {
3737 return { web3: Maybe.Just(web3), contracts: Maybe.Just(contracts) };
3838 }
3939
40− if (networkType === NETWORK_NAMES.MAINNET) {
40+ if (networkType === NETWORK_TYPES.MAINNET) {
4141 const endpoint = `https://mainnet.infura.io/v3/${process.env.REACT_APP_INFURA_ENDPOINT}`;
4242
4343 const provider = new Web3.providers.HttpProvider(endpoint);
@@ -47,7 +47,7 @@ function _useNetwork(initialNetworkType = null) {
4747 return { web3: Maybe.Just(web3), contracts: Maybe.Just(contracts) };
4848 }
4949
50− if (networkType === NETWORK_NAMES.OFFLINE) {
50+ if (networkType === NETWORK_TYPES.OFFLINE) {
5151 // NB (jtobin):
5252 //
5353 // The 'offline' network type targets the mainnet contracts, but does not
src/bridge/views/AcceptTransfer.js+6−5
@@ -12,8 +12,9 @@ import * as ob from 'urbit-ob';
1212import * as need from '../lib/need';
1313
1414import StatelessTransaction from '../components/StatelessTransaction';
15−import { NETWORK_NAMES } from '../lib/network';
15+import { NETWORK_TYPES } from '../lib/network';
1616import { isValidAddress } from '../lib/wallet';
17+import { withNetwork } from '../store/network';
1718
1819class AcceptTransfer extends React.Component {
1920 constructor(props) {
@@ -61,11 +62,11 @@ class AcceptTransfer extends React.Component {
6162 const canGenerate = validAddress === true;
6263
6364 const esvisible =
64− props.networkType === NETWORK_NAMES.ROPSTEN ||
65− props.networkType === NETWORK_NAMES.MAINNET;
65+ props.networkType === NETWORK_TYPES.ROPSTEN ||
66+ props.networkType === NETWORK_TYPES.MAINNET;
6667
6768 const esdomain =
68− props.networkType === NETWORK_NAMES.ROPSTEN
69+ props.networkType === NETWORK_TYPES.ROPSTEN
6970 ? 'ropsten.etherscan.io'
7071 : 'etherscan.io';
7172
@@ -117,4 +118,4 @@ class AcceptTransfer extends React.Component {
117118 }
118119}
119120
120−export default AcceptTransfer;
121+export default withNetwork(AcceptTransfer);
src/bridge/views/CancelTransfer.js+2−1
@@ -7,6 +7,7 @@ import * as need from '../lib/need';
77
88import StatelessTransaction from '../components/StatelessTransaction';
99import { ETH_ZERO_ADDR } from '../lib/wallet';
10+import { withNetwork } from '../store/network';
1011
1112class CancelTransfer extends React.Component {
1213 constructor(props) {
@@ -73,4 +74,4 @@ class CancelTransfer extends React.Component {
7374 }
7475}
7576
76−export default CancelTransfer;
77+export default withNetwork(CancelTransfer);
src/bridge/views/CreateGalaxy.js+6−5
@@ -15,12 +15,13 @@ import {
1515} from '../components/Base';
1616import StatelessTransaction from '../components/StatelessTransaction';
1717
18−import { NETWORK_NAMES } from '../lib/network';
18+import { NETWORK_TYPES } from '../lib/network';
1919import { canDecodePatp } from '../lib/txn';
2020
2121import { ETH_ZERO_ADDR, isValidAddress, eqAddr } from '../lib/wallet';
2222
2323import { isValidGalaxy } from '../lib/lib';
24+import { withNetwork } from '../store/network';
2425
2526const buttonTriState = status => {
2627 if (status === null) return 'blue';
@@ -117,11 +118,11 @@ class CreateGalaxy extends React.Component {
117118 state.isAvailable === true;
118119
119120 const esvisible =
120− props.networkType === NETWORK_NAMES.ROPSTEN ||
121− props.networkType === NETWORK_NAMES.MAINNET;
121+ props.networkType === NETWORK_TYPES.ROPSTEN ||
122+ props.networkType === NETWORK_TYPES.MAINNET;
122123
123124 const esdomain =
124− props.networkType === NETWORK_NAMES.ROPSTEN
125+ props.networkType === NETWORK_TYPES.ROPSTEN
125126 ? 'ropsten.etherscan.io'
126127 : 'etherscan.io';
127128
@@ -194,4 +195,4 @@ class CreateGalaxy extends React.Component {
194195 }
195196}
196197
197−export default CreateGalaxy;
198+export default withNetwork(CreateGalaxy);
src/bridge/views/InviteTicket.js+4−3
@@ -28,6 +28,7 @@ import {
2828 TRANSACTION_STATES,
2929} from '../lib/invite';
3030import { generateWallet, startTransactions } from '../lib/invite';
31+import { withNetwork } from '../store/network';
3132
3233class InviteTicket extends React.Component {
3334 constructor(props) {
@@ -305,8 +306,8 @@ class InviteTicket extends React.Component {
305306 realWalletM: realWallet,
306307 realPointM: realPoint,
307308 realTicket: verifyTicket,
308− web3M: web3,
309− contractsM: contracts,
309+ web3,
310+ contracts,
310311 setUrbitWallet,
311312 updateProgress: this.updateProgress,
312313 }).then(() => {
@@ -422,4 +423,4 @@ class InviteTicket extends React.Component {
422423 }
423424}
424425
425−export default withHistory(InviteTicket);
426+export default withNetwork(withHistory(InviteTicket));
src/bridge/views/InvitesManage.js+2−1
@@ -14,6 +14,7 @@ import {
1414 ValidatedSigil,
1515} from '../components/Base';
1616import StatelessTransaction from '../components/StatelessTransaction';
17+import { withNetwork } from '../store/network';
1718
1819class InvitesManage extends React.Component {
1920 constructor(props) {
@@ -182,4 +183,4 @@ class InvitesManage extends React.Component {
182183 }
183184}
184185
185−export default InvitesManage;
186+export default withNetwork(InvitesManage);
src/bridge/views/InvitesSend.js+2−1
@@ -19,6 +19,7 @@ import {
1919 toWei,
2020} from '../lib/txn';
2121import * as tank from '../lib/tank';
22+import { withNetwork } from '../store/network';
2223
2324const GAS_PRICE_GWEI = 20; // we pay the premium for faster ux
2425const GAS_LIMIT = 350000;
@@ -491,4 +492,4 @@ class InvitesSend extends React.Component {
491492 }
492493}
493494
494−export default InvitesSend;
495+export default withNetwork(InvitesSend);
src/bridge/views/IssueChild.js+6−5
@@ -19,11 +19,12 @@ import {
1919
2020import StatelessTransaction from '../components/StatelessTransaction';
2121
22−import { NETWORK_NAMES } from '../lib/network';
22+import { NETWORK_TYPES } from '../lib/network';
2323import { getSpawnCandidate } from '../lib/child';
2424import { canDecodePatp } from '../lib/txn';
2525
2626import { isValidAddress } from '../lib/wallet';
27+import { withNetwork } from '../store/network';
2728
2829const setFind = (set, pred) => {
2930 for (const e of set) {
@@ -151,11 +152,11 @@ class IssueChild extends React.Component {
151152 });
152153
153154 const esvisible =
154− props.networkType === NETWORK_NAMES.ROPSTEN ||
155− props.networkType === NETWORK_NAMES.MAINNET;
155+ props.networkType === NETWORK_TYPES.ROPSTEN ||
156+ props.networkType === NETWORK_TYPES.MAINNET;
156157
157158 const esdomain =
158− props.networkType === NETWORK_NAMES.ROPSTEN
159+ props.networkType === NETWORK_TYPES.ROPSTEN
159160 ? 'ropsten.etherscan.io'
160161 : 'etherscan.io';
161162
@@ -253,4 +254,4 @@ class IssueChild extends React.Component {
253254 }
254255}
255256
256−export default IssueChild;
257+export default withNetwork(IssueChild);
src/bridge/views/Network.js+5−5
@@ -3,7 +3,7 @@ import React from 'react';
33import { Button } from '../components/Base';
44import { InnerLabelDropdown } from '../components/Base';
55import { Row, Col, H1, P } from '../components/Base';
6−import { NETWORK_NAMES, renderNetworkType } from '../lib/network';
6+import { NETWORK_TYPES, renderNetworkType } from '../lib/network';
77import { ROUTE_NAMES } from '../lib/routeNames';
88import { useHistory } from '../store/history';
99import { useNetwork } from '../store/network';
@@ -11,22 +11,22 @@ import { useNetwork } from '../store/network';
1111const kNetworkOptions = [
1212 {
1313 title: 'Main Network (default)',
14− value: NETWORK_NAMES.MAINNET,
14+ value: NETWORK_TYPES.MAINNET,
1515 },
1616 {
1717 title: 'Local Node',
18− value: NETWORK_NAMES.LOCAL,
18+ value: NETWORK_TYPES.LOCAL,
1919 },
2020 {
2121 title: 'Ropsten',
22− value: NETWORK_NAMES.ROPSTEN,
22+ value: NETWORK_TYPES.ROPSTEN,
2323 },
2424 {
2525 type: 'divider',
2626 },
2727 {
2828 title: 'Offline',
29− value: NETWORK_NAMES.OFFLINE,
29+ value: NETWORK_TYPES.OFFLINE,
3030 },
3131];
3232
src/bridge/views/Point.js+2−1
@@ -11,6 +11,7 @@ import KeysAndMetadata from './Point/KeysAndMetadata';
1111import Actions from './Point/Actions';
1212import { Row, Col, H1, H3 } from '../components/Base';
1313import { withHistory } from '../store/history';
14+import { withNetwork } from '../store/network';
1415
1516class Point extends React.Component {
1617 constructor(props) {
@@ -135,4 +136,4 @@ class Point extends React.Component {
135136 }
136137}
137138
138−export default withHistory(Point);
139+export default withNetwork(withHistory(Point));
src/bridge/views/Points.js+4−3
@@ -4,10 +4,11 @@ import { Button } from '../components/Base';
44import * as azimuth from 'azimuth-js';
55
66import PointList from '../components/PointList';
7−import { NETWORK_NAMES } from '../lib/network';
7+import { NETWORK_TYPES } from '../lib/network';
88import { ROUTE_NAMES } from '../lib/routeNames';
99import { withHistory } from '../store/history';
1010import { ETH_ZERO_ADDR, eqAddr } from '../lib/wallet';
11+import { withNetwork } from '../store/network';
1112
1213const hasTransferProxy = (cache, point) =>
1314 point in cache ? !eqAddr(cache[point].transferProxy, ETH_ZERO_ADDR) : false;
@@ -17,7 +18,7 @@ class Points extends React.Component {
1718 super(props);
1819
1920 const { networkType } = props;
20− const loading = networkType !== NETWORK_NAMES.OFFLINE;
21+ const loading = networkType !== NETWORK_TYPES.OFFLINE;
2122
2223 this.state = {
2324 points: [],
@@ -255,4 +256,4 @@ class Points extends React.Component {
255256 }
256257}
257258
258−export default withHistory(Points);
259+export default withNetwork(withHistory(Points));
src/bridge/views/SentTransaction.js+15−10
@@ -7,8 +7,9 @@ import { Button } from '../components/Base';
77import { ROUTE_NAMES } from '../lib/routeNames';
88import { useHistory } from '../store/history';
99import { BRIDGE_ERROR, renderTxnError } from '../lib/error';
10−import { NETWORK_NAMES } from '../lib/network';
11−import { withTxnConfirmations } from '../store/txnConfirmations';
10+import { NETWORK_TYPES } from '../lib/network';
11+import { useTxnConfirmations } from '../store/txnConfirmations';
12+import { useNetwork } from '../store/network';
1213
1314class Success extends React.Component {
1415 constructor(props) {
@@ -39,11 +40,11 @@ class Success extends React.Component {
3940 const { pending } = state;
4041
4142 const esvisible =
42− networkType === NETWORK_NAMES.ROPSTEN ||
43− networkType === NETWORK_NAMES.MAINNET;
43+ networkType === NETWORK_TYPES.ROPSTEN ||
44+ networkType === NETWORK_TYPES.MAINNET;
4445
4546 const esdomain =
46− networkType === NETWORK_NAMES.ROPSTEN
47+ networkType === NETWORK_TYPES.ROPSTEN
4748 ? 'ropsten.etherscan.io'
4849 : 'etherscan.io';
4950
@@ -109,14 +110,18 @@ const Failure = props => (
109110 </Row>
110111);
111112
112−const SentTransaction = props => {
113+function SentTransaction(props) {
113114 const history = useHistory();
114− const { txnHashCursor, networkType, txnConfirmations } = props;
115+ const { txnConfirmations } = useTxnConfirmations();
116+ const { web3 } = useNetwork();
117+
118+ const { txnHashCursor, networkType } = props;
115119 const { setPointCursor, pointCursor } = props;
116120
117121 const promptKeyfile = history.data && history.data.promptKeyfile;
118122
119− const w3 = need.web3(props);
123+ // TODO: remove need's assumption about accepting the props object
124+ const w3 = need.web3({ web3 });
120125
121126 const result = txnHashCursor.matchWith({
122127 Nothing: _ => {
@@ -174,6 +179,6 @@ const SentTransaction = props => {
174179 {keyfile}
175180 </div>
176181 );
177−};
182+}
178183
179−export default withTxnConfirmations(SentTransaction);
184+export default SentTransaction;
src/bridge/views/SetKeys.js+2−1
@@ -11,6 +11,7 @@ import { attemptSeedDerivation } from '../lib/keys';
1111import * as kg from 'urbit-key-generation/dist/index';
1212
1313import { addHexPrefix } from '../lib/wallet';
14+import { withNetwork } from '../store/network';
1415
1516class SetKeys extends React.Component {
1617 constructor(props) {
@@ -196,4 +197,4 @@ class SetKeys extends React.Component {
196197 }
197198}
198199
199−export default SetKeys;
200+export default withNetwork(SetKeys);
src/bridge/views/SetProxy.js+19−18
@@ -17,25 +17,14 @@ import * as ob from 'urbit-ob';
1717
1818import { PROXY_TYPE, renderProxyType } from '../lib/proxy';
1919
20−import { NETWORK_NAMES } from '../lib/network';
20+import { NETWORK_TYPES } from '../lib/network';
2121
2222import StatelessTransaction from '../components/StatelessTransaction';
2323
2424import { isValidAddress } from '../lib/wallet';
25+import { withNetwork } from '../store/network';
2526
26−const SetManagementProxy = props => (
27− <SetProxy {...props} proxyType={PROXY_TYPE.MANAGEMENT_PROXY} />
28−);
29−
30−const SetSpawnProxy = props => (
31− <SetProxy {...props} proxyType={PROXY_TYPE.SPAWN_PROXY} />
32−);
33−
34−const SetTransferProxy = props => (
35− <SetProxy {...props} proxyType={PROXY_TYPE.TRANSFER_PROXY} />
36−);
37−
38−class SetProxy extends React.Component {
27+class _SetProxy extends React.Component {
3928 constructor(props) {
4029 super(props);
4130
@@ -99,11 +88,11 @@ class SetProxy extends React.Component {
9988 const canGenerate = validAddress === true;
10089
10190 const esvisible =
102− props.networkType === NETWORK_NAMES.ROPSTEN ||
103− props.networkType === NETWORK_NAMES.MAINNET;
91+ props.networkType === NETWORK_TYPES.ROPSTEN ||
92+ props.networkType === NETWORK_TYPES.MAINNET;
10493
10594 const esdomain =
106− props.networkType === NETWORK_NAMES.ROPSTEN
95+ props.networkType === NETWORK_TYPES.ROPSTEN
10796 ? 'ropsten.etherscan.io'
10897 : 'etherscan.io';
10998
@@ -179,4 +168,16 @@ class SetProxy extends React.Component {
179168 }
180169}
181170
182−export { SetManagementProxy, SetSpawnProxy, SetTransferProxy };
171+const SetProxy = withNetwork(_SetProxy);
172+
173+export const SetManagementProxy = props => (
174+ <SetProxy {...props} proxyType={PROXY_TYPE.MANAGEMENT_PROXY} />
175+);
176+
177+export const SetSpawnProxy = props => (
178+ <SetProxy {...props} proxyType={PROXY_TYPE.SPAWN_PROXY} />
179+);
180+
181+export const SetTransferProxy = props => (
182+ <SetProxy {...props} proxyType={PROXY_TYPE.TRANSFER_PROXY} />
183+);
src/bridge/views/Transfer.js+6−5
@@ -16,9 +16,10 @@ import {
1616import { AddressInput } from '../components/Base';
1717import StatelessTransaction from '../components/StatelessTransaction';
1818
19−import { NETWORK_NAMES } from '../lib/network';
19+import { NETWORK_TYPES } from '../lib/network';
2020
2121import { isValidAddress } from '../lib/wallet';
22+import { withNetwork } from '../store/network';
2223
2324class Transfer extends React.Component {
2425 constructor(props) {
@@ -70,11 +71,11 @@ class Transfer extends React.Component {
7071 const canGenerate = validAddress === true;
7172
7273 const esvisible =
73− props.networkType === NETWORK_NAMES.ROPSTEN ||
74− props.networkType === NETWORK_NAMES.MAINNET;
74+ props.networkType === NETWORK_TYPES.ROPSTEN ||
75+ props.networkType === NETWORK_TYPES.MAINNET;
7576
7677 const esdomain =
77− props.networkType === NETWORK_NAMES.ROPSTEN
78+ props.networkType === NETWORK_TYPES.ROPSTEN
7879 ? 'ropsten.etherscan.io'
7980 : 'etherscan.io';
8081
@@ -130,4 +131,4 @@ class Transfer extends React.Component {
130131 }
131132}
132133
133−export default Transfer;
134+export default withNetwork(Transfer);
src/walletgen/Walletgen.js+2
@@ -18,6 +18,8 @@ import Download from './views/Download';
1818import Done from './views/Done';
1919
2020import './style/index.css';
21+
22+// TODO: actually merge these two projects into one
2123import { OnlineProvider } from '../bridge/store/online';
2224
2325const ROUTES = [