21700: Install Bundler system-wide in Rails postinst
[arvados.git] / services / workbench2 / 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, ShareIcon } 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, MultiSelectMenuAction } from "./ms-menu-actions";
11 import { ContextMenuActionNames } from "views-components/context-menu/context-menu-action-set";
12 import { TrashIcon, Link, FolderSharedIcon } from "components/icon/icon";
13 import { openCollectionUpdateDialog } from "store/collections/collection-update-actions";
14 import { copyToClipboardAction } from "store/open-in-new-tab/open-in-new-tab.actions";
15 import { openWebDavS3InfoDialog } from "store/collections/collection-info-actions";
16 import { openSharingDialog } from "store/sharing-dialog/sharing-dialog-actions";
17
18
19 const { MAKE_A_COPY, MOVE_TO, MOVE_TO_TRASH, EDIT_COLLECTION, OPEN_IN_NEW_TAB, OPEN_WITH_3RD_PARTY_CLIENT, COPY_LINK_TO_CLIPBOARD, VIEW_DETAILS, API_DETAILS, ADD_TO_FAVORITES, SHARE} = ContextMenuActionNames;
20
21 const msCopyCollection: MultiSelectMenuAction = {
22     name: MAKE_A_COPY,
23     icon: CopyIcon,
24     hasAlts: false,
25     isForMulti: true,
26     execute: (dispatch, [...resources]) => {
27         if (resources[0].fromContextMenu || resources.length === 1) dispatch<any>(openCollectionCopyDialog(resources[0]));
28         else dispatch<any>(openMultiCollectionCopyDialog(resources[0]));
29     },
30 }
31
32 const msMoveCollection: MultiSelectMenuAction = {
33     name: MOVE_TO,
34     icon: MoveToIcon,
35     hasAlts: false,
36     isForMulti: true,
37     execute: (dispatch, resources) => dispatch<any>(openMoveCollectionDialog(resources[0])),
38 }
39
40 const msToggleTrashAction: MultiSelectMenuAction = {
41     name: MOVE_TO_TRASH,
42     icon: TrashIcon,
43     isForMulti: true,
44     hasAlts: false,
45     execute: (dispatch, resources: ContextMenuResource[]) => {
46         for (const resource of [...resources]) {
47             dispatch<any>(toggleCollectionTrashed(resource.uuid, resource.isTrashed!!));
48         }
49     },
50 }
51
52 const msEditCollection: MultiSelectMenuAction = {
53     name: ContextMenuActionNames.EDIT_COLLECTION,
54     icon: RenameIcon,
55     hasAlts: false,
56     isForMulti: false,
57     execute: (dispatch, resources) => {
58         dispatch<any>(openCollectionUpdateDialog(resources[0]));
59     },
60 }
61
62 const msCopyToClipboardMenuAction: MultiSelectMenuAction  = {
63     name: COPY_LINK_TO_CLIPBOARD,
64     icon: Link,
65     hasAlts: false,
66     isForMulti: false,
67     execute: (dispatch, resources) => {
68         dispatch<any>(copyToClipboardAction(resources));
69     },
70 };
71
72 const msOpenWith3rdPartyClientAction: MultiSelectMenuAction  = {
73     name: OPEN_WITH_3RD_PARTY_CLIENT,
74     icon: FolderSharedIcon,
75     hasAlts: false,
76     isForMulti: false,
77     execute: (dispatch, resources) => {
78         dispatch<any>(openWebDavS3InfoDialog(resources[0].uuid));
79     },
80 };
81
82 const msShareAction: MultiSelectMenuAction  = {
83     name: SHARE,
84     icon: ShareIcon,
85     hasAlts: false,
86     isForMulti: false,
87     execute: (dispatch, resources) => {
88         dispatch<any>(openSharingDialog(resources[0].uuid));
89     },
90 };
91
92 export const msCollectionActionSet: MultiSelectMenuActionSet = [
93     [
94         ...msCommonActionSet,
95         msCopyCollection,
96         msMoveCollection,
97         msToggleTrashAction,
98         msEditCollection,
99         msCopyToClipboardMenuAction,
100         msOpenWith3rdPartyClientAction,
101         msShareAction,
102     ],
103 ];
104
105 export const msReadOnlyCollectionActionFilter = new Set([OPEN_IN_NEW_TAB, COPY_LINK_TO_CLIPBOARD, MAKE_A_COPY, VIEW_DETAILS, API_DETAILS, ADD_TO_FAVORITES, OPEN_WITH_3RD_PARTY_CLIENT]);
106 export const msCommonCollectionActionFilter = new Set([OPEN_IN_NEW_TAB, COPY_LINK_TO_CLIPBOARD, MAKE_A_COPY, VIEW_DETAILS, API_DETAILS, OPEN_WITH_3RD_PARTY_CLIENT, EDIT_COLLECTION, SHARE, MOVE_TO, ADD_TO_FAVORITES, MOVE_TO_TRASH])
107 export const msOldCollectionActionFilter = new Set([OPEN_IN_NEW_TAB, COPY_LINK_TO_CLIPBOARD, MAKE_A_COPY, VIEW_DETAILS, API_DETAILS, OPEN_WITH_3RD_PARTY_CLIENT, EDIT_COLLECTION, SHARE, MOVE_TO, ADD_TO_FAVORITES, MOVE_TO_TRASH])