// Copyright (C) The Arvados Authors. All rights reserved. // // SPDX-License-Identifier: AGPL-3.0 import * as React from "react"; import { AppBar, Toolbar, Typography, Grid, IconButton, Badge, Paper, Input, StyleRulesCallback, withStyles, WithStyles, Button, MenuItem } from "@material-ui/core"; import NotificationsIcon from "@material-ui/icons/Notifications"; import PersonIcon from "@material-ui/icons/Person"; import HelpIcon from "@material-ui/icons/Help"; import SearchBar from "./search-bar/search-bar"; import Breadcrumbs, { Breadcrumb } from "../breadcrumbs/breadcrumbs" import DropdownMenu from "./dropdown-menu/dropdown-menu" import { User } from "../../models/user"; export interface MainAppBarMenuItem { label: string; } export interface MainAppBarMenuItems { accountMenu: MainAppBarMenuItem[]; helpMenu: MainAppBarMenuItem[]; anonymousMenu: MainAppBarMenuItem[]; } interface MainAppBarDataProps { searchText: string; searchDebounce?: number; breadcrumbs: Breadcrumb[]; user?: User; menuItems: MainAppBarMenuItems; } export interface MainAppBarActionProps { onSearch: (searchText: string) => void, onBreadcrumbClick: (breadcrumb: Breadcrumb) => void, onMenuItemClick: (menuItem: MainAppBarMenuItem) => void } type MainAppBarProps = MainAppBarDataProps & MainAppBarActionProps & WithStyles; export class MainAppBar extends React.Component { render() { const { classes, searchText, breadcrumbs, searchDebounce } = this.props return Arvados
Workbench 2
{ this.props.user && } { this.props.user ? this.renderMenuForUser() : this.renderMenuForAnonymous() }
{ this.props.user && }
} renderMenuForUser = () => { const { user } = this.props return ( <> {this.getUserFullname()} {this.renderMenuItems(this.props.menuItems.accountMenu)} {this.renderMenuItems(this.props.menuItems.helpMenu)} ) } renderMenuForAnonymous = () => { return this.props.menuItems.anonymousMenu.map((item, index) => ( )) } renderMenuItems = (menuItems: MainAppBarMenuItem[]) => { return menuItems.map((item, index) => ( this.props.onMenuItemClick(item)}>{item.label} )) } getUserFullname = () => { const { user } = this.props; return user ? `${user.firstName} ${user.lastName}` : ""; } } type CssRules = "appBar" const styles: StyleRulesCallback = theme => ({ appBar: { backgroundColor: "#692498" } }) export default withStyles(styles)(MainAppBar)