on fbcd6b6 help sign in
bridge/src/views/Reticket.js
99 lines 2.3 kB history raw
1import React, { useState } from 'react';
2import { size } from 'lodash';
3import * as need from 'lib/need';
4import ob from 'urbit-ob';
5import { Just, Nothing } from 'folktale/maybe';
7import { usePointCursor } from 'store/pointCursor';
9import View from 'components/View';
10import MiniBackButton from 'components/MiniBackButton';
11import { LocalRouterProvider } from 'lib/LocalRouter';
12import Crumbs from 'components/Crumbs';
14import useRouter from 'lib/useRouter';
16import { useHistory } from 'store/history';
18import Confirm from './Reticket/Confirm';
19import Download from './Reticket/Download';
20import Verify from './Reticket/Verify';
21import DoReticket from './Reticket/DoReticket';
23const STEP_NAMES = {
24 CONFIRM: 'CONFIRM',
25 DOWNLOAD: 'DOWNLOAD',
26 VERIFY: 'VERIFY',
27 RETICKET: 'RETICKET',
28};
30const STEP_VIEWS = {
31 CONFIRM: Confirm,
32 DOWNLOAD: Download,
33 VERIFY: Verify,
34 RETICKET: DoReticket,
35};
37const STEP_MAX = size(STEP_NAMES);
39export default function Reticket() {
40 const history = useHistory();
41 const { Route, ...innerRouter } = useRouter({
42 names: STEP_NAMES,
43 views: STEP_VIEWS,
44 initialRoutes: [{ key: STEP_NAMES.CONFIRM }],
45 });
46 const { pointCursor } = usePointCursor();
47 const point = need.point(pointCursor);
48 const name = ob.patp(point);
50 const [newWallet, setNewWallet] = useState(Nothing());
52 //TODO step # from Route?
53 const stepNumber = 1;
55 const storeNewWallet = (wallet, paper) => {
56 setNewWallet(
57 Just({
58 wallet,
59 paper,
60 })
61 );
62 };
64 const completed = () => {
65 history.pop();
66 };
68 return (
69 <LocalRouterProvider value={innerRouter}>
70 <View>
71 <Crumbs
72 routes={[
73 {
74 text: name,
75 action: () => {
76 history.pop();
77 return history.pop();
78 },
79 },
80 {
81 text: 'Admin',
82 action: () => history.pop(),
83 },
84 ]}
85 />
86 <MiniBackButton onClick={innerRouter.pop} />
87 Step {stepNumber} of {STEP_MAX}
88 <Route
89 STEP_NAMES={STEP_NAMES}
90 newWallet={newWallet}
91 //
92 storeNewWallet={storeNewWallet}
93 //
94 completed={completed}
95 />
96 </View>
97 </LocalRouterProvider>
98 );