Merge branch '21128-toolbar-context-menu'
[arvados-workbench2.git] / src / views-components / context-menu / action-sets / collection-files-action-set.ts
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import { ContextMenuAction, ContextMenuActionSet } from "views-components/context-menu/context-menu-action-set";
6 import { collectionPanelFilesAction, openMultipleFilesRemoveDialog } from "store/collection-panel/collection-panel-files/collection-panel-files-actions";
7 import {
8     openCollectionPartialCopyMultipleToNewCollectionDialog,
9     openCollectionPartialCopyMultipleToExistingCollectionDialog,
10     openCollectionPartialCopyToSeparateCollectionsDialog
11 } from 'store/collections/collection-partial-copy-actions';
12 import { openCollectionPartialMoveMultipleToExistingCollectionDialog, openCollectionPartialMoveMultipleToNewCollectionDialog, openCollectionPartialMoveToSeparateCollectionsDialog } from "store/collections/collection-partial-move-actions";
13 import { FileCopyIcon, FileMoveIcon, RemoveIcon, SelectAllIcon, SelectNoneIcon } from "components/icon/icon";
14
15 const copyActions: ContextMenuAction[] = [
16     {
17         name: "Copy selected into new collection",
18         icon: FileCopyIcon,
19         execute: dispatch => {
20             dispatch<any>(openCollectionPartialCopyMultipleToNewCollectionDialog());
21         }
22     },
23     {
24         name: "Copy selected into existing collection",
25         icon: FileCopyIcon,
26         execute: dispatch => {
27             dispatch<any>(openCollectionPartialCopyMultipleToExistingCollectionDialog());
28         }
29     },
30 ];
31
32 const copyActionsMultiple: ContextMenuAction[] = [
33     ...copyActions,
34     {
35         name: "Copy selected into separate collections",
36         icon: FileCopyIcon,
37         execute: dispatch => {
38             dispatch<any>(openCollectionPartialCopyToSeparateCollectionsDialog());
39         }
40     }
41 ];
42
43 const moveActions: ContextMenuAction[] = [
44     {
45         name: "Move selected into new collection",
46         icon: FileMoveIcon,
47         execute: dispatch => {
48             dispatch<any>(openCollectionPartialMoveMultipleToNewCollectionDialog());
49         }
50     },
51     {
52         name: "Move selected into existing collection",
53         icon: FileMoveIcon,
54         execute: dispatch => {
55             dispatch<any>(openCollectionPartialMoveMultipleToExistingCollectionDialog());
56         }
57     },
58 ];
59
60 const moveActionsMultiple: ContextMenuAction[] = [
61     ...moveActions,
62     {
63         name: "Move selected into separate collections",
64         icon: FileMoveIcon,
65         execute: dispatch => {
66             dispatch<any>(openCollectionPartialMoveToSeparateCollectionsDialog());
67         }
68     }
69 ];
70
71 const selectActions: ContextMenuAction[] = [
72     {
73         name: "Select all",
74         icon: SelectAllIcon,
75         execute: dispatch => {
76             dispatch(collectionPanelFilesAction.SELECT_ALL_COLLECTION_FILES());
77         }
78     },
79     {
80         name: "Unselect all",
81         icon: SelectNoneIcon,
82         execute: dispatch => {
83             dispatch(collectionPanelFilesAction.UNSELECT_ALL_COLLECTION_FILES());
84         }
85     },
86 ];
87
88 const removeAction: ContextMenuAction = {
89     name: "Remove selected",
90     icon: RemoveIcon,
91     execute: dispatch => {
92         dispatch(openMultipleFilesRemoveDialog());
93     }
94 };
95
96 // These action sets are used on the multi-select actions button.
97 export const readOnlyCollectionFilesActionSet: ContextMenuActionSet = [
98     selectActions,
99     copyActions,
100 ];
101
102 export const readOnlyCollectionFilesMultipleActionSet: ContextMenuActionSet = [
103     selectActions,
104     copyActionsMultiple,
105 ];
106
107 export const collectionFilesActionSet: ContextMenuActionSet = readOnlyCollectionFilesActionSet.concat([[
108     removeAction,
109     ...moveActions
110 ]]);
111
112 export const collectionFilesMultipleActionSet: ContextMenuActionSet = readOnlyCollectionFilesMultipleActionSet.concat([[
113     removeAction,
114     ...moveActionsMultiple
115 ]]);