on master help sign in
Add page for redownloading paper wallet
commit2043bfc0583d1f19b2163558f098cb441718b524 authorFang <git@fang.io> dateMon 1 Jul 2019, 19:22 (7 years ago) parent9a340d3
4 files changed+75−5
src/lib/routeNames.js+1 src/lib/router.js+2 src/views/Admin.js+17−5 src/views/Redownload.js+55
src/lib/routeNames.js+1
@@ -8,6 +8,7 @@ export const ROUTE_NAMES = {
88 //
99 LOGIN: Symbol('LOGIN'),
1010 ADMIN: Symbol('ADMIN'),
11+ REDOWNLOAD: Symbol('REDOWNLOAD'),
1112 RETICKET: Symbol('RETICKET'),
1213 //
1314 ACCEPT_TRANSFER: Symbol('ACCEPT_TRANSFER'),
src/lib/router.js+2
@@ -6,6 +6,7 @@ import Login from '../views/Login.js';
66import InviteTicket from '../views/InviteTicket';
77import InvitesManage from '../views/InvitesManage.js';
88import Admin from '../views/Admin';
9+import Redownload from '../views/Redownload';
910import Reticket from '../views/Reticket';
1011import AcceptTransfer from '../views/AcceptTransfer';
1112import CancelTransfer from '../views/CancelTransfer';
@@ -35,6 +36,7 @@ export const ROUTES = {
3536 [ROUTE_NAMES.INVITES_MANAGE]: InvitesManage,
3637 [ROUTE_NAMES.LOGIN]: Login,
3738 [ROUTE_NAMES.ADMIN]: Admin,
39+ [ROUTE_NAMES.REDOWNLOAD]: Redownload,
3840 [ROUTE_NAMES.RETICKET]: Reticket,
3941 [ROUTE_NAMES.ACCEPT_TRANSFER]: AcceptTransfer,
4042 [ROUTE_NAMES.CANCEL_TRANSFER]: CancelTransfer,
src/views/Admin.js+17−5
@@ -1,4 +1,5 @@
11import React, { useCallback } from 'react';
2+import { Just } from 'folktale/maybe';
23import * as need from 'lib/need';
34import { Grid } from 'indigo-react';
45
@@ -13,10 +14,12 @@ import useInvites from 'lib/useInvites';
1314import { ROUTE_NAMES } from 'lib/routeNames';
1415
1516import { useHistory } from 'store/history';
17+import { useWallet } from 'store/wallet';
1618import FooterButton from 'components/FooterButton';
1719
1820export default function Admin() {
1921 const history = useHistory();
22+ const { urbitWallet } = useWallet();
2023 const { pointCursor } = usePointCursor();
2124 // const { pointCache } = usePointCache();
2225
@@ -25,25 +28,34 @@ export default function Admin() {
2528 // fetch the invites for the current cursor
2629 const { availableInvites } = useInvites(point);
2730
31+ const goRedownload = useCallback(() => history.push(ROUTE_NAMES.REDOWNLOAD), [
32+ history,
33+ ]);
34+
2835 const goReticket = useCallback(() => history.push(ROUTE_NAMES.RETICKET), [
2936 history,
3037 ]);
3138
3239 // const pointDetails = need.fromPointCache(pointCache, point);
3340
41+ const canDownloadPassport = Just.hasInstance(urbitWallet);
42+
3443 return (
3544 <View>
3645 <Grid className="pt2">
3746 <Grid.Item full>
38− //TODO "Set Keys" when unset?
39− <ForwardButton detail="Configure public keys">
40− Edit Keys
47+ <ForwardButton
48+ disabled={!canDownloadPassport}
49+ onClick={goRedownload}
50+ detail="Re-download your paper wallet">
51+ Download Passport
4152 </ForwardButton>
4253 </Grid.Item>
4354 <Grid.Divider />
4455 <Grid.Item full>
45− //TODO disable if not logged in as owner
46− <ForwardButton detail="Get a new master ticket" onClick={goReticket}>
56+ <ForwardButton
57+ onClick={goReticket}
58+ detail="//TODO disable if not logged in as owner">
4759 Reticket
4860 </ForwardButton>
4961 </Grid.Item>
src/views/Redownload.jsnew file+55
@@ -0,0 +1,55 @@
1+import React, { useCallback, useState } from 'react';
2+import { Just, Nothing } from 'folktale/maybe';
3+import * as need from 'lib/need';
4+import { Grid } from 'indigo-react';
5+
6+import { usePointCursor } from 'store/pointCursor';
7+// import { usePointCache } from 'store/pointCache';
8+
9+import View from 'components/View';
10+import { DownloadButton } from 'components/Buttons';
11+import PaperCollateralRenderer from 'PaperCollateralRenderer';
12+
13+import { downloadWallet } from 'lib/invite';
14+import { ROUTE_NAMES } from 'lib/routeNames';
15+
16+import { useHistory } from 'store/history';
17+import { useWallet } from 'store/wallet';
18+import FooterButton from 'components/FooterButton';
19+
20+export default function Admin() {
21+ const history = useHistory();
22+ const { urbitWallet } = useWallet();
23+ const { pointCursor } = usePointCursor();
24+ const point = need.pointCursor(pointCursor);
25+
26+ const [paper, setPaper] = useState(Nothing());
27+
28+ const doDownload = () => {
29+ downloadWallet(paper.value);
30+ };
31+
32+ const paperRenderer = Just.hasInstance(paper) ? null : (
33+ <PaperCollateralRenderer
34+ wallet={{ [point]: urbitWallet.value }}
35+ className={'extremely-hidden'}
36+ callback={paper => {
37+ setPaper(Just(paper));
38+ }}
39+ mode={'REGISTRATION'}
40+ />
41+ );
42+
43+ return (
44+ <View>
45+ <DownloadButton
46+ disabled={Nothing.hasInstance(paper)}
47+ onClick={doDownload}>
48+ {Nothing.hasInstance(paper)
49+ ? 'Printing and folding...'
50+ : 'Download paper wallet'}
51+ </DownloadButton>
52+ {paperRenderer}
53+ </View>
54+ );
55+}