From: Michal Klobukowski Date: Thu, 6 Sep 2018 09:41:22 +0000 (+0200) Subject: Extract appbar menus to their own components X-Git-Tag: 1.3.0~93^2~23 X-Git-Url: https://git.arvados.org/arvados-workbench2.git/commitdiff_plain/cee5fc55b8b13217ac9aa540d74375a59afbb49a Extract appbar menus to their own components Feature #14149 Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski --- diff --git a/src/views-components/main-app-bar/account-menu.tsx b/src/views-components/main-app-bar/account-menu.tsx new file mode 100644 index 00000000..2597c19f --- /dev/null +++ b/src/views-components/main-app-bar/account-menu.tsx @@ -0,0 +1,36 @@ +// Copyright (C) The Arvados Authors. All rights reserved. +// +// SPDX-License-Identifier: AGPL-3.0 + +import * as React from "react"; +import { MenuItem } from "@material-ui/core"; +import { User, getUserFullname } from "~/models/user"; +import { DropdownMenu } from "~/components/dropdown-menu/dropdown-menu"; +import { UserPanelIcon } from "~/components/icon/icon"; +import { DispatchProp, connect } from 'react-redux'; +import { logout } from "~/store/auth/auth-action"; +import { RootState } from "~/store/store"; + +interface AccountMenuProps { + user?: User; +} + +const mapStateToProps = (state: RootState): AccountMenuProps => ({ + user: state.auth.user +}); + +export const AccountMenu = connect(mapStateToProps)( + ({ user, dispatch }: AccountMenuProps & DispatchProp) => + user + ? } + id="account-menu" + title="Account Management"> + + {getUserFullname(user)} + + Current token + My account + dispatch(logout())}>Logout + + : null); diff --git a/src/views-components/main-app-bar/anonymous-menu.tsx b/src/views-components/main-app-bar/anonymous-menu.tsx new file mode 100644 index 00000000..6f77a524 --- /dev/null +++ b/src/views-components/main-app-bar/anonymous-menu.tsx @@ -0,0 +1,16 @@ +// Copyright (C) The Arvados Authors. All rights reserved. +// +// SPDX-License-Identifier: AGPL-3.0 + +import * as React from "react"; +import { Button } from '@material-ui/core'; +import { DispatchProp, connect } from 'react-redux'; +import { login } from '~/store/auth/auth-action'; + +export const AnonymousMenu = connect()( + ({ dispatch }: DispatchProp) => + ); diff --git a/src/views-components/main-app-bar/main-app-bar.tsx b/src/views-components/main-app-bar/main-app-bar.tsx index 04e0fb80..63bdd8bf 100644 --- a/src/views-components/main-app-bar/main-app-bar.tsx +++ b/src/views-components/main-app-bar/main-app-bar.tsx @@ -12,6 +12,9 @@ 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'; +import { NotificationsMenu } from "~/views-components/main-app-bar/notifications-menu"; +import { AccountMenu } from "~/views-components/main-app-bar/account-menu"; +import { AnonymousMenu } from "~/views-components/main-app-bar/anonymous-menu"; type CssRules = 'link'; @@ -54,15 +57,15 @@ export const MainAppBar = withStyles(styles)( return - + - Arvados 2 + arvados workbench - + {/* {props.buildInfo} - + */} { @@ -75,58 +78,24 @@ export const MainAppBar = withStyles(styles)( { - props.user ? renderMenuForUser(props) : renderMenuForAnonymous(props) + props.user + ? <> + + + + : } - + {/* {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} - - )); -}; diff --git a/src/views-components/main-app-bar/notifications-menu.tsx b/src/views-components/main-app-bar/notifications-menu.tsx new file mode 100644 index 00000000..5781ec16 --- /dev/null +++ b/src/views-components/main-app-bar/notifications-menu.tsx @@ -0,0 +1,23 @@ +// Copyright (C) The Arvados Authors. All rights reserved. +// +// SPDX-License-Identifier: AGPL-3.0 + +import * as React from "react"; +import { Badge, MenuItem } from '@material-ui/core'; +import { DropdownMenu } from "~/components/dropdown-menu/dropdown-menu"; +import { NotificationIcon } from '~/components/icon/icon'; + +export const NotificationsMenu = + () => + + + } + id="account-menu" + title="Notifications"> + You are up to date + ; +