// 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, 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 "../../components/search-bar/search-bar"; import Breadcrumbs, { Breadcrumb } from "../../components/breadcrumbs/breadcrumbs"; import DropdownMenu from "../../components/dropdown-menu/dropdown-menu"; import { User, getUserFullname } 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 const MainAppBar: React.SFC = (props) => { return Arvados Workbench 2 { props.user && } { props.user ? renderMenuForUser(props) : renderMenuForAnonymous(props) } { props.user && } ; }; const renderMenuForUser = ({ user, menuItems, onMenuItemClick }: MainAppBarProps) => { return ( <> {getUserFullname(user)} {renderMenuItems(menuItems.accountMenu, onMenuItemClick)} {renderMenuItems(menuItems.helpMenu, onMenuItemClick)} ); }; const renderMenuForAnonymous = ({ onMenuItemClick, menuItems }: MainAppBarProps) => { return menuItems.anonymousMenu.map((item, index) => ( )); }; const renderMenuItems = (menuItems: MainAppBarMenuItem[], onMenuItemClick: (menuItem: MainAppBarMenuItem) => void) => { return menuItems.map((item, index) => ( onMenuItemClick(item)}> {item.label} )); }; type CssRules = "appBar" | "toolbar"; const styles: StyleRulesCallback = theme => ({ appBar: { backgroundColor: "#692498" }, toolbar: { minHeight: '48px' } }); export default withStyles(styles)(MainAppBar);