1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 import * as React from 'react';
19 } from '@material-ui/core';
20 import { ArvadosTheme } from '~/common/custom-theme';
21 import { Session } from "~/models/session";
22 import Button from "@material-ui/core/Button";
23 import { User } from "~/models/user";
24 import { compose } from "redux";
25 import { Field, InjectedFormProps, reduxForm, reset } from "redux-form";
26 import { TextField } from "~/components/text-field/text-field";
27 import { addSession } from "~/store/auth/auth-action-session";
28 import { SITE_MANAGER_REMOTE_HOST_VALIDATION } from "~/validators/validators";
30 type CssRules = 'root' | 'link' | 'buttonContainer' | 'table' | 'tableRow' | 'status' | 'remoteSiteInfo' | 'buttonAdd';
32 const styles: StyleRulesCallback<CssRules> = (theme: ArvadosTheme) => ({
38 color: theme.palette.primary.main,
39 textDecoration: 'none',
46 marginTop: theme.spacing.unit
65 marginTop: theme.spacing.unit * 3
69 export interface SiteManagerPanelRootActionProps {
72 export interface SiteManagerPanelRootDataProps {
77 type SiteManagerPanelRootProps = SiteManagerPanelRootDataProps & SiteManagerPanelRootActionProps & WithStyles<CssRules> & InjectedFormProps;
78 const SITE_MANAGER_FORM_NAME = 'siteManagerForm';
80 export const SiteManagerPanelRoot = compose(
81 reduxForm<{remoteHost: string}>({
82 form: SITE_MANAGER_FORM_NAME,
83 onSubmit: (data, dispatch) => {
84 dispatch(addSession(data.remoteHost));
85 dispatch(reset(SITE_MANAGER_FORM_NAME));
89 (({ classes, sessions, handleSubmit }: SiteManagerPanelRootProps) =>
90 <Card className={classes.root}>
92 <Grid container direction="row">
94 <Typography variant='body1' paragraph={true} >
95 You can log in to multiple Arvados sites here, then use the multi-site search page to search collections and projects on all sites at once.
100 {sessions.length > 0 && <Table className={classes.table}>
102 <TableRow className={classes.tableRow}>
103 <TableCell>Cluster ID</TableCell>
104 <TableCell>Username</TableCell>
105 <TableCell>Email</TableCell>
106 <TableCell>Status</TableCell>
110 {sessions.map((session, index) =>
111 <TableRow key={index} className={classes.tableRow}>
112 <TableCell>{session.clusterId}</TableCell>
113 <TableCell>{session.username}</TableCell>
114 <TableCell>{session.email}</TableCell>
116 <div className={classes.status} style={{
117 color: session.loggedIn ? '#fff' : '#000',
118 backgroundColor: session.loggedIn ? '#009966' : '#FFC414'
120 {session.loggedIn ? "Logged in" : "Logged out"}
127 <form onSubmit={handleSubmit}>
128 <Grid container direction="row">
130 <Typography variant='body1' paragraph={true} className={classes.remoteSiteInfo}>
131 To add a remote Arvados site, paste the remote site's host here (see "ARVADOS_API_HOST" on the "current token" page).
137 validate={SITE_MANAGER_REMOTE_HOST_VALIDATION}
138 component={TextField}
139 placeholder="zzzz.arvadosapi.com"
141 label="New cluster"/>
144 <Button type="submit" variant="contained" color="primary"
145 className={classes.buttonAdd}>