1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 import { MultiSelectMenuAction, MultiSelectMenuActionNames } from 'views-components/multiselect-toolbar/ms-menu-action-set';
6 import { openMoveProjectDialog } from 'store/projects/project-move-actions';
7 import { toggleProjectTrashed } from 'store/trash/trash-actions';
8 import { copyToClipboardAction, openInNewTabAction } from 'store/open-in-new-tab/open-in-new-tab.actions';
9 import { toggleFavorite } from 'store/favorites/favorites-actions';
10 import { favoritePanelActions } from 'store/favorite-panel/favorite-panel-action';
25 } from 'components/icon/icon';
26 import { RestoreFromTrashIcon, TrashIcon } from 'components/icon/icon';
27 import { getResource } from 'store/resources/resources';
28 import { checkFavorite } from 'store/favorites/favorites-reducer';
29 import { toggleDetailsPanel } from 'store/details-panel/details-panel-action';
30 import { openAdvancedTabDialog } from 'store/advanced-tab/advanced-tab';
31 import { openWebDavS3InfoDialog } from 'store/collections/collection-info-actions';
32 import { openSharingDialog } from 'store/sharing-dialog/sharing-dialog-actions';
33 import { openProjectCreateDialog } from 'store/projects/project-create-actions';
34 import { openProjectUpdateDialog } from 'store/projects/project-update-actions';
35 import { freezeProject, unfreezeProject } from 'store/projects/project-lock-actions';
37 export const msToggleFavoriteAction = {
38 name: MultiSelectMenuActionNames.ADD_TO_FAVORITES,
39 icon: AddFavoriteIcon,
41 altName: 'Remove from Favorites',
42 altIcon: RemoveFavoriteIcon,
44 useAlts: (uuid, resources, favorites) => {
45 return checkFavorite(uuid, favorites);
47 execute: (dispatch, resources) => {
48 dispatch(toggleFavorite(resources[0])).then(() => {
49 dispatch(favoritePanelActions.REQUEST_ITEMS());
54 export const msOpenInNewTabMenuAction = {
55 name: MultiSelectMenuActionNames.OPEN_IN_NEW_TAB,
59 execute: (dispatch, resources) => {
60 dispatch(openInNewTabAction(resources[0]));
64 export const msCopyToClipboardMenuAction = {
65 name: MultiSelectMenuActionNames.COPY_TO_CLIPBOARD,
69 execute: (dispatch, resources) => {
70 dispatch(copyToClipboardAction(resources));
74 export const msViewDetailsAction = {
75 name: MultiSelectMenuActionNames.VIEW_DETAILS,
79 execute: (dispatch) => {
80 dispatch(toggleDetailsPanel());
84 export const msAdvancedAction = {
85 name: MultiSelectMenuActionNames.API_DETAILS,
89 execute: (dispatch, resources) => {
90 dispatch(openAdvancedTabDialog(resources[0].uuid));
94 export const msOpenWith3rdPartyClientAction = {
95 name: MultiSelectMenuActionNames.OPEN_W_3RD_PARTY_CLIENT,
96 icon: FolderSharedIcon,
99 execute: (dispatch, resources) => {
100 dispatch(openWebDavS3InfoDialog(resources[0].uuid));
104 export const msEditProjectAction = {
105 name: MultiSelectMenuActionNames.EDIT_PPROJECT,
109 execute: (dispatch, resources) => {
110 dispatch(openProjectUpdateDialog(resources[0]));
114 export const msShareAction = {
115 name: MultiSelectMenuActionNames.SHARE,
119 execute: (dispatch, resources) => {
120 dispatch(openSharingDialog(resources[0].uuid));
124 export const msMoveToAction = {
125 name: MultiSelectMenuActionNames.MOVE_TO,
129 execute: (dispatch, resource) => {
130 dispatch(openMoveProjectDialog(resource[0]));
134 export const msToggleTrashAction = {
135 name: MultiSelectMenuActionNames.ADD_TO_TRASH,
138 altName: 'Restore from Trash',
139 altIcon: RestoreFromTrashIcon,
141 useAlts: (uuid, resources, favorites = []) => {
142 return uuid ? (getResource(uuid)(resources) as any).isTrashed : false;
144 execute: (dispatch, resources) => {
145 for (const resource of [...resources]) {
146 dispatch(toggleProjectTrashed(resource.uuid, resource.ownerUuid, resource.isTrashed!!, resources.length > 1));
151 export const msFreezeProjectAction = {
152 name: MultiSelectMenuActionNames.FREEZE_PROJECT,
155 altName: 'Unfreeze Project',
156 altIcon: UnfreezeIcon,
158 useAlts: () => false,
159 execute: (dispatch, resources) => {
160 if (resources[0].isFrozen) {
161 dispatch(unfreezeProject(resources[0].uuid));
163 dispatch(freezeProject(resources[0].uuid));
168 export const msNewProjectAction: any = {
169 name: MultiSelectMenuActionNames.NEW_PROJECT,
170 icon: NewProjectIcon,
173 execute: (dispatch, resource): void => {
174 dispatch(openProjectCreateDialog(resource.uuid));
178 export const msProjectActionSet: MultiSelectMenuAction[][] = [
180 msCopyToClipboardMenuAction,
181 msToggleFavoriteAction,
182 msOpenInNewTabMenuAction,
183 msCopyToClipboardMenuAction,
186 msOpenWith3rdPartyClientAction,
191 msFreezeProjectAction,