on 4240306 help sign in
bridge/src/views/Invite.js
84 lines 2.5 kB history raw
1import React from 'react';
2import * as need from 'lib/need';
3import { Grid, H5, Text } from 'indigo-react';
5import { usePointCursor } from 'store/pointCursor';
6import { useHistory } from 'store/history';
7// import { usePointCache } from 'store/pointCache';
9import View from 'components/View';
10import Crumbs from 'components/Crumbs';
12import useInvites from 'lib/useInvites';
13import useSyncPoint from 'lib/useSyncPoint';
14import useCurrentPointName from 'lib/useCurrentPointName';
15import useRouter from 'lib/useRouter';
16import loadingCharacter from 'lib/loadingCharacter';
18import InviteUrl from './Invite/InviteUrl';
19import InviteEmail from './Invite/InviteEmail';
20import Highlighted from 'components/Highlighted';
22const kInviteNames = {
23 URL: 'URL',
24 EMAIL: 'EMAIL',
25};
27const kInviteViews = {
28 URL: InviteUrl,
29 EMAIL: InviteEmail,
30};
32export default function Invite() {
33 const history = useHistory();
34 const { Route, ...routeProps } = useRouter({
35 names: kInviteNames,
36 views: kInviteViews,
37 initialRoutes: [{ key: kInviteNames.URL }],
38 });
39 const { pointCursor } = usePointCursor();
40 const point = need.pointCursor(pointCursor);
41 const name = useCurrentPointName();
43 // sync the current cursor
44 useSyncPoint(point);
46 // fetch the invites for the current cursor
47 const { availableInvites, sentInvites, acceptedInvites } = useInvites(point);
48 const availableInvitesText = loadingCharacter(availableInvites);
49 const sentInvitesText = loadingCharacter(sentInvites);
50 const acceptedInvitesText = loadingCharacter(acceptedInvites);
52 return (
53 <View>
54 <Grid className="mb3">
55 <Grid.Item
56 as={Crumbs}
57 routes={[
58 {
59 text: name,
60 action: () => history.pop(),
61 },
62 {
63 text: 'Invite',
64 },
65 ]}
66 full
67 />
68 <Grid.Item as={H5} className="mv4" full>
69 Invite
70 </Grid.Item>
71 <Grid.Item as={Text} full>
72 You currently have{' '}
73 <Highlighted>{availableInvitesText} invitations</Highlighted> left.
74 <br />
75 Out of the <Highlighted>{sentInvitesText}</Highlighted> invites you
76 sent, <Highlighted>{acceptedInvitesText}</Highlighted> have been
77 accepted.
78 </Grid.Item>
79 </Grid>
80 {/* TODO(shrugs): use context isntead of this routeProps nonsense */}
81 <Route {...routeProps} />
82 </View>
83 );