// 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, Button, MenuItem, Tooltip } from "@material-ui/core"; import { StyleRulesCallback, WithStyles, withStyles } from '@material-ui/core/styles'; import { ArvadosTheme } from '~/common/custom-theme'; import { Link } from "react-router-dom"; import { User, getUserFullname } from "~/models/user"; import { SearchBar } from "~/components/search-bar/search-bar"; import { DropdownMenu } from "~/components/dropdown-menu/dropdown-menu"; import { DetailsIcon, NotificationIcon, UserPanelIcon, HelpIcon } from "~/components/icon/icon"; import { Routes } from '~/routes/routes'; type CssRules = 'link'; const styles: StyleRulesCallback = (theme: ArvadosTheme) => ({ link: { textDecoration: 'none', color: 'inherit' } }); export interface MainAppBarMenuItem { label: string; } export interface MainAppBarMenuItems { accountMenu: MainAppBarMenuItem[]; helpMenu: MainAppBarMenuItem[]; anonymousMenu: MainAppBarMenuItem[]; } interface MainAppBarDataProps { searchText: string; searchDebounce?: number; breadcrumbs: React.ComponentType; user?: User; menuItems: MainAppBarMenuItems; buildInfo: string; } export interface MainAppBarActionProps { onSearch: (searchText: string) => void; onMenuItemClick: (menuItem: MainAppBarMenuItem) => void; onDetailsPanelToggle: () => void; } export type MainAppBarProps = MainAppBarDataProps & MainAppBarActionProps & WithStyles; export const MainAppBar = withStyles(styles)( (props: MainAppBarProps) => { return Arvados 2 {props.buildInfo} { props.user && } { props.user ? renderMenuForUser(props) : renderMenuForAnonymous(props) } {props.user && } {props.user && } ; } ); const renderMenuForUser = ({ user, menuItems, onMenuItemClick }: MainAppBarProps) => { return ( <> } id="account-menu" title="Account Management"> {getUserFullname(user)} {renderMenuItems(menuItems.accountMenu, onMenuItemClick)} } id="help-menu" title="Help"> {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} )); };