on df0c310 help sign in
bridge/src/views/UrbitID/DownloadKeys.jsx
82 lines 2.5 kB history raw
1import React, { useCallback, useState } from 'react';
2import { Just, Nothing } from 'folktale/maybe';
3import * as need from 'lib/need';
4import { Row } from '@tlon/indigo-react';
6import { usePointCursor } from 'store/pointCursor';
8import { DownloadButton, RestartButton } from 'components/Buttons';
9import PaperBuilder from 'components/PaperBuilder';
11import { downloadWallet } from 'lib/invite';
12import { useSingleKeyfileGenerator } from 'lib/useKeyfileGenerator';
14import { useWallet } from 'store/wallet';
15import { Grid, P } from 'indigo-react';
16import { useLocalRouter } from 'lib/LocalRouter';
17import Window from 'components/L2/Window/Window';
18import HeaderPane from 'components/L2/Window/HeaderPane';
19import BodyPane from 'components/L2/Window/BodyPane';
21export default function AdminRedownload() {
22 const { urbitWallet } = useWallet();
23 const { pointCursor } = usePointCursor();
24 const { pop } = useLocalRouter();
26 const _urbitWallet = need.wallet(urbitWallet);
27 const point = need.point(pointCursor);
29 const { keyfile, filename } = useSingleKeyfileGenerator({});
31 const [paper, setPaper] = useState(Nothing());
32 const [downloaded, setDownloaded] = useState(false);
34 const doDownload = useCallback(() => {
35 downloadWallet(paper.value, keyfile, filename);
36 setDownloaded(true);
37 }, [paper, keyfile, filename, setDownloaded]);
39 const goBack = useCallback(() => pop(), [pop]);
41 return (
42 <Window>
43 <HeaderPane>
44 <Row className="header-row">
45 <h5>Download Passport</h5>
46 </Row>
47 </HeaderPane>
48 <BodyPane>
49 <Grid>
50 <Grid.Item full as={P}>
51 After you’ve downloaded your passport, back up the ticket manually
52 or store on a trusted device.
53 </Grid.Item>
54 {downloaded ? (
55 <Grid.Item full as={RestartButton} solid onClick={goBack}>
56 Done
57 </Grid.Item>
58 ) : (
59 <Grid.Item
60 full
61 as={DownloadButton}
62 solid
63 disabled={Nothing.hasInstance(paper)}
64 onClick={doDownload}>
65 {paper.matchWith({
66 Nothing: () => 'Printing and folding...',
67 Just: _ => 'Download paper wallet',
68 })}
69 </Grid.Item>
70 )}
71 </Grid>
72 <PaperBuilder
73 point={point}
74 wallets={[_urbitWallet]}
75 callback={paper => {
76 setPaper(Just(paper));
77 }}
78 />
79 </BodyPane>
80 </Window>
81 );