@@ -1,188 +0,0 @@
1−import React from 'react';
2−import { azimuth } from 'azimuth-js';
3−import * as need from '../../lib/need';
4−
5−import { isZeroAddress, eqAddr } from '../../lib/wallet';
6−import { H2, P } from '../../components/old/Base';
7−import { Button } from '../../components/old/Base';
8−import { ROUTE_NAMES } from '../../lib/routeNames';
9−import { useHistory } from '../../store/history';
10−import { useWallet } from '../../store/wallet';
11−import { Grid } from 'indigo-react';
12−import { usePointCursor } from 'store/pointCursor';
13−import { usePointCache } from 'store/pointCache';
14−import { CURVE_ZERO_ADDR } from 'lib/keys';
15−
16−const isPlanet = point =>
17− azimuth.getPointSize(point) === azimuth.PointSize.Planet;
18−
19−function Actions() {
20− const history = useHistory();
21− const { wallet } = useWallet();
22− const { pointCursor } = usePointCursor();
23− const point = need.point(pointCursor);
24− const { getDetails } = usePointCache();
25− const pointDetails = getDetails(point);
26−
27− const addr = need.addressFromWallet(wallet);
28−
29− const planet = isPlanet(point);
30−
31− const isOwner = pointDetails.matchWith({
32− Nothing: _ => false,
33− Just: details => eqAddr(details.value.owner, addr),
34− });
35− const isActive = pointDetails.matchWith({
36− Nothing: _ => false,
37− Just: details => details.value.active,
38− });
39− const isActiveOwner = isOwner && isActive;
40− const canSetSpawnProxy = isActiveOwner && !planet;
41− const canSetManagementProxy = isActiveOwner;
42−
43− const canManage =
44− isOwner ||
45− pointDetails.matchWith({
46− Nothing: _ => false,
47− Just: details => eqAddr(details.value.managementProxy, addr),
48− });
49− const canConfigureKeys = canManage && isActive;
50−
51− const canIssueChild = pointDetails.matchWith({
52− Nothing: () => false,
53− Just: details => {
54− const hasPermission = isOwner || eqAddr(details.value.spawnProxy, addr);
55−
56− const isBooted = details.value.keyRevisionNumber > 0;
57−
58− const isNotPlanet = !isPlanet(point);
59−
60− return hasPermission && isBooted && isNotPlanet;
61− },
62− });
63−
64− const canTransfer = pointDetails.matchWith({
65− Nothing: () => false,
66− Just: deets =>
67− eqAddr(deets.value.transferProxy, addr) ||
68− eqAddr(deets.value.owner, addr),
69− });
70−
71− const canAcceptTransfer = pointDetails.matchWith({
72− Nothing: () => false,
73− Just: deets => eqAddr(deets.value.transferProxy, addr),
74− });
75−
76− const canCancelTransfer = pointDetails.matchWith({
77− Nothing: () => false,
78− Just: deets =>
79− eqAddr(deets.value.owner, addr) &&
80− !isZeroAddress(deets.value.transferProxy),
81− });
82−
83− const displayReminder = pointDetails.matchWith({
84− Nothing: () => false,
85− Just: deets => {
86− return (
87− deets.value.encryptionKey === CURVE_ZERO_ADDR &&
88− deets.value.authenticationKey === CURVE_ZERO_ADDR
89− );
90− },
91− });
92−
93− return (
94− <div>
95− <H2>{'Actions'}</H2>
96− {displayReminder ? (
97− <P>{`Before you can issue child points or generate your Arvo
98− keyfile, you need to set your public keys.`}</P>
99− ) : (
100− ''
101− )}
102− <Grid>
103− <Grid.Item third={1}>
104− <Button
105− prop-size={'sm'}
106− prop-type={'link'}
107− disabled={planet && !canIssueChild}
108− onClick={() => {
109− history.push(ROUTE_NAMES.ISSUE_CHILD);
110− }}>
111− {'Issue child'}
112− </Button>
113−
114− <Button
115− prop-size={'sm'}
116− prop-type={'link'}
117− disabled={!canAcceptTransfer}
118− onClick={() => {
119− history.push(ROUTE_NAMES.ACCEPT_TRANSFER);
120− }}>
121− {'Accept incoming transfer'}
122− </Button>
123−
124− <Button
125− prop-size={'sm'}
126− prop-type={'link'}
127− disabled={!canCancelTransfer}
128− onClick={() => {
129− history.push(ROUTE_NAMES.CANCEL_TRANSFER);
130− }}>
131− {'Cancel outgoing transfer'}
132− </Button>
133− </Grid.Item>
134− <Grid.Item third={2}>
135− <Button
136− disabled={!canSetSpawnProxy}
137− prop-size={'sm'}
138− prop-type={'link'}
139− onClick={() => {
140− history.push(ROUTE_NAMES.SET_SPAWN_PROXY);
141− }}>
142− {'Change spawn proxy'}
143− </Button>
144−
145− <Button
146− disabled={!canSetManagementProxy}
147− prop-size={'sm'}
148− prop-type={'link'}
149− onClick={() => {
150− history.push(ROUTE_NAMES.SET_MANAGEMENT_PROXY);
151− }}>
152− {'Change management proxy'}
153− </Button>
154−
155− <Button
156− disabled={!canConfigureKeys}
157− prop-size={'sm'}
158− prop-type={'link'}
159− onClick={() => {
160− history.push(ROUTE_NAMES.SET_KEYS);
161− }}>
162− {'Set network keys'}
163− </Button>
164−
165− <Button
166− disabled={!canTransfer}
167− prop-size={'sm'}
168− prop-type={'link'}
169− onClick={() => {
170− history.push(ROUTE_NAMES.TRANSFER);
171− }}>
172− {'Transfer'}
173− </Button>
174− <Button
175− prop-size={'sm'}
176− prop-type={'link'}
177− onClick={() => {
178− history.push(ROUTE_NAMES.INVITES_MANAGE);
179− }}>
180− {'Invite'}
181− </Button>
182− </Grid.Item>
183− </Grid>
184− </div>
185− );
186−}
187−
188−export default Actions;