1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 import { MultiSelectMenuAction, MultiSelectMenuActionSet, MultiSelectMenuActionNames, msCommonActionSet } from 'views-components/multiselect-toolbar/ms-menu-actions';
6 import { openMoveProjectDialog } from 'store/projects/project-move-actions';
7 import { toggleProjectTrashed } from 'store/trash/trash-actions';
14 } from 'components/icon/icon';
15 import { RestoreFromTrashIcon, TrashIcon, FolderSharedIcon, Link } from 'components/icon/icon';
16 import { getResource } from 'store/resources/resources';
17 import { openProjectCreateDialog } from 'store/projects/project-create-actions';
18 import { openProjectUpdateDialog } from 'store/projects/project-update-actions';
19 import { freezeProject, unfreezeProject } from 'store/projects/project-lock-actions';
20 import { openWebDavS3InfoDialog } from 'store/collections/collection-info-actions';
21 import { copyToClipboardAction } from 'store/open-in-new-tab/open-in-new-tab.actions';
29 OPEN_W_3RD_PARTY_CLIENT,
36 } = MultiSelectMenuActionNames;
38 const msCopyToClipboardMenuAction: MultiSelectMenuAction = {
39 name: COPY_TO_CLIPBOARD,
43 execute: (dispatch, resources) => {
44 dispatch<any>(copyToClipboardAction(resources));
48 const msEditProjectAction: MultiSelectMenuAction = {
53 execute: (dispatch, resources) => {
54 dispatch<any>(openProjectUpdateDialog(resources[0]));
58 const msMoveToAction: MultiSelectMenuAction = {
63 execute: (dispatch, resource) => {
64 dispatch<any>(openMoveProjectDialog(resource[0]));
68 const msOpenWith3rdPartyClientAction: MultiSelectMenuAction = {
69 name: OPEN_W_3RD_PARTY_CLIENT,
70 icon: FolderSharedIcon,
73 execute: (dispatch, resources) => {
74 dispatch<any>(openWebDavS3InfoDialog(resources[0].uuid));
78 export const msToggleTrashAction: MultiSelectMenuAction = {
82 altName: 'Restore from Trash',
83 altIcon: RestoreFromTrashIcon,
85 useAlts: (uuid, iconProps) => {
86 return uuid ? (getResource(uuid)(iconProps.resources) as any).isTrashed : false;
88 execute: (dispatch, resources) => {
89 for (const resource of [...resources]) {
90 dispatch<any>(toggleProjectTrashed(resource.uuid, resource.ownerUuid, resource.isTrashed!!, resources.length > 1));
95 const msFreezeProjectAction: MultiSelectMenuAction = {
99 altName: 'Unfreeze Project',
100 altIcon: UnfreezeIcon,
102 useAlts: (uuid, iconProps) => {
103 return uuid ? !!(getResource(uuid)(iconProps.resources) as any).frozenByUuid : false;
105 execute: (dispatch, resources) => {
106 if ((resources[0] as any).frozenByUuid) {
107 dispatch<any>(unfreezeProject(resources[0].uuid));
109 dispatch<any>(freezeProject(resources[0].uuid));
114 const msNewProjectAction: MultiSelectMenuAction = {
116 icon: NewProjectIcon,
119 execute: (dispatch, resources): void => {
120 dispatch<any>(openProjectCreateDialog(resources[0].uuid));
124 export const msProjectActionSet: MultiSelectMenuActionSet = [
126 ...msCommonActionSet,
131 msFreezeProjectAction,
132 msOpenWith3rdPartyClientAction,
133 msCopyToClipboardMenuAction
137 export const msCommonProjectActionFilter = new Set<string>([
147 OPEN_W_3RD_PARTY_CLIENT,
151 export const msReadOnlyProjectActionFilter = new Set<string>([ADD_TO_FAVORITES, API_DETAILS, COPY_TO_CLIPBOARD, OPEN_IN_NEW_TAB, OPEN_W_3RD_PARTY_CLIENT, VIEW_DETAILS,]);
152 export const msFrozenProjectActionFilter = new Set<string>([ADD_TO_FAVORITES, API_DETAILS, COPY_TO_CLIPBOARD, OPEN_IN_NEW_TAB, OPEN_W_3RD_PARTY_CLIENT, VIEW_DETAILS, SHARE, FREEZE_PROJECT])
153 export const msFilterGroupActionFilter = new Set<string>([ADD_TO_FAVORITES, API_DETAILS, COPY_TO_CLIPBOARD, OPEN_IN_NEW_TAB, OPEN_W_3RD_PARTY_CLIENT, VIEW_DETAILS, SHARE, ADD_TO_TRASH, EDIT_PROJECT, MOVE_TO])