// Copyright (C) The Arvados Authors. All rights reserved. // // SPDX-License-Identifier: AGPL-3.0 import * as React from 'react'; import { Card, CardContent, CircularProgress, Grid, StyleRulesCallback, Table, TableBody, TableCell, TableHead, TableRow, Typography, WithStyles, withStyles } from '@material-ui/core'; import { ArvadosTheme } from '~/common/custom-theme'; import { Session, SessionStatus } from "~/models/session"; import Button from "@material-ui/core/Button"; import { User } from "~/models/user"; import { compose } from "redux"; import { Field, FormErrors, InjectedFormProps, reduxForm, reset, stopSubmit } from "redux-form"; import { TextField } from "~/components/text-field/text-field"; import { addSession } from "~/store/auth/auth-action-session"; import { SITE_MANAGER_REMOTE_HOST_VALIDATION } from "~/validators/validators"; import { RENAME_FILE_DIALOG, RenameFileDialogData } from "~/store/collection-panel/collection-panel-files/collection-panel-files-actions"; type CssRules = 'root' | 'link' | 'buttonContainer' | 'table' | 'tableRow' | 'status' | 'remoteSiteInfo' | 'buttonAdd'; const styles: StyleRulesCallback = (theme: ArvadosTheme) => ({ root: { width: '100%', overflow: 'auto' }, link: { color: theme.palette.primary.main, textDecoration: 'none', margin: '0px 4px' }, buttonContainer: { textAlign: 'right' }, table: { marginTop: theme.spacing.unit }, tableRow: { '& td, th': { whiteSpace: 'nowrap' } }, status: { width: 100, padding: 5, fontWeight: 'bold', textAlign: 'center', borderRadius: 4 }, remoteSiteInfo: { marginTop: 20 }, buttonAdd: { marginLeft: 10, marginTop: theme.spacing.unit * 3 } }); export interface SiteManagerPanelRootActionProps { } export interface SiteManagerPanelRootDataProps { sessions: Session[]; user: User; } type SiteManagerPanelRootProps = SiteManagerPanelRootDataProps & SiteManagerPanelRootActionProps & WithStyles & InjectedFormProps; const SITE_MANAGER_FORM_NAME = 'siteManagerForm'; export const SiteManagerPanelRoot = compose( reduxForm<{remoteHost: string}>({ form: SITE_MANAGER_FORM_NAME, onSubmit: async (data, dispatch) => { try { await dispatch(addSession(data.remoteHost)); dispatch(reset(SITE_MANAGER_FORM_NAME)); } catch (e) { const errors = { remoteHost: e } as FormErrors; dispatch(stopSubmit(SITE_MANAGER_FORM_NAME, errors)); } } }), withStyles(styles)) (({ classes, sessions, handleSubmit }: SiteManagerPanelRootProps) => 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. {sessions.length > 0 && Cluster ID Username Email Status {sessions.map((session, index) => { const validating = session.status === SessionStatus.BEING_VALIDATED; return {session.clusterId} {validating ? : session.username} {validating ? : session.email}
{session.loggedIn ? "Logged in" : "Logged out"}
; })}
}
To add a remote Arvados site, paste the remote site's host here (see "ARVADOS_API_HOST" on the "current token" page).
);