import { Dispatch } from "redux";
import { TCheckedList } from "components/data-table/data-table";
import { ContextMenuResource } from "store/context-menu/context-menu-actions";
-import { Resource, extractUuidKind } from "models/resource";
+import { Resource, ResourceKind, extractUuidKind } from "models/resource";
import { getResource } from "store/resources/resources";
import { ResourcesState } from "store/resources/resources";
import { MultiSelectMenuAction, MultiSelectMenuActionSet, MultiSelectMenuActionNames } from "views-components/multiselect-toolbar/ms-menu-actions";
import { ContextMenuAction } from "views-components/context-menu/context-menu-action-set";
-import { multiselectActionsFilters, TMultiselectActionsFilters } from "./ms-toolbar-action-filters";
+import { multiselectActionsFilters, TMultiselectActionsFilters, msResourceKind } from "./ms-toolbar-action-filters";
import { kindToActionSet, findActionByName } from "./ms-kind-action-differentiator";
import { msToggleTrashAction } from "views-components/multiselect-toolbar/ms-project-action-set";
import { copyToClipboardAction } from "store/open-in-new-tab/open-in-new-tab.actions";
import { ContainerRequestResource } from "models/container-request";
import { FavoritesState } from "store/favorites/favorites-reducer";
+import { resourceIsFrozen } from "common/frozen-resources";
type CssRules = "root" | "button";
)(
withStyles(styles)((props: MultiselectToolbarProps & WithStyles<CssRules>) => {
const { classes, checkedList, selectedUuid: singleSelectedUuid, iconProps } = props;
- const currentResourceKinds = Array.from(selectedToKindSet(checkedList));
+ const singleProjectKind = singleSelectedUuid ? resourceSubKind(singleSelectedUuid, iconProps.resources) : ''
+ const currentResourceKinds = singleProjectKind ? singleProjectKind :Array.from(selectedToKindSet(checkedList));
const currentPathIsTrash = window.location.pathname === "/trash";
+
const actions =
currentPathIsTrash && selectedToKindSet(checkedList).size
? [msToggleTrashAction]
- : selectActionsByKind(currentResourceKinds, multiselectActionsFilters)
+ : selectActionsByKind(currentResourceKinds as string[], multiselectActionsFilters)
.filter((action) => (singleSelectedUuid === null ? action.isForMulti : true));
return (
return actionArray[0].filter(action => filters.has(action.name as string));
}
+const resourceSubKind = (uuid: string, resources: ResourcesState) => {
+ const resource = getResource(uuid)(resources) as ContainerRequestResource | Resource;
+ switch (resource.kind) {
+ case ResourceKind.PROJECT:
+ if(resourceIsFrozen(resource, resources)) return [msResourceKind.PROJECT_FROZEN]
+ return [msResourceKind.PROJECT]
+ default:
+ return resource.kind
+ }
+};
+
function selectActionsByKind(currentResourceKinds: Array<string>, filterSet: TMultiselectActionsFilters) {
const rawResult: Set<MultiSelectMenuAction> = new Set();
const resultNames = new Set();
//
// SPDX-License-Identifier: AGPL-3.0
-import { ResourceKind } from 'models/resource';
import { MultiSelectMenuActionSet, MultiSelectMenuActionNames } from 'views-components/multiselect-toolbar/ms-menu-actions';
import { msCollectionActionSet } from 'views-components/multiselect-toolbar/ms-collection-action-set';
-import { msProjectActionSet } from 'views-components/multiselect-toolbar/ms-project-action-set';
+import { msProjectActionSet, msReadOnlyProjectActionSet, msFilterGroupActionSet, msFrozenActionSet } from 'views-components/multiselect-toolbar/ms-project-action-set';
import { msProcessActionSet } from 'views-components/multiselect-toolbar/ms-process-action-set';
import { msWorkflowActionSet } from 'views-components/multiselect-toolbar/ms-workflow-action-set';
]);
const workflowMSActionFilter = new Set([OPEN_IN_NEW_TAB, COPY_TO_CLIPBOARD, VIEW_DETAILS, API_DETAILS, RUN_WORKFLOW, DELETE_WORKFLOW]);
-const { COLLECTION, PROCESS, PROJECT, WORKFLOW } = ResourceKind;
+
+export enum msResourceKind {
+ API_CLIENT_AUTHORIZATION = "arvados#apiClientAuthorization",
+ COLLECTION = "arvados#collection",
+ CONTAINER = "arvados#container",
+ CONTAINER_REQUEST = "arvados#containerRequest",
+ GROUP = "arvados#group",
+ LINK = "arvados#link",
+ LOG = "arvados#log",
+ PROCESS = "arvados#containerRequest",
+ PROJECT = "arvados#group",
+ PROJECT_FROZEN = "arvados#group_frozen",
+ REPOSITORY = "arvados#repository",
+ SSH_KEY = "arvados#authorizedKeys",
+ KEEP_SERVICE = "arvados#keepService",
+ USER = "arvados#user",
+ VIRTUAL_MACHINE = "arvados#virtualMachine",
+ WORKFLOW = "arvados#workflow",
+ NONE = "arvados#none"
+}
+
+const { COLLECTION, PROCESS, PROJECT, PROJECT_FROZEN, WORKFLOW } = msResourceKind;
export const multiselectActionsFilters: TMultiselectActionsFilters = {
[COLLECTION]: [msCollectionActionSet, allActionNames(msCollectionActionSet)],
[PROCESS]: [msProcessActionSet, processResourceMSActionsFilter],
[PROJECT]: [msProjectActionSet, projectMSActionsFilter],
+ [PROJECT_FROZEN]: [msProjectActionSet, allActionNames(msFrozenActionSet)],
[WORKFLOW]: [msWorkflowActionSet, workflowMSActionFilter]
};
//
// SPDX-License-Identifier: AGPL-3.0
-import { MultiSelectMenuAction, MultiSelectMenuActionNames } from 'views-components/multiselect-toolbar/ms-menu-actions';
+import { MultiSelectMenuActionSet, MultiSelectMenuActionNames } from 'views-components/multiselect-toolbar/ms-menu-actions';
import { openMoveProjectDialog } from 'store/projects/project-move-actions';
import { toggleProjectTrashed } from 'store/trash/trash-actions';
import { copyToClipboardAction, openInNewTabAction } from 'store/open-in-new-tab/open-in-new-tab.actions';
},
};
-export const msProjectActionSet: MultiSelectMenuAction[][] = [
+export const msProjectActionSet: MultiSelectMenuActionSet = [
[
- msCopyToClipboardMenuAction,
msToggleFavoriteAction,
msOpenInNewTabMenuAction,
msCopyToClipboardMenuAction,
msShareAction,
msMoveToAction,
msToggleTrashAction,
- msFreezeProjectAction,
msNewProjectAction,
+ msFreezeProjectAction,
+ ],
+];
+
+export const msReadOnlyProjectActionSet: MultiSelectMenuActionSet = [
+ [msToggleFavoriteAction, msOpenInNewTabMenuAction, msCopyToClipboardMenuAction, msViewDetailsAction, msAdvancedAction, msOpenWith3rdPartyClientAction],
+];
+
+export const msFilterGroupActionSet: MultiSelectMenuActionSet = [
+ [
+ msToggleFavoriteAction,
+ msOpenInNewTabMenuAction,
+ msCopyToClipboardMenuAction,
+ msViewDetailsAction,
+ msAdvancedAction,
+ msOpenWith3rdPartyClientAction,
+ msEditProjectAction,
+ msShareAction,
+ msMoveToAction,
+ msToggleTrashAction,
],
];
+
+export const msFrozenActionSet: MultiSelectMenuActionSet = [
+ [
+ msShareAction,
+ msToggleFavoriteAction,
+ msOpenInNewTabMenuAction,
+ msCopyToClipboardMenuAction,
+ msViewDetailsAction,
+ msAdvancedAction,
+ msOpenWith3rdPartyClientAction,
+ msFreezeProjectAction,
+ ],
+];
\ No newline at end of file