@@ -1,5 +1,4 @@
1−import React, { useCallback, useEffect, useState } from 'react';
1+import { useCallback, useEffect, useMemo, useState } from 'react';
2−import cn from 'classnames';
3import { azimuth } from 'azimuth-js';
2import { azimuth } from 'azimuth-js';
4import { Just } from 'folktale/maybe';
3import { Just } from 'folktale/maybe';
5import { Grid, Flex } from 'indigo-react';
4import { Grid, Flex } from 'indigo-react';
@@ -13,9 +12,6 @@ import View from 'components/View';
13import Greeting from 'components/Greeting';
12import Greeting from 'components/Greeting';
14import Passport from 'components/Passport';
13import Passport from 'components/Passport';
15import Blinky from 'components/Blinky';
14import Blinky from 'components/Blinky';
16−import BarGraph from 'components/BarGraph';
17−import Chip from 'components/Chip';
18−import InviteSigilList from 'components/InviteSigilList';
19import { ForwardButton } from 'components/Buttons';
15import { ForwardButton } from 'components/Buttons';
20import L2PointHeader from 'components/L2/Headers/L2PointHeader';
16import L2PointHeader from 'components/L2/Headers/L2PointHeader';
21import LayerIndicator from 'components/L2/LayerIndicator';
17import LayerIndicator from 'components/L2/LayerIndicator';
@@ -23,185 +19,67 @@ import Card from 'components/L2/Card';
24import * as need from 'lib/need';
20import * as need from 'lib/need';
25import useInvites from 'lib/useInvites';
21import useInvites from 'lib/useInvites';
26−import { useSyncExtras } from 'lib/useSyncPoints';
27import useCurrentPermissions from 'lib/useCurrentPermissions';
22import useCurrentPermissions from 'lib/useCurrentPermissions';
28import { useLocalRouter } from 'lib/LocalRouter';
23import { useLocalRouter } from 'lib/LocalRouter';
29−import Inviter from 'views/Invite/Inviter';
30import useRoller from 'lib/useRoller';
24import useRoller from 'lib/useRoller';
32import './Point.scss';
26import './Point.scss';
33import { isL2 } from 'lib/utils/roller';
27import { isL2 } from 'lib/utils/roller';
34import { isDevelopment } from 'lib/flags';
28import { isDevelopment } from 'lib/flags';
35−import { convertToInt } from 'lib/convertToInt';
36import { usePointCache } from 'store/pointCache';
29import { usePointCache } from 'store/pointCache';
37import Modal from 'components/L2/Modal';
30import Modal from 'components/L2/Modal';
38import { isPlanet } from 'lib/utils/point';
31import { isPlanet } from 'lib/utils/point';
39−
32+import { useHasNetworkKeysSet } from 'lib/useHasNetworkKeysSet';
40−function InviteForm({
33+import { InviteForm } from './InviteForm';
51− const _totalInvites =
52− sentInvites.getOrElse(0) + availableInvites.getOrElse(0);
53− const _pendingInvites = pendingPoints.getOrElse([]).length;
57− <Grid.Item cols={[1, 11]}>
63− className={cn('t-right underline pointer-hover', {
64− gray4: sentInvites.getOrElse(0) === 0,
71− <Flex align="center">
73− {acceptedInvites.getOrElse(0)} / {_totalInvites}
75− {_pendingInvites > 0 && (
76− <Flex.Item as={Chip} className="bg-yellow1 yellow4">
77− {_pendingInvites} pending
88− available={availableInvites}
90− accepted={acceptedInvites}
95− pendingPoints={pendingPoints}
96− acceptedPoints={acceptedPoints}
102− <Grid.Item full className="b-gray4 b-dotted b1 self-center">
103− <div className="p4 pv8 t-center gray4">
104− Start your invite group by adding members
109− {!showInviteForm && availableInvites.getOrElse(0) > 0 && (
115− onClick={() => setShowInviteForm(true)}>
119− {showInviteForm && <Inviter />}
120− <Grid.Item full className="mb2" />
125export default function Point() {
35export default function Point() {
126 const { pop, push, names } = useLocalRouter();
36 const { pop, push, names } = useLocalRouter();
127− const { wallet, authToken } = useWallet();
37+ const { wallet } = useWallet();
128 const { pointCursor } = usePointCursor();
38 const { pointCursor } = usePointCursor();
129 const point = need.point(pointCursor);
39 const point = need.point(pointCursor);
130− const { getDetails } = usePointCache();
40+ const { syncExtras } = usePointCache();
131− // sync the current cursor
132− useSyncExtras([point]);
134 const { api, getInvites } = useRoller();
41 const { api, getInvites } = useRoller();
136 pendingTransactions,
43 pendingTransactions,
137 nextRoll,
44 nextRoll,
139 setCurrentPoint,
46 setCurrentPoint,
140− setPendingTransactions,
142 setNonces,
47 setNonces,
143 increaseNonce,
48 increaseNonce,
145 } = useRollerStore();
49 } = useRollerStore();
146−
50+ const networkKeysSet = useHasNetworkKeysSet();
147− // const pointSize = azimuth.getPointSize(point);
148− // const details = need.details(getDetails(point));
149− // const details = getDetails(point);
150− // console.log(details);
151− // const isStarOrGalaxy = pointSize !== azimuth.PointSize.Planet;
152− // const networkRevision =
153− // Just.hasInstance(details) &&
154− // convertToInt(need.details(details).keyRevisionNumber, 10);
155− // console.log(networkRevision);
156− const networkKeysNotSet = false;
157− // networkRevision && !currentL2 && isStarOrGalaxy && networkRevision === 0;
159− const [showModal, setShowModal] = useState(networkKeysNotSet);
51+ const [showModal, setShowModal] = useState(!networkKeysSet);
161− // useEffect(() => {
53+ const loadL1Info = useCallback(async () => {
162− // if (networkKeysNotSet) {
54+ await syncExtras(point);
163− // setShowModal(true);
55+ }, [point, syncExtras]);
165− // }, [networkKeysNotSet]);
169− const loadL2Info = async () => {
57+ const loadL2Info = useCallback(async () => {
170− const getTransactions = async () => {
58+ const getTransactions = async () => {
171− const pointInfo = await api.getPoint(Number(point));
59+ const pointInfo = await api.getPoint(Number(point));
172− const pendingTxs = await api.getPendingByShip(Number(point));
60+ const pendingTxs = await api.getPendingByShip(Number(point));
173− if (isDevelopment) {
61+ if (isDevelopment) {
174− console.log('POINT INFO', pointInfo);
62+ console.log('POINT INFO', pointInfo);
176− setNonces(point, pointInfo.ownership);
64+ setNonces(point, pointInfo.ownership);
178− for (let index = 0; index < pendingTxs.length; index++) {
66+ for (let index = 0; index < pendingTxs.length; index++) {
179− const proxy = pendingTxs[index].rawTx?.from?.proxy;
67+ const proxy = pendingTxs[index].rawTx?.from?.proxy;
180− console.log(pointInfo.ownership, proxy);
68+ console.log(pointInfo.ownership, proxy);
181− increaseNonce(point, proxy);
69+ increaseNonce(point, proxy);
183− setCurrentPoint(pointInfo);
71+ setCurrentPoint(pointInfo);
184− getInvites(isL2(pointInfo.dominion));
72+ await getInvites(isL2(pointInfo.dominion));
187− getTransactions();
75+ await getTransactions();
193− // TODO: adding this causes the effect to be called constantly...
197− // setPendingTransactions,
199− // setCurrentPoint,
76+ }, [api, point, setCurrentPoint, increaseNonce, getInvites, setNonces]);
200− // increaseNonce,
77+
201− // getInvites,
78+ useEffect(() => {
202− // setNonces,
79+ loadL1Info();
204− );
81+ // eslint-disable-next-line react-hooks/exhaustive-deps
206 const { isParent, canManage, canSpawn, canVote } = useCurrentPermissions();
84 const { isParent, canManage, canSpawn, canVote } = useCurrentPermissions();
@@ -222,8 +100,6 @@ export default function Point() {
222 const hasInvites = showInvites || availableInvites.getOrElse(0) !== 0;
100 const hasInvites = showInvites || availableInvites.getOrElse(0) !== 0;
224 const loadedInvites = Just.hasInstance(availableInvites);
102 const loadedInvites = Just.hasInstance(availableInvites);
226− // availableInvites.getOrElse(0) === 0
228 const goSenate = useCallback(() => push(names.SENATE), [push, names]);
104 const goSenate = useCallback(() => push(names.SENATE), [push, names]);
@@ -262,13 +138,13 @@ export default function Point() {
265− // sync the current cursor
266− useSyncExtras([point]);
268 const address = need.addressFromWallet(wallet);
141 const address = need.addressFromWallet(wallet);
143+ const numPending = useMemo(() => {
269− const numPending = pendingTransactions.filter(
144+ return pendingTransactions.filter(
270− ({ rawTx }) => rawTx?.tx?.type === 'spawn'
145+ ({ rawTx }) => rawTx?.tx?.type === 'spawn'
271− ).length;
146+ ).length;
147+ }, [pendingTransactions]);
@@ -280,7 +156,7 @@ export default function Point() {
280 <L2PointHeader
156 <L2PointHeader
281 hideTimer={!!numPending}
157 hideTimer={!!numPending}
282 numInvites={invites.length}
158 numInvites={invites.length}
283− hideInvites={networkKeysNotSet}
159+ hideInvites={!networkKeysSet}
286 <Greeting point={point} />
162 <Greeting point={point} />