From: Michal Klobukowski Date: Mon, 11 Jun 2018 11:46:48 +0000 (+0200) Subject: Add new main app bar to workbench X-Git-Tag: 1.2.0~78^2~19 X-Git-Url: https://git.arvados.org/arvados-workbench2.git/commitdiff_plain/8bfcbaea5e9f11543bbc4d721817978e621d2ffa Add new main app bar to workbench Feature #13590 Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski --- diff --git a/src/views/workbench/workbench.tsx b/src/views/workbench/workbench.tsx index dbf78322..15f6fa5e 100644 --- a/src/views/workbench/workbench.tsx +++ b/src/views/workbench/workbench.tsx @@ -24,7 +24,9 @@ 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 MainAppBar from '../../components/main-app-bar/main-app-bar'; +import MainAppBar, { MainAppBarActionProps, MainAppBarMenuItems, MainAppBarMenuItem } from '../../components/main-app-bar/main-app-bar'; +import { Breadcrumb } from '../../components/main-app-bar/breadcrumbs/breadcrumbs'; +import { push } from 'react-router-redux'; const drawerWidth = 240; @@ -42,7 +44,9 @@ const styles: StyleRulesCallback = (theme: Theme) => ({ }, appBar: { zIndex: theme.zIndex.drawer + 1, - backgroundColor: '#692498' + backgroundColor: '#692498', + position: "absolute", + width: "100%" }, drawerPaper: { position: 'relative', @@ -68,104 +72,104 @@ interface WorkbenchActionProps { type WorkbenchProps = WorkbenchDataProps & WorkbenchActionProps & DispatchProp & WithStyles; +interface NavBreadcrumb extends Breadcrumb { + path: string +} + +interface NavMenuItem extends MainAppBarMenuItem { + action: () => void +} + interface WorkbenchState { anchorEl: any; + breadcrumbs: NavBreadcrumb[]; + searchQuery: string; + menuItems: { + accountMenu: NavMenuItem[], + helpMenu: NavMenuItem[], + anonymousMenu: NavMenuItem[] + }; } class Workbench extends React.Component { - constructor(props: WorkbenchProps) { - super(props); - this.state = { - anchorEl: null + state = { + anchorEl: null, + searchQuery: "", + breadcrumbs: [ + { + label: "Projects", + path: "/projects" + }, { + label: "Project 1", + path: "/projects/project-1" + } + ], + menuItems: { + accountMenu: [ + { + label: "Logout", + action: () => this.props.dispatch(authActions.LOGOUT()) + }, + { + label: "My account", + action: () => this.props.dispatch(push("/my-account")) + } + ], + helpMenu: [ + { + label: "Help", + action: () => this.props.dispatch(push("/help")) + } + ], + anonymousMenu: [ + { + label: "Sign in", + action: () => this.props.dispatch(authActions.LOGIN()) + } + ] } } - 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 - }); - }; + mainAppBarActions: MainAppBarActionProps = { + actions: { + onBreadcrumbClick: (breadcrumb: NavBreadcrumb) => this.props.dispatch(push(breadcrumb.path)), + onSearchQueryChange: searchQuery => this.setState({ searchQuery }), + onSearchQuerySubmit: () => this.props.dispatch(push(`/search?q=${this.state.searchQuery}`)), + onMenuItemClick: (menuItem: NavMenuItem) => menuItem.action() + } + } render() { - const {classes, user} = this.props; + const { classes, user } = this.props; return (
- - - - Arvados
Workbench 2 -
- {user ? - - - - {user.firstName} {user.lastName} - - - - - - - - - Logout - My account - - - : - - } -
-
+
+ +
{user && - -
-
- - {p.name} - }/> - } + +
+
+ + {p.name} + } /> + }
-
-
- +
+
- +