Merge branch '19142-avoid-loading-unneeded-mounts' into main. Closes #19142
[arvados-workbench2.git] / src / views-components / context-menu / action-sets / process-resource-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 { ToggleFavoriteAction } from "../actions/favorite-action";
7 import { toggleFavorite } from "store/favorites/favorites-actions";
8 import {
9     RenameIcon, ShareIcon, MoveToIcon, CopyIcon, DetailsIcon,
10     RemoveIcon, ReRunProcessIcon, OutputIcon,
11     AdvancedIcon
12 } from "components/icon/icon";
13 import { favoritePanelActions } from "store/favorite-panel/favorite-panel-action";
14 import { openMoveProcessDialog } from 'store/processes/process-move-actions';
15 import { openProcessUpdateDialog } from "store/processes/process-update-actions";
16 import { openCopyProcessDialog } from 'store/processes/process-copy-actions';
17 import { openSharingDialog } from "store/sharing-dialog/sharing-dialog-actions";
18 import { openRemoveProcessDialog, reRunProcess } from "store/processes/processes-actions";
19 import { toggleDetailsPanel } from 'store/details-panel/details-panel-action';
20 import { snackbarActions, SnackbarKind } from "store/snackbar/snackbar-actions";
21 import { navigateToOutput } from "store/process-panel/process-panel-actions";
22 import { openAdvancedTabDialog } from "store/advanced-tab/advanced-tab";
23 import { TogglePublicFavoriteAction } from "../actions/public-favorite-action";
24 import { togglePublicFavorite } from "store/public-favorites/public-favorites-actions";
25 import { publicFavoritePanelActions } from "store/public-favorites-panel/public-favorites-action";
26
27 export const readOnlyProcessResourceActionSet: ContextMenuActionSet = [[
28     {
29         component: ToggleFavoriteAction,
30         execute: (dispatch, resource) => {
31             dispatch<any>(toggleFavorite(resource)).then(() => {
32                 dispatch<any>(favoritePanelActions.REQUEST_ITEMS());
33             });
34         }
35     },
36     {
37         icon: CopyIcon,
38         name: "Copy to project",
39         execute: (dispatch, resource) => {
40             dispatch<any>(openCopyProcessDialog(resource));
41         }
42     },
43     {
44         icon: ReRunProcessIcon,
45         name: "Re-run process",
46         execute: (dispatch, resource) => {
47             if(resource.workflowUuid) {
48                 dispatch<any>(reRunProcess(resource.uuid, resource.workflowUuid));
49             } else {
50                 dispatch(snackbarActions.OPEN_SNACKBAR({ message: `You can't re-run this process`, hideDuration: 2000, kind: SnackbarKind.ERROR }));
51             }
52         }
53     },
54     {
55         icon: OutputIcon,
56         name: "Outputs",
57         execute: (dispatch, resource) => {
58             if(resource.outputUuid){
59                 dispatch<any>(navigateToOutput(resource.outputUuid));
60             }
61         }
62     },
63     {
64         icon: DetailsIcon,
65         name: "View details",
66         execute: dispatch => {
67             dispatch<any>(toggleDetailsPanel());
68         }
69     },
70     {
71         icon: AdvancedIcon,
72         name: "Advanced",
73         execute: (dispatch, resource) => {
74             dispatch<any>(openAdvancedTabDialog(resource.uuid));
75         }
76     },
77 ]];
78
79 export const processResourceActionSet: ContextMenuActionSet = [[
80     ...readOnlyProcessResourceActionSet.reduce((prev, next) => prev.concat(next), []),
81     {
82         icon: RenameIcon,
83         name: "Edit process",
84         execute: (dispatch, resource) => {
85             dispatch<any>(openProcessUpdateDialog(resource));
86         }
87     },
88     {
89         icon: ShareIcon,
90         name: "Share",
91         execute: (dispatch, { uuid }) => {
92             dispatch<any>(openSharingDialog(uuid));
93         }
94     },
95     {
96         icon: MoveToIcon,
97         name: "Move to",
98         execute: (dispatch, resource) => {
99             dispatch<any>(openMoveProcessDialog(resource));
100         }
101     },
102     {
103         name: "Remove",
104         icon: RemoveIcon,
105         execute: (dispatch, resource) => {
106             dispatch<any>(openRemoveProcessDialog(resource.uuid));
107         }
108     }
109 ]];
110
111 export const processResourceAdminActionSet: ContextMenuActionSet = [[
112     ...processResourceActionSet.reduce((prev, next) => prev.concat(next), []),
113     {
114         component: TogglePublicFavoriteAction,
115         name: "Add to public favorites",
116         execute: (dispatch, resource) => {
117             dispatch<any>(togglePublicFavorite(resource)).then(() => {
118                 dispatch<any>(publicFavoritePanelActions.REQUEST_ITEMS());
119             });
120         }
121     },
122 ]];