on master help sign in
Add admin page
1cfc674Fang
src/lib/routeNames.js+1
@@ -7,6 +7,7 @@ export const ROUTE_NAMES = {
7 INVITES_MANAGE: Symbol('INVITES_MANAGE'),
7 INVITES_MANAGE: Symbol('INVITES_MANAGE'),
8 //
8 //
9 LOGIN: Symbol('LOGIN'),
9 LOGIN: Symbol('LOGIN'),
10+ ADMIN: Symbol('ADMIN'),
10 //
11 //
11 ACCEPT_TRANSFER: Symbol('ACCEPT_TRANSFER'),
12 ACCEPT_TRANSFER: Symbol('ACCEPT_TRANSFER'),
12 CANCEL_TRANSFER: Symbol('CANCEL_TRANSFER'),
13 CANCEL_TRANSFER: Symbol('CANCEL_TRANSFER'),
src/lib/router.js+4
@@ -5,6 +5,7 @@ import Landing from '../views/Landing';
5import Login from '../views/Login.js';
5import Login from '../views/Login.js';
6import InviteTicket from '../views/InviteTicket';
6import InviteTicket from '../views/InviteTicket';
7import InvitesManage from '../views/InvitesManage.js';
7import InvitesManage from '../views/InvitesManage.js';
8+import Admin from '../views/Admin';
8import AcceptTransfer from '../views/AcceptTransfer';
9import AcceptTransfer from '../views/AcceptTransfer';
9import CancelTransfer from '../views/CancelTransfer';
10import CancelTransfer from '../views/CancelTransfer';
10import CreateGalaxy from '../views/CreateGalaxy';
11import CreateGalaxy from '../views/CreateGalaxy';
@@ -32,6 +33,7 @@ export const ROUTES = {
32 [ROUTE_NAMES.INVITE]: Invite,
33 [ROUTE_NAMES.INVITE]: Invite,
33 [ROUTE_NAMES.INVITES_MANAGE]: InvitesManage,
34 [ROUTE_NAMES.INVITES_MANAGE]: InvitesManage,
34 [ROUTE_NAMES.LOGIN]: Login,
35 [ROUTE_NAMES.LOGIN]: Login,
36+ [ROUTE_NAMES.ADMIN]: Admin,
35 [ROUTE_NAMES.ACCEPT_TRANSFER]: AcceptTransfer,
37 [ROUTE_NAMES.ACCEPT_TRANSFER]: AcceptTransfer,
36 [ROUTE_NAMES.CANCEL_TRANSFER]: CancelTransfer,
38 [ROUTE_NAMES.CANCEL_TRANSFER]: CancelTransfer,
37 [ROUTE_NAMES.VIEW_POINT]: ViewPoint,
39 [ROUTE_NAMES.VIEW_POINT]: ViewPoint,
@@ -60,6 +62,8 @@ export const getRouteBreadcrumb = ({ pointCursor }) => route => {
60 return 'Manage invites';
62 return 'Manage invites';
61 case ROUTE_NAMES.LOGIN:
63 case ROUTE_NAMES.LOGIN:
62 return 'Login to Bridge';
64 return 'Login to Bridge';
65+ case ROUTE_NAMES.ADMIN:
66+ return 'Admin';
63 case ROUTE_NAMES.POINT:
67 case ROUTE_NAMES.POINT:
64 return `Overview: ${ob.patp(need.pointCursor(pointCursor))}`;
68 return `Overview: ${ob.patp(need.pointCursor(pointCursor))}`;
65 case ROUTE_NAMES.POINTS:
69 case ROUTE_NAMES.POINTS:
src/views/Admin.jsnew file+57
@@ -0,0 +1,57 @@
1+import React, { useCallback } from 'react';
2+import * as need from 'lib/need';
3+import { Grid } from 'indigo-react';
4+
5+import { usePointCursor } from 'store/pointCursor';
6+// import { usePointCache } from 'store/pointCache';
7+
8+import View from 'components/View';
9+import Passport from 'components/Passport';
10+import { ForwardButton } from 'components/Buttons';
11+
12+import useInvites from 'lib/useInvites';
13+import { ROUTE_NAMES } from 'lib/routeNames';
14+
15+import { useHistory } from 'store/history';
16+import FooterButton from 'components/FooterButton';
17+
18+export default function Admin() {
19+ const history = useHistory();
20+ const { pointCursor } = usePointCursor();
21+ // const { pointCache } = usePointCache();
22+
23+ const point = need.pointCursor(pointCursor);
24+
25+ // fetch the invites for the current cursor
26+ const { availableInvites } = useInvites(point);
27+
28+ const goReticket = useCallback(() => history.push(ROUTE_NAMES.RETICKET), [
29+ history,
30+ ]);
31+
32+ // const pointDetails = need.fromPointCache(pointCache, point);
33+
34+ return (
35+ <View>
36+ <Grid className="pt2">
37+ <Grid.Item full>
38+ //TODO "Set Keys" when unset?
39+ <ForwardButton detail="Configure public keys">
40+ Edit Keys
41+ </ForwardButton>
42+ </Grid.Item>
43+ <Grid.Divider />
44+ <Grid.Item full>
45+ //TODO disable if not logged in as owner
46+ <ForwardButton detail="Get a new master ticket" onClick={goReticket}>
47+ Reticket
48+ </ForwardButton>
49+ </Grid.Item>
50+ </Grid>
51+
52+ <FooterButton detail="Transfer this identity to a new owner" disabled>
53+ Transfer
54+ </FooterButton>
55+ </View>
56+ );
57+}
src/views/Point.js+3−1
@@ -32,6 +32,8 @@ export default function Point() {
32
32
33 const showActions = Maybe.Just.hasInstance(wallet);
33 const showActions = Maybe.Just.hasInstance(wallet);
34
34
35+ const goAdmin = useCallback(() => history.push(ROUTE_NAMES.ADMIN), [history]);
36+
35 const goInvite = useCallback(() => history.push(ROUTE_NAMES.INVITE), [
37 const goInvite = useCallback(() => history.push(ROUTE_NAMES.INVITE), [
36 history,
38 history,
37 ]);
39 ]);
@@ -44,7 +46,7 @@ export default function Point() {
44 <Passport point={point} />
46 <Passport point={point} />
45 <Grid className="pt2">
47 <Grid className="pt2">
46 <Grid.Item full>
48 <Grid.Item full>
47− <ForwardButton disabled>Admin</ForwardButton>
49+ <ForwardButton onClick={goAdmin}>Admin</ForwardButton>
48 </Grid.Item>
50 </Grid.Item>
49 <Grid.Divider />
51 <Grid.Divider />
50 <Grid.Item full>
52 <Grid.Item full>