821ffef2651708d0ed90816d629b58a0ee840232
[arvados.git] / src / views-components / multiselect-toolbar / ms-collection-action-set.ts
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import { MoveToIcon, CopyIcon, RenameIcon } from "components/icon/icon";
6 import { openMoveCollectionDialog } from "store/collections/collection-move-actions";
7 import { openCollectionCopyDialog, openMultiCollectionCopyDialog } from "store/collections/collection-copy-actions";
8 import { toggleCollectionTrashed } from "store/trash/trash-actions";
9 import { ContextMenuResource } from "store/context-menu/context-menu-actions";
10 import { msCommonActionSet, MultiSelectMenuActionSet, MultiSelectMenuActionNames, MultiSelectMenuAction } from "./ms-menu-actions";
11 import { TrashIcon, Link, FolderSharedIcon } from "components/icon/icon";
12 import { openCollectionUpdateDialog } from "store/collections/collection-update-actions";
13 import { copyToClipboardAction } from "store/open-in-new-tab/open-in-new-tab.actions";
14 import { openWebDavS3InfoDialog } from "store/collections/collection-info-actions";
15
16 const { MAKE_A_COPY, MOVE_TO, ADD_TO_TRASH, EDIT_COLLECTION, OPEN_IN_NEW_TAB, OPEN_W_3RD_PARTY_CLIENT, COPY_TO_CLIPBOARD, VIEW_DETAILS, API_DETAILS, ADD_TO_FAVORITES, SHARE} = MultiSelectMenuActionNames;
17
18 const msCopyCollection: MultiSelectMenuAction = {
19     name: MAKE_A_COPY,
20     icon: CopyIcon,
21     hasAlts: false,
22     isForMulti: true,
23     execute: (dispatch, [...resources]) => {
24         if (resources[0].fromContextMenu || resources.length === 1) dispatch<any>(openCollectionCopyDialog(resources[0]));
25         else dispatch<any>(openMultiCollectionCopyDialog(resources[0]));
26     },
27 }
28
29 const msMoveCollection: MultiSelectMenuAction = {
30     name: MOVE_TO,
31     icon: MoveToIcon,
32     hasAlts: false,
33     isForMulti: true,
34     execute: (dispatch, resources) => dispatch<any>(openMoveCollectionDialog(resources[0])),
35 }
36
37 const msToggleTrashAction: MultiSelectMenuAction = {
38     name: ADD_TO_TRASH,
39     icon: TrashIcon,
40     isForMulti: true,
41     hasAlts: false,
42     execute: (dispatch, resources: ContextMenuResource[]) => {
43         for (const resource of [...resources]) {
44             dispatch<any>(toggleCollectionTrashed(resource.uuid, resource.isTrashed!!));
45         }
46     },
47 }
48
49 const msEditCollection: MultiSelectMenuAction = {
50     icon: RenameIcon,
51     hasAlts: false,
52     isForMulti: false,
53     name: "Edit collection",
54     execute: (dispatch, resources) => {
55         dispatch<any>(openCollectionUpdateDialog(resources[0]));
56     },
57 }
58
59 const msCopyToClipboardMenuAction: MultiSelectMenuAction  = {
60     name: COPY_TO_CLIPBOARD,
61     icon: Link,
62     hasAlts: false,
63     isForMulti: false,
64     execute: (dispatch, resources) => {
65         dispatch<any>(copyToClipboardAction(resources));
66     },
67 };
68
69 const msOpenWith3rdPartyClientAction: MultiSelectMenuAction  = {
70     name: OPEN_W_3RD_PARTY_CLIENT,
71     icon: FolderSharedIcon,
72     hasAlts: false,
73     isForMulti: false,
74     execute: (dispatch, resources) => {
75         dispatch<any>(openWebDavS3InfoDialog(resources[0].uuid));
76     },
77 };
78
79 export const msCollectionActionSet: MultiSelectMenuActionSet = [
80     [
81         ...msCommonActionSet,
82         msCopyCollection,
83         msMoveCollection,
84         msToggleTrashAction,
85         msEditCollection,
86         msCopyToClipboardMenuAction,
87         msOpenWith3rdPartyClientAction
88     ],
89 ];
90
91 export const msReadOnlyCollectionActionFilter = new Set([OPEN_IN_NEW_TAB, COPY_TO_CLIPBOARD, MAKE_A_COPY, VIEW_DETAILS, API_DETAILS, ADD_TO_FAVORITES, OPEN_W_3RD_PARTY_CLIENT]);
92 export const msCommonCollectionActionFilter = new Set([OPEN_IN_NEW_TAB, COPY_TO_CLIPBOARD, MAKE_A_COPY, VIEW_DETAILS, API_DETAILS, OPEN_W_3RD_PARTY_CLIENT, EDIT_COLLECTION, SHARE, MOVE_TO, ADD_TO_FAVORITES, ADD_TO_TRASH])
93 export const msOldCollectionActionFilter = new Set([OPEN_IN_NEW_TAB, COPY_TO_CLIPBOARD, MAKE_A_COPY, VIEW_DETAILS, API_DETAILS, OPEN_W_3RD_PARTY_CLIENT, EDIT_COLLECTION, SHARE, MOVE_TO, ADD_TO_FAVORITES, ADD_TO_TRASH])