on 08b82bf help sign in
bridge/src/views/Admin/AdminSetProxy.js
115 lines 3.4 kB history raw
1import React, { useCallback } from 'react';
2import { Grid, P, Text, Input } from 'indigo-react';
3import * as azimuth from 'azimuth-js';
5import { useNetwork } from 'store/network';
7import * as need from 'lib/need';
8import { useLocalRouter } from 'lib/LocalRouter';
9import { ETH_ZERO_ADDR } from 'lib/wallet';
11import ViewHeader from 'components/ViewHeader';
12import { usePointCursor } from 'store/pointCursor';
13import {
14 PROXY_TYPE,
15 proxyTypeToHuman,
16 proxyTypeToHumanDescription,
17} from 'lib/proxy';
18import MiniBackButton from 'components/MiniBackButton';
19import capitalize from 'lib/capitalize';
20import { usePointCache } from 'store/pointCache';
21import { GenerateButton } from 'components/Buttons';
22import { useAddressInput } from 'lib/useInputs';
24const proxyFromDetails = (details, proxyType) => {
25 switch (proxyType) {
26 case PROXY_TYPE.MANAGEMENT:
27 return details.managementProxy;
28 case PROXY_TYPE.SPAWN:
29 return details.spawnProxy;
30 case PROXY_TYPE.TRANSFER:
31 return details.transferProxy;
32 case PROXY_TYPE.VOTING:
33 return details.votingProxy;
34 default:
35 throw new Error(`Unknown proxyType: ${proxyType}`);
36 }
37};
39function useSetProxy(proxyType) {
40 // TODO: abstract eth login into higher level useTransaction()
41 const { contracts } = useNetwork();
42 const { pointCursor } = usePointCursor();
44 const buildUnsignedTx = useCallback(
45 address => {
46 const _contracts = need.contracts(contracts);
47 const _point = need.point(pointCursor);
49 const txArgs = [_contracts, _point, address];
51 switch (proxyType) {
52 case PROXY_TYPE.MANAGEMENT:
53 return azimuth.ecliptic.setManagementProxy(...txArgs);
54 case PROXY_TYPE.SPAWN:
55 return azimuth.ecliptic.setSpawnProxy(...txArgs);
56 case PROXY_TYPE.TRANSFER:
57 return azimuth.ecliptic.setTransferProxy(...txArgs);
58 case PROXY_TYPE.VOTING:
59 return azimuth.ecliptic.setTransferProxy(...txArgs);
60 default:
61 throw new Error(`Unknown proxyType ${proxyType}`);
62 }
63 },
64 [proxyType, contracts, pointCursor]
65 );
67 const generate = useCallback(async () => {
68 //
69 }, []);
71 return {
72 generate,
73 };
76export default function AdminSetProxy() {
77 const { data, pop } = useLocalRouter();
78 const { getDetails } = usePointCache();
79 const { pointCursor } = usePointCursor();
80 const point = need.point(pointCursor);
81 const details = need.details(getDetails(point));
83 const properProxyType = capitalize(proxyTypeToHuman(data.proxyType));
85 const [addressInput, { pass }] = useAddressInput({
86 name: 'address',
87 label: `New ${properProxyType} Address`,
88 });
90 const { generate } = useSetProxy(data.proxyType);
92 return (
93 <Grid>
94 <Grid.Item full as={MiniBackButton} onClick={() => pop()} />
95 <Grid.Item full as={ViewHeader}>
96 {properProxyType} Address
97 </Grid.Item>
98 <Grid.Item full as={P}>
99 {proxyTypeToHumanDescription(data.proxyType)}
100 </Grid.Item>
101 <Grid.Item full as={Text} className="f6">
102 Current {properProxyType} Address
103 </Grid.Item>
104 <Grid.Item full as={Text} className="mono">
105 {proxyFromDetails(details, data.proxyType)}
106 </Grid.Item>
108 <Grid.Item full as={Input} {...addressInput} className="mv4" />
110 <Grid.Item full as={GenerateButton} onClick={generate}>
111 Generate & Sign Transaction
112 </Grid.Item>
113 </Grid>
114 );