21128: single-multi works again Arvados-DCO-1.1-Signed-off-by: Lisa Knox <lisa.knox...
[arvados-workbench2.git] / src / views-components / multiselect-toolbar / ms-project-action-set.ts
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import { 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';
8 import {
9     FreezeIcon,
10     MoveToIcon,
11     NewProjectIcon,
12     RenameIcon,
13     UnfreezeIcon,
14 } from 'components/icon/icon';
15 import { RestoreFromTrashIcon, TrashIcon } 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
21 const {
22     ADD_TO_FAVORITES,
23     OPEN_IN_NEW_TAB,
24     COPY_TO_CLIPBOARD,
25     VIEW_DETAILS,
26     API_DETAILS,
27     OPEN_W_3RD_PARTY_CLIENT,
28     EDIT_PPROJECT,
29     SHARE,
30     MOVE_TO,
31     ADD_TO_TRASH,
32     FREEZE_PROJECT,
33     NEW_PROJECT,
34 } = MultiSelectMenuActionNames;
35
36 const msEditProjectAction = {
37     name: EDIT_PPROJECT,
38     icon: RenameIcon,
39     hasAlts: false,
40     isForMulti: false,
41     execute: (dispatch, resources) => {
42         dispatch(openProjectUpdateDialog(resources[0]));
43     },
44 };
45
46 const msMoveToAction = {
47     name: MOVE_TO,
48     icon: MoveToIcon,
49     hasAlts: false,
50     isForMulti: true,
51     execute: (dispatch, resource) => {
52         dispatch(openMoveProjectDialog(resource[0]));
53     },
54 };
55
56 export const msToggleTrashAction = {
57     name: ADD_TO_TRASH,
58     icon: TrashIcon,
59     hasAlts: true,
60     altName: 'Restore from Trash',
61     altIcon: RestoreFromTrashIcon,
62     isForMulti: true,
63     useAlts: (uuid, iconProps) => {
64         return uuid ? (getResource(uuid)(iconProps.resources) as any).isTrashed : false;
65     },
66     execute: (dispatch, resources) => {
67         for (const resource of [...resources]) {
68             dispatch(toggleProjectTrashed(resource.uuid, resource.ownerUuid, resource.isTrashed!!, resources.length > 1));
69         }
70     },
71 };
72
73 const msFreezeProjectAction = {
74     name: FREEZE_PROJECT,
75     icon: FreezeIcon,
76     hasAlts: true,
77     altName: 'Unfreeze Project',
78     altIcon: UnfreezeIcon,
79     isForMulti: false,
80     useAlts: (uuid, iconProps) => {
81         return uuid ? !!(getResource(uuid)(iconProps.resources) as any).frozenByUuid : false;
82     },
83     execute: (dispatch, resources) => {
84         if (resources[0].frozenByUuid) {
85             dispatch(unfreezeProject(resources[0].uuid));
86         } else {
87             dispatch(freezeProject(resources[0].uuid));
88         }
89     },
90 };
91
92 const msNewProjectAction: any = {
93     name: NEW_PROJECT,
94     icon: NewProjectIcon,
95     hasAlts: false,
96     isForMulti: false,
97     execute: (dispatch, resource): void => {
98         dispatch(openProjectCreateDialog(resource.uuid));
99     },
100 };
101
102 export const msProjectActionSet: MultiSelectMenuActionSet = [
103     [
104         ...msCommonActionSet,
105         msEditProjectAction,
106         msMoveToAction,
107         msToggleTrashAction,
108         msNewProjectAction,
109         msFreezeProjectAction,
110     ],
111 ];
112
113 export const msProjectActionFilter = new Set<string>([
114     ADD_TO_FAVORITES,
115     ADD_TO_TRASH,
116     API_DETAILS,
117     COPY_TO_CLIPBOARD,
118     EDIT_PPROJECT,
119     FREEZE_PROJECT,
120     MOVE_TO,
121     NEW_PROJECT,
122     OPEN_IN_NEW_TAB,
123     OPEN_W_3RD_PARTY_CLIENT,
124     SHARE,
125     VIEW_DETAILS,
126 ]);
127 export const msReadOnlyProjectActionFilter = new Set<string>([ADD_TO_FAVORITES, OPEN_IN_NEW_TAB, COPY_TO_CLIPBOARD, VIEW_DETAILS, API_DETAILS, OPEN_W_3RD_PARTY_CLIENT]);
128 export const msFrozenProjectActionFilter = new Set<string>([ADD_TO_FAVORITES, OPEN_IN_NEW_TAB, COPY_TO_CLIPBOARD, VIEW_DETAILS, API_DETAILS, OPEN_W_3RD_PARTY_CLIENT, SHARE, FREEZE_PROJECT])
129 export const msFilterGroupActionFilter = new Set<string>([ADD_TO_FAVORITES, OPEN_IN_NEW_TAB, COPY_TO_CLIPBOARD, VIEW_DETAILS, API_DETAILS, OPEN_W_3RD_PARTY_CLIENT, EDIT_PPROJECT, SHARE, MOVE_TO, ADD_TO_TRASH])