<CardHeader
className={classes.cardSubheader}
action={
- <Tooltip title="More options">
+ <Tooltip title="More options" disableFocusListener>
<IconButton onClick={onOptionsMenuOpen}>
<CustomizeTableIcon />
</IconButton>
renderContextMenuTrigger = (item: T) =>
<Grid container justify="center">
- <Tooltip title="More options">
+ <Tooltip title="More options" disableFocusListener>
<IconButton className={this.props.classes.moreOptionsButton} onClick={event => this.props.onContextMenu(event, item)}>
<MoreVertIcon />
</IconButton>
<Typography
className={classes.sizeInfo}
variant="caption">{formatFileSize(item.data.size)}</Typography>
- <Tooltip title="More options">
+ <Tooltip title="More options" disableFocusListener>
<IconButton
className={classes.button}
onClick={this.handleClick}>
import { getProperty } from "~/store/properties/properties";
export const PROJECT_PANEL_ID = "projectPanel";
export const PROJECT_PANEL_CURRENT_UUID = "projectPanelCurrentUuid";
+export const IS_PROJECT_PANEL_TRASHED = 'isProjectPanelTrashed';
export const projectPanelActions = bindDataExplorerActions(PROJECT_PANEL_ID);
export const openProjectPanel = (projectUuid: string) =>
export const getProjectPanelCurrentUuid = (state: RootState) => getProperty<string>(PROJECT_PANEL_CURRENT_UUID)(state.properties);
+export const setIsProjectPanelTrashed = (isTrashed: boolean) =>
+ (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
+ dispatch(propertiesActions.SET_PROPERTY({ key: IS_PROJECT_PANEL_TRASHED, value: isTrashed }));
+ };
import { FilterBuilder } from "~/services/api/filter-builder";
import { GroupContentsResource, GroupContentsResourcePrefix } from "~/services/groups-service/groups-service";
import { updateFavorites } from "../favorites/favorites-actions";
-import { PROJECT_PANEL_CURRENT_UUID, projectPanelActions } from './project-panel-action';
+import { PROJECT_PANEL_CURRENT_UUID, IS_PROJECT_PANEL_TRASHED, projectPanelActions } from './project-panel-action';
import { Dispatch, MiddlewareAPI } from "redux";
import { ProjectResource } from "~/models/project";
import { updateResources } from "~/store/resources/resources-actions";
const state = api.getState();
const dataExplorer = getDataExplorer(state.dataExplorer, this.getId());
const projectUuid = getProperty<string>(PROJECT_PANEL_CURRENT_UUID)(state.properties);
+ const isProjectTrashed = getProperty<string>(IS_PROJECT_PANEL_TRASHED)(state.properties);
if (!projectUuid) {
api.dispatch(projectPanelCurrentUuidIsNotSet());
} else if (!dataExplorer) {
} else {
try {
api.dispatch(progressIndicatorActions.START_WORKING(this.getId()));
- const response = await this.services.groupsService.contents(projectUuid, getParams(dataExplorer));
+ const response = await this.services.groupsService.contents(projectUuid, getParams(dataExplorer, !!isProjectTrashed));
api.dispatch(progressIndicatorActions.PERSIST_STOP_WORKING(this.getId()));
const resourceUuids = response.items.map(item => item.uuid);
api.dispatch<any>(updateFavorites(resourceUuids));
items: listResults.items.map(resource => resource.uuid),
});
-export const getParams = (dataExplorer: DataExplorer) => ({
+export const getParams = (dataExplorer: DataExplorer, isProjectTrashed: boolean) => ({
...dataExplorerToListParams(dataExplorer),
order: getOrder(dataExplorer),
filters: getFilters(dataExplorer),
+ includeTrash: isProjectTrashed
});
export const getFilters = (dataExplorer: DataExplorer) => {
import { loadDetailsPanel } from '~/store/details-panel/details-panel-action';
import { snackbarActions } from '../snackbar/snackbar-actions';
import { loadFavoritePanel } from '../favorite-panel/favorite-panel-action';
-import { openProjectPanel, projectPanelActions } from '~/store/project-panel/project-panel-action';
+import { openProjectPanel, projectPanelActions, setIsProjectPanelTrashed } from '~/store/project-panel/project-panel-action';
import { activateSidePanelTreeItem, initSidePanelTree, SidePanelTreeCategory, loadSidePanelTreeProjects } from '../side-panel-tree/side-panel-tree-actions';
import { loadResource, updateResources } from '../resources/resources-actions';
import { favoritePanelActions } from '~/store/favorite-panel/favorite-panel-action';
import { CollectionResource } from "~/models/collection";
import { searchResultsPanelActions, loadSearchResultsPanel } from '~/store/search-results-panel/search-results-panel-actions';
import { searchResultsPanelColumns } from '~/views/search-results-panel/search-results-panel-view';
-import * as uuid from 'uuid/v4';
export const WORKBENCH_LOADING_SCREEN = 'workbenchLoadingScreen';
handleFirstTimeLoad(
async (dispatch: Dispatch<any>, getState: () => RootState, services: ServiceRepository) => {
const userUuid = services.authService.getUuid();
+ dispatch(setIsProjectPanelTrashed(false));
if (userUuid) {
if (userUuid !== uuid) {
const match = await loadGroupContentsResource({ uuid, userUuid, services });
},
TRASHED: project => {
dispatch<any>(setTrashBreadcrumbs(uuid));
+ dispatch(setIsProjectPanelTrashed(true));
dispatch(activateSidePanelTreeItem(SidePanelTreeCategory.TRASH));
dispatch(finishLoadingProject(project));
}
<CardHeader
avatar={<ProcessIcon className={classes.iconHeader} />}
action={
- <Tooltip title="More options">
+ <Tooltip title="More options" disableFocusListener>
<IconButton onClick={event => onContextMenu(event, process)} aria-label="More options">
<MoreOptionsIcon />
</IconButton>
<Chip label={getProcessStatus(process)}
className={classes.chip}
style={{ backgroundColor: getProcessStatusColor(getProcessStatus(process), theme as ArvadosTheme) }} />
- <Tooltip title="More options">
+ <Tooltip title="More options" disableFocusListener>
<IconButton
aria-label="More options"
onClick={event => onContextMenu(event)}>
<Typography noWrap variant="body2" className={classes.status}>
{getProcessStatus(subprocess)}
</Typography>
- <Tooltip title="More options">
+ <Tooltip title="More options" disableFocusListener>
<IconButton
className={classes.options}
aria-label="More options"