// Copyright (C) The Arvados Authors. All rights reserved. // // SPDX-License-Identifier: AGPL-3.0 import * as React from 'react'; import { StyleRulesCallback, Theme, WithStyles, withStyles } from '@material-ui/core/styles'; import Drawer from '@material-ui/core/Drawer'; import AppBar from '@material-ui/core/AppBar'; import Toolbar from '@material-ui/core/Toolbar'; import Typography from '@material-ui/core/Typography'; import { connect, DispatchProp } from "react-redux"; import ProjectList from "../../components/project-list/project-list"; import { Route, Switch } from "react-router"; import { Link } from "react-router-dom"; import Button from "@material-ui/core/Button/Button"; import authActions from "../../store/auth/auth-action"; import IconButton from "@material-ui/core/IconButton/IconButton"; import Menu from "@material-ui/core/Menu/Menu"; import MenuItem from "@material-ui/core/MenuItem/MenuItem"; import { AccountCircle } from "@material-ui/icons"; import { User } from "../../models/user"; import Grid from "@material-ui/core/Grid/Grid"; import { RootState } from "../../store/store"; import projectActions from "../../store/project/project-action" import ProjectTree from '../../components/project-tree/project-tree'; import { TreeItem, TreeItemStatus } from "../../components/tree/tree"; import { Project } from "../../models/project"; import { projectService } from '../../services/services'; const drawerWidth = 240; type CssRules = 'root' | 'appBar' | 'drawerPaper' | 'content' | 'toolbar'; const styles: StyleRulesCallback = (theme: Theme) => ({ root: { flexGrow: 1, zIndex: 1, overflow: 'hidden', position: 'relative', display: 'flex', width: '100vw', height: '100vh' }, appBar: { zIndex: theme.zIndex.drawer + 1, backgroundColor: '#692498' }, drawerPaper: { position: 'relative', width: drawerWidth, }, content: { flexGrow: 1, backgroundColor: theme.palette.background.default, padding: theme.spacing.unit * 3, height: '100%', minWidth: 0, }, toolbar: theme.mixins.toolbar }); interface WorkbenchDataProps { projects: Array>; user?: User; } interface WorkbenchActionProps { } type WorkbenchProps = WorkbenchDataProps & WorkbenchActionProps & DispatchProp & WithStyles; interface WorkbenchState { anchorEl: any; } class Workbench extends React.Component { constructor(props: WorkbenchProps) { super(props); this.state = { anchorEl: null } } login = () => { this.props.dispatch(authActions.LOGIN()); }; logout = () => { this.handleClose(); this.props.dispatch(authActions.LOGOUT()); }; handleOpenMenu = (event: React.MouseEvent) => { this.setState({ anchorEl: event.currentTarget }); }; handleClose = () => { this.setState({ anchorEl: null }); }; toggleProjectTreeItem = (itemId: string, status: TreeItemStatus) => { if (status === TreeItemStatus.Loaded) { this.props.dispatch(projectActions.TOGGLE_PROJECT_TREE_ITEM(itemId)) } else { this.props.dispatch(projectService.getProjectList(itemId)).then(() => { this.props.dispatch(projectActions.TOGGLE_PROJECT_TREE_ITEM(itemId)); }) } }; render() { const { classes, user } = this.props; return (
Arvados
Workbench 2
{user ? {user.firstName} {user.lastName} Logout My account : }
{user &&
}
); } } export default connect( (state: RootState) => ({ projects: state.projects, user: state.auth.user }) )( withStyles(styles)(Workbench) );