X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/c74d94dabd5f66bc948f9a9ed6283cdb59fb392b..f63db3e0224e57695adb2c5fa975586065f6669f:/src/views-components/main-app-bar/account-menu.tsx?ds=sidebyside diff --git a/src/views-components/main-app-bar/account-menu.tsx b/src/views-components/main-app-bar/account-menu.tsx index 16bb8c1347..c2cc0e2a47 100644 --- a/src/views-components/main-app-bar/account-menu.tsx +++ b/src/views-components/main-app-bar/account-menu.tsx @@ -2,24 +2,26 @@ // // SPDX-License-Identifier: AGPL-3.0 -import * as React from "react"; +import React from "react"; import { MenuItem, Divider } from "@material-ui/core"; import { StyleRulesCallback, WithStyles, withStyles } from '@material-ui/core/styles'; -import { User, getUserFullname } from "~/models/user"; -import { DropdownMenu } from "~/components/dropdown-menu/dropdown-menu"; -import { Link } from "react-router-dom"; -import { UserPanelIcon } from "~/components/icon/icon"; +import { User, getUserDisplayName } 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"; -import { openCurrentTokenDialog } from '~/store/current-token-dialog/current-token-dialog-actions'; -import { openRepositoriesPanel } from "~/store/repositories/repositories-actions"; +import { authActions, getNewExtraToken } from 'store/auth/auth-action'; +import { RootState } from "store/store"; +import { openTokenDialog } from 'store/token-dialog/token-dialog-actions'; +import { openRepositoriesPanel } from "store/repositories/repositories-actions"; import { navigateToSiteManager, navigateToSshKeysUser, - navigateToMyAccount -} from '~/store/navigation/navigation-action'; -import { openUserVirtualMachines } from "~/store/virtual-machines/virtual-machines-actions"; + navigateToMyAccount, + navigateToLinkAccount +} from 'store/navigation/navigation-action'; +import { openUserVirtualMachines } from "store/virtual-machines/virtual-machines-actions"; +import { pluginConfig } from 'plugins'; +import { ElementListReducer } from 'common/plugintypes'; interface AccountMenuProps { user?: User; @@ -32,21 +34,11 @@ interface AccountMenuProps { const mapStateToProps = (state: RootState): AccountMenuProps => ({ user: state.auth.user, currentRoute: state.router.location ? state.router.location.pathname : '', - workbenchURL: state.config.workbenchUrl, + workbenchURL: state.auth.config.workbenchUrl, apiToken: state.auth.apiToken, localCluster: state.auth.localCluster }); -const wb1URL = (route: string) => { - const r = route.replace(/^\//, ""); - if (r.match(/^(projects|collections)\//)) { - return r; - } else if (r.match(/^processes\//)) { - return r.replace(/^processes/, "container_requests"); - } - return ""; -}; - type CssRules = 'link'; const styles: StyleRulesCallback = () => ({ @@ -56,29 +48,44 @@ const styles: StyleRulesCallback = () => ({ } }); -export const AccountMenu = withStyles(styles)( - connect(mapStateToProps)( - ({ user, dispatch, currentRoute, workbenchURL, apiToken, localCluster, classes }: AccountMenuProps & DispatchProp & WithStyles) => - user - ? } - id="account-menu" - title="Account Management" - key={currentRoute}> - - {getUserFullname(user)} {user.uuid.substr(0, 5) !== localCluster && `(${user.uuid.substr(0, 5)})`} - - dispatch(openUserVirtualMachines())}>Virtual Machines - {!user.isAdmin && dispatch(openRepositoriesPanel())}>Repositories} - dispatch(openCurrentTokenDialog)}>Current token - dispatch(navigateToSshKeysUser)}>Ssh Keys - dispatch(navigateToSiteManager)}>Site Manager - dispatch(navigateToMyAccount)}>My account - - - Switch to Workbench v1 - - dispatch(logout())}>Logout - - : null)); +export const AccountMenuComponent = + ({ user, dispatch, currentRoute, workbenchURL, apiToken, localCluster, classes }: AccountMenuProps & DispatchProp & WithStyles) => { + let accountMenuItems = <> + dispatch(openUserVirtualMachines())}>Virtual Machines + dispatch(openRepositoriesPanel())}>Repositories + { + dispatch(getNewExtraToken(true)); + dispatch(openTokenDialog); + }}>Get API token + dispatch(navigateToSshKeysUser)}>Ssh Keys + dispatch(navigateToSiteManager)}>Site Manager + dispatch(navigateToMyAccount)}>My account + dispatch(navigateToLinkAccount)}>Link account + ; + + const reduceItemsFn: (a: React.ReactElement[], + b: ElementListReducer) => React.ReactElement[] = (a, b) => b(a); + + accountMenuItems = React.createElement(React.Fragment, null, + pluginConfig.accountMenuList.reduce(reduceItemsFn, React.Children.toArray(accountMenuItems.props.children))); + + return user + ? } + id="account-menu" + title="Account Management" + key={currentRoute}> + + {getUserDisplayName(user)} {user.uuid.substring(0, 5) !== localCluster && `(${user.uuid.substring(0, 5)})`} + + {user.isActive && accountMenuItems} + + dispatch(authActions.LOGOUT({ deleteLinkData: true, preservePath: false }))}> + Logout + + + : null; + }; + +export const AccountMenu = withStyles(styles)(connect(mapStateToProps)(AccountMenuComponent));