//
// SPDX-License-Identifier: AGPL-3.0
-import React, { ReactElement, useState } from 'react'
+import React, { ReactElement } from 'react'
import { connect } from 'react-redux'
import { ProjectsIcon, ProcessIcon, FavoriteIcon, ShareMeIcon, TrashIcon, PublicFavoriteIcon, GroupsIcon } from 'components/icon/icon'
+import { TerminalIcon } from 'components/icon/icon'
import { List, ListItem, Tooltip } from '@material-ui/core'
import { StyleRulesCallback, WithStyles, withStyles } from '@material-ui/core/styles'
import { ArvadosTheme } from 'common/custom-theme'
navigateToAllProcesses,
navigateToTrash,
} from 'store/navigation/navigation-action'
+import { openUserVirtualMachines } from 'store/virtual-machines/virtual-machines-actions'
+import { navigateToUserVirtualMachines } from 'store/navigation/navigation-action'
import { RouterAction } from 'react-router-redux'
-import { Tree } from 'models/tree'
type CssRules = 'root' | 'unselected' | 'selected'
const styles: StyleRulesCallback<CssRules> = (theme: ArvadosTheme) => ({
root: {},
unselected: {
- color: theme.customs.colors.grey700,
+ color: theme.customs.colors.grey600,
},
selected: {
color: theme.palette.primary.main,
enum SidePanelCollapsedCategory {
PROJECTS = 'Home Projects',
- SHARED_WITH_ME = 'Shared with me',
- PUBLIC_FAVORITES = 'Public Favorites',
FAVORITES = 'My Favorites',
- GROUPS = 'Groups',
+ PUBLIC_FAVORITES = 'Public Favorites',
+ SHARED_WITH_ME = 'Shared with me',
ALL_PROCESSES = 'All Processes',
+ SHELL_ACCESS = 'Shell Access',
+ GROUPS = 'Groups',
TRASH = 'Trash',
}
navTarget: '',
},
{
- name: SidePanelCollapsedCategory.SHARED_WITH_ME,
- icon: <ShareMeIcon />,
- navTarget: navigateToSharedWithMe,
+ name: SidePanelCollapsedCategory.FAVORITES,
+ icon: <FavoriteIcon />,
+ navTarget: navigateToFavorites,
},
{
name: SidePanelCollapsedCategory.PUBLIC_FAVORITES,
navTarget: navigateToPublicFavorites,
},
{
- name: SidePanelCollapsedCategory.FAVORITES,
- icon: <FavoriteIcon />,
- navTarget: navigateToFavorites,
- },
- {
- name: SidePanelCollapsedCategory.GROUPS,
- icon: <GroupsIcon />,
- navTarget: navigateToGroups,
+ name: SidePanelCollapsedCategory.SHARED_WITH_ME,
+ icon: <ShareMeIcon />,
+ navTarget: navigateToSharedWithMe,
},
{
name: SidePanelCollapsedCategory.ALL_PROCESSES,
icon: <ProcessIcon />,
navTarget: navigateToAllProcesses,
},
+ {
+ name: SidePanelCollapsedCategory.SHELL_ACCESS,
+ icon: <TerminalIcon />,
+ navTarget: navigateToUserVirtualMachines,
+ },
+ {
+ name: SidePanelCollapsedCategory.GROUPS,
+ icon: <GroupsIcon style={{marginLeft: '3px'}}/>,
+ navTarget: navigateToGroups,
+ },
{
name: SidePanelCollapsedCategory.TRASH,
icon: <TrashIcon />,
},
]
-const mapStateToProps = (state: RootState) => {
+const mapStateToProps = ({auth, properties }: RootState) => {
return {
- user: state.auth.user,
- selectedPath: state.properties.breadcrumbs[0].label,
+ user: auth.user,
+ selectedPath: properties.breadcrumbs ? properties.breadcrumbs[0].label : SidePanelCollapsedCategory.PROJECTS,
}
}
export const SidePanelCollapsed = withStyles(styles)(
connect(mapStateToProps, mapDispatchToProps)(({ classes, user, selectedPath, navToHome, navTo }: WithStyles & any) => {
- const [selectedIcon, setSelectedIcon] = useState(selectedPath)
const handleClick = (cat: TCollapsedCategory) => {
- setSelectedIcon(selectedPath)
if (cat.name === SidePanelCollapsedCategory.PROJECTS) navToHome(user.uuid)
else navTo(cat.navTarget)
}
const { root, unselected, selected } = classes
return (
- <List className={root}>
+ <List data-cy="side-panel-collapsed" className={root}>
{sidePanelCollapsedCategories.map((cat) => (
<ListItem
key={cat.name}
- className={selectedIcon === cat.name ? selected : unselected}
+ data-cy={`collapsed-${cat.name.toLowerCase().replace(/\s+/g, '-')}`}
+ className={selectedPath === cat.name ? selected : unselected}
onClick={() => handleClick(cat)}
>
<Tooltip