15768: restoreFromTrash now properly navigates after multi Arvados-DCO-1.1-Signed...
[arvados.git] / src / views-components / context-menu / action-sets / project-action-set.ts
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import { ContextMenuActionSet } from '../context-menu-action-set';
6 import { NewProjectIcon, RenameIcon, MoveToIcon, DetailsIcon, AdvancedIcon, OpenIcon, Link, FolderSharedIcon } from 'components/icon/icon';
7 import { ToggleFavoriteAction } from '../actions/favorite-action';
8 import { toggleFavorite } from 'store/favorites/favorites-actions';
9 import { favoritePanelActions } from 'store/favorite-panel/favorite-panel-action';
10 import { openMoveProjectDialog } from 'store/projects/project-move-actions';
11 import { openProjectCreateDialog } from 'store/projects/project-create-actions';
12 import { openProjectUpdateDialog } from 'store/projects/project-update-actions';
13 import { ToggleTrashAction } from 'views-components/context-menu/actions/trash-action';
14 import { toggleProjectTrashed } from 'store/trash/trash-actions';
15 import { ShareIcon } from 'components/icon/icon';
16 import { openSharingDialog } from 'store/sharing-dialog/sharing-dialog-actions';
17 import { openAdvancedTabDialog } from 'store/advanced-tab/advanced-tab';
18 import { toggleDetailsPanel } from 'store/details-panel/details-panel-action';
19 import { copyToClipboardAction, openInNewTabAction } from 'store/open-in-new-tab/open-in-new-tab.actions';
20 import { openWebDavS3InfoDialog } from 'store/collections/collection-info-actions';
21 import { ToggleLockAction } from '../actions/lock-action';
22 import { freezeProject, unfreezeProject } from 'store/projects/project-lock-actions';
23
24 export const toggleFavoriteAction = {
25     component: ToggleFavoriteAction,
26     name: 'ToggleFavoriteAction',
27     execute: (dispatch, resources) => {
28         resources.forEach((resource) =>
29             dispatch(toggleFavorite(resource)).then(() => {
30                 dispatch(favoritePanelActions.REQUEST_ITEMS());
31             })
32         );
33     },
34 };
35
36 export const openInNewTabMenuAction = {
37     icon: OpenIcon,
38     name: 'Open in new tab',
39     execute: (dispatch, resources) => {
40         resources.forEach((resource) => dispatch(openInNewTabAction(resource)));
41     },
42 };
43
44 export const copyToClipboardMenuAction = {
45     icon: Link,
46     name: 'Copy to clipboard',
47     execute: (dispatch, resources) => {
48         dispatch(copyToClipboardAction(resources));
49     },
50 };
51
52 export const viewDetailsAction = {
53     icon: DetailsIcon,
54     name: 'View details',
55     execute: (dispatch) => {
56         dispatch(toggleDetailsPanel());
57     },
58 };
59
60 export const advancedAction = {
61     icon: AdvancedIcon,
62     name: 'API Details',
63     execute: (dispatch, resources) => {
64         resources.forEach((resource) => dispatch(openAdvancedTabDialog(resource.uuid)));
65     },
66 };
67
68 export const openWith3rdPartyClientAction = {
69     icon: FolderSharedIcon,
70     name: 'Open with 3rd party client',
71     execute: (dispatch, resources) => {
72         resources.forEach((resource) => dispatch(openWebDavS3InfoDialog(resource.uuid)));
73     },
74 };
75
76 export const editProjectAction = {
77     icon: RenameIcon,
78     name: 'Edit project',
79     execute: (dispatch, resources) => {
80         resources.forEach((resource) => dispatch(openProjectUpdateDialog(resource)));
81     },
82 };
83
84 export const shareAction = {
85     icon: ShareIcon,
86     name: 'Share',
87     execute: (dispatch, processes) => {
88         processes.forEach((process) => dispatch(openSharingDialog(process.uuid)));
89     },
90 };
91
92 export const moveToAction = {
93     icon: MoveToIcon,
94     name: 'Move to',
95     execute: (dispatch, resources) => {
96         resources.forEach((resource) => {
97             dispatch(openMoveProjectDialog(resource));
98         });
99     },
100 };
101
102 export const toggleTrashAction = {
103     component: ToggleTrashAction,
104     name: 'ToggleTrashAction',
105     execute: (dispatch, resources) => {
106         resources.forEach((resource) =>
107             dispatch(toggleProjectTrashed(resource.uuid, resource.ownerUuid, resource.isTrashed!!, resources.length > 1))
108         );
109     },
110 };
111
112 export const freezeProjectAction = {
113     component: ToggleLockAction,
114     name: 'ToggleLockAction',
115     execute: (dispatch, resources) => {
116         resources.forEach((resource) => {
117             if (resource.isFrozen) {
118                 dispatch(unfreezeProject(resource.uuid));
119             } else {
120                 dispatch(freezeProject(resource.uuid));
121             }
122         });
123     },
124 };
125
126 export const newProjectAction: any = {
127     icon: NewProjectIcon,
128     name: 'New project',
129     execute: (dispatch, resource): void => {
130         dispatch(openProjectCreateDialog(resource.uuid));
131     },
132 };
133
134 export const readOnlyProjectActionSet: ContextMenuActionSet = [
135     [toggleFavoriteAction, openInNewTabMenuAction, copyToClipboardMenuAction, viewDetailsAction, advancedAction, openWith3rdPartyClientAction],
136 ];
137
138 export const filterGroupActionSet: ContextMenuActionSet = [
139     [
140         toggleFavoriteAction,
141         openInNewTabMenuAction,
142         copyToClipboardMenuAction,
143         viewDetailsAction,
144         advancedAction,
145         openWith3rdPartyClientAction,
146         editProjectAction,
147         shareAction,
148         moveToAction,
149         toggleTrashAction,
150     ],
151 ];
152
153 export const frozenActionSet: ContextMenuActionSet = [
154     [
155         shareAction,
156         toggleFavoriteAction,
157         openInNewTabMenuAction,
158         copyToClipboardMenuAction,
159         viewDetailsAction,
160         advancedAction,
161         openWith3rdPartyClientAction,
162         freezeProjectAction,
163     ],
164 ];
165
166 export const projectActionSet: ContextMenuActionSet = [
167     [
168         toggleFavoriteAction,
169         openInNewTabMenuAction,
170         copyToClipboardMenuAction,
171         viewDetailsAction,
172         advancedAction,
173         openWith3rdPartyClientAction,
174         editProjectAction,
175         shareAction,
176         moveToAction,
177         toggleTrashAction,
178         newProjectAction,
179         freezeProjectAction,
180     ],
181 ];