@@ -1,141 +1,39 @@
1−import React, { useState, useCallback, useMemo, useEffect } from 'react';
1+import React, { useState, useCallback, useMemo } from 'react';
22
3−import { useNetwork } from 'store/network';
4−import { useWallet } from 'store/wallet';
5−import { useHistory } from 'store/history';
6−import { usePointCursor } from 'store/pointCursor';
7−
8−import * as need from 'lib/need';
93import useLifecycle from 'lib/useLifecycle';
10−import useBlockWindowClose from 'lib/useBlockWindowClose';
11−import { reticketPointBetweenWallets } from 'lib/reticket';
124
135import { Anchor, Box, Text } from '@tlon/indigo-react';
146import { useActivateFlow } from './ActivateFlow';
157import ActivateView from './ActivateView';
16−import { POINT_DOMINIONS } from 'lib/constants';
17−import { From } from '@urbit/roller-api';
188import useRoller from 'lib/useRoller';
199import { FadeableActivateHeader as ActivateHeader } from './ActivateHeader';
2010import { FadeableActivateButton as ActivateButton } from './ActivateButton';
2111import useFadeIn from './useFadeIn';
2212import PointPresenter from './PointPresenter';
13+import DangerBox from './DangerBox';
2314
24−const MasterKeyTransfer = ({ className, resetActivateRouter }) => {
25− const { replaceWith, names } = useHistory();
26− const { setUrbitWallet } = useWallet();
27− const { setPointCursor } = usePointCursor();
28− const { web3, contracts, networkType } = useNetwork();
15+const MasterKeyTransfer = () => {
2916 const { api, transferPoint } = useRoller();
30− const {
31− derivedPatp,
32− derivedPoint,
33− derivedPointDominion,
34− derivedWallet,
35− inviteWallet,
36− reset: resetActivateFlow,
37− } = useActivateFlow();
38− const [generalError, setGeneralError] = useState();
39− const [progress, setProcesss] = useState(0);
40− const [needFunds, setNeedFunds] = useState();
41−
42− // const [transferTxHash, setTransferTxHash] = useState<string | null>(null);
43−
44− const _inviteWallet = need.wallet(inviteWallet);
45− const _wallet = need.wallet(derivedWallet);
46− const _point = need.point(derivedPoint);
47− const _web3 = need.web3(web3);
48− const _contracts = need.contracts(contracts);
49−
50− const goToLogin = useCallback(
51− () => replaceWith([{ key: names.LOGIN }, { key: names.POINT }]),
52− [replaceWith, names]
53− );
54−
55− const goToRestart = useCallback(() => {
56− // NOTE: because we're already on the ACTIVATE view in the history,
57− // react (intelligently) doesn't trigger a re-render and that means the
58− // current state of the two nested routers (activate & passport) stick
59− // around unless we manually clear them.
60− // we only need to clear activate because that will unmount the passport
61− // router (which will be set to initialRoutes when mounted again)
62−
63− // 2) reset local router
64− resetActivateRouter();
65− // 3) clear the state
66− resetActivateFlow();
67− }, [resetActivateRouter, resetActivateFlow]);
68−
69− const claimL2Point = useCallback(async () => {
70− console.log('claiming l2 point:');
71− const transferFrom: From = {
72− ship: derivedPatp.value,
73− proxy: 'transfer',
74− };
75−
76− const l2point = await api.getPoint(derivedPoint.value);
77− const fromAddress = l2point.ownership?.owner?.address!;
78− const txHash = await transferPoint({
79− point: derivedPoint.value,
80− from: transferFrom,
81− to: _inviteWallet.address,
82− fromAddress: fromAddress,
83− signingKey: derivedWallet.value.ownership.keys.private,
84− });
85−
86− // setTransferTxHash(txHash);
87− }, [
88− _inviteWallet.address,
89− api,
90− derivedPatp.value,
91− derivedPoint.value,
92− derivedWallet.value,
93− transferPoint,
94− ]);
95−
96− // const claimL1Point = useCallback(async () => {
97− // await reticketPointBetweenWallets({
98− // fromWallet: _inviteWallet,
99− // toWallet: _wallet,
100− // point: _point,
101− // web3: _web3,
102− // contracts: _contracts,
103− // networkType,
104− // onUpdate: handleUpdate,
105− // transferEth: true,
106− // //NOTE not passing wc function, we always have invite ticket wallet
107− // });
108− // }, [_contracts, _inviteWallet, _point, _wallet, _web3, networkType]);
17+ const { derivedPatp, derivedPoint, derivedWallet } = useActivateFlow();
18+ const [error, setError] = useState();
10919
11020 const claimPoint = useCallback(async () => {
111− setGeneralError(false);
21+ setError(undefined);
11222
11323 try {
114− // If L2
115− if (derivedPointDominion.value === POINT_DOMINIONS.L2) {
116− await claimL2Point();
117− } else {
118− // await claimL1Point();
119− console.log('do nothing for now');
120− }
121−
122− // If L1
123−
124− // set the global wallet
125− // setUrbitWallet(derivedWallet);
126− // setPointCursor(derivedPoint);
127−
128− // and redirect to login
129− // await timeout(3000);
130− // goToLogin();
24+ const l2point = await api.getPoint(derivedPoint.value);
25+ await transferPoint({
26+ point: derivedPoint.value,
27+ to: derivedWallet.value.ownership.address,
28+ ownerAddress: l2point.ownership?.owner?.address!,
29+ wallet: derivedWallet.value,
30+ });
13131 } catch (error) {
13232 console.error(error);
133− // some generic error
134− setGeneralError(error);
33+ setError(error);
13534 }
136− }, [derivedPointDominion, claimL2Point]);
35+ }, [api, derivedPoint.value, derivedWallet.value, transferPoint]);
13736
138− // useBlockWindowClose();
13937 useFadeIn();
14038
14139 useLifecycle(() => {
@@ -165,13 +63,15 @@ const MasterKeyTransfer = ({ className, resetActivateRouter }) => {
16563 flexDirection={'column'}
16664 flexWrap={'nowrap'}
16765 justifyContent={'space-between'}>
66+ {error && <DangerBox>{error.toString()}</DangerBox>}
16867 <ActivateButton
16968 onClick={() =>
17069 window.open(
17170 'https://github.com/urbit/port/releases/latest/download/Port.dmg'
17271 )
17372 }
174− success={true}>
73+ success={true}
74+ disabled={error}>
17575 Download the Client for Mac
17676 </ActivateButton>
17777 <Anchor
@@ -188,7 +88,7 @@ const MasterKeyTransfer = ({ className, resetActivateRouter }) => {
18888 </Anchor>
18989 </Box>
19090 );
191− }, []);
91+ }, [error]);
19292
19393 return (
19494 <ActivateView header={header} footer={footer}>