15088: Adds the ability to cancel account linking after logging in
[arvados-workbench2.git] / src / views / link-account-panel / link-account-panel-root.tsx
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import * as React from 'react';
6 import {
7     StyleRulesCallback,
8     WithStyles,
9     withStyles,
10     Card,
11     CardContent,
12     Button,
13     Typography,
14     Grid,
15 } from '@material-ui/core';
16 import { ArvadosTheme } from '~/common/custom-theme';
17 import { User } from "~/models/user";
18 import { LinkAccountType, AccountToLink } from "~/models/link-account";
19 import { formatDate }from "~/common/formatters";
20
21 type CssRules = 'root';// | 'gridItem' | 'label' | 'title' | 'actions';
22
23 const styles: StyleRulesCallback<CssRules> = (theme: ArvadosTheme) => ({
24     root: {
25         width: '100%',
26         overflow: 'auto'
27     }
28 });
29
30 export interface LinkAccountPanelRootDataProps {
31     user?: User;
32     accountToLink?: AccountToLink;
33 }
34
35 export interface LinkAccountPanelRootActionProps {
36     saveAccountLinkData: (type: LinkAccountType) => void;
37     removeAccountLinkData: () => void;
38 }
39
40 type LinkAccountPanelRootProps = LinkAccountPanelRootDataProps & LinkAccountPanelRootActionProps & WithStyles<CssRules>;
41
42 export const LinkAccountPanelRoot = withStyles(styles) (
43     ({classes, user, accountToLink, saveAccountLinkData, removeAccountLinkData}: LinkAccountPanelRootProps) => {
44         return <Card className={classes.root}>
45             <CardContent>
46             { user && accountToLink===undefined && <Grid container spacing={24}>
47                 <Grid container item direction="column" spacing={24}>
48                     <Grid item>
49                         You are currently logged in as <b>{user.email}</b> ({user.username}, {user.uuid}) created on <b>{formatDate(user.createdAt)}</b>
50                     </Grid>
51                     <Grid item>
52                         You can link Arvados accounts. After linking, either login will take you to the same account.
53                     </Grid>
54                 </Grid>
55                 <Grid container item direction="row" spacing={24}>
56                     <Grid item>
57                         <Button color="primary" variant="contained" onClick={() => saveAccountLinkData(LinkAccountType.ADD_OTHER_LOGIN)}>
58                             Add another login to this account
59                         </Button>
60                     </Grid>
61                     <Grid item>
62                         <Button color="primary" variant="contained" onClick={() => saveAccountLinkData(LinkAccountType.ACCESS_OTHER_ACCOUNT)}>
63                             Use this login to access another account
64                         </Button>
65                     </Grid>
66                 </Grid>
67             </Grid>}
68             { accountToLink && <Grid container spacing={24}>
69                 <Grid container item direction="row" spacing={24}>
70                     <Grid item>
71                         <Button variant="contained" onClick={() => removeAccountLinkData()}>
72                             Cancel
73                         </Button>
74                     </Grid>
75                     <Grid item>
76                         <Button color="primary" variant="contained" onClick={() => {}}>
77                             Link accounts
78                         </Button>
79                     </Grid>
80                 </Grid>
81             </Grid> }
82             </CardContent>
83         </Card>;
84 });