X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/a9deea73c1982bf90150c6dbc8caca385ad68d04..488c558be1f9b4a9aa48a06d43b97db0d8ff9101:/src/components/main-app-bar/main-app-bar.tsx diff --git a/src/components/main-app-bar/main-app-bar.tsx b/src/components/main-app-bar/main-app-bar.tsx index 885948fe1b..4beea605e6 100644 --- a/src/components/main-app-bar/main-app-bar.tsx +++ b/src/components/main-app-bar/main-app-bar.tsx @@ -3,26 +3,45 @@ // SPDX-License-Identifier: AGPL-3.0 import * as React from "react"; -import { AppBar, Toolbar, Typography, Grid, IconButton, Badge, Paper, Input, StyleRulesCallback, withStyles, WithStyles } from "@material-ui/core"; +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 SearchIcon from "@material-ui/icons/Search"; -import { AppBarProps } from "@material-ui/core/AppBar"; import SearchBar from "./search-bar/search-bar"; -import Breadcrumbs from "./breadcrumbs/breadcrumbs" +import Breadcrumbs, { Breadcrumb } from "../breadcrumbs/breadcrumbs"; +import DropdownMenu from "./dropdown-menu/dropdown-menu"; +import { User } from "../../models/user"; -type CssRules = "appBar" +export interface MainAppBarMenuItem { + label: string; +} -const styles: StyleRulesCallback = theme => ({ - appBar: { - backgroundColor: "#692498" - } -}) +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 { -export class MainAppBar extends React.Component> { render() { - const { classes } = this.props + const { classes, searchText, breadcrumbs, searchDebounce } = this.props; return > { - console.log("submit")} /> + { + 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}` : ""; } } -export default withStyles(styles)(MainAppBar) \ No newline at end of file +type CssRules = "appBar"; + +const styles: StyleRulesCallback = theme => ({ + appBar: { + backgroundColor: "#692498" + } +}); + +export default withStyles(styles)(MainAppBar); \ No newline at end of file