1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 import { Dispatch } from 'redux';
6 import { IconType } from 'components/icon/icon';
7 import { ResourcesState } from 'store/resources/resources';
8 import { FavoritesState } from 'store/favorites/favorites-reducer';
9 import { ContextMenuResource } from 'store/context-menu/context-menu-actions';
10 import { AddFavoriteIcon, AdvancedIcon, DetailsIcon, OpenIcon, PublicFavoriteIcon, RemoveFavoriteIcon, ShareIcon } from 'components/icon/icon';
11 import { checkFavorite } from 'store/favorites/favorites-reducer';
12 import { toggleFavorite } from 'store/favorites/favorites-actions';
13 import { favoritePanelActions } from 'store/favorite-panel/favorite-panel-action';
14 import { openInNewTabAction } from 'store/open-in-new-tab/open-in-new-tab.actions';
15 import { toggleDetailsPanel } from 'store/details-panel/details-panel-action';
16 import { openAdvancedTabDialog } from 'store/advanced-tab/advanced-tab';
17 import { openSharingDialog } from 'store/sharing-dialog/sharing-dialog-actions';
18 import { togglePublicFavorite } from "store/public-favorites/public-favorites-actions";
19 import { publicFavoritePanelActions } from "store/public-favorites-panel/public-favorites-action";
20 import { PublicFavoritesState } from 'store/public-favorites/public-favorites-reducer';
21 import { UserAccountStatus } from 'store/users/users-actions';
23 export enum MultiSelectMenuActionNames {
24 ADD_TO_FAVORITES = 'Add to Favorites',
25 MOVE_TO_TRASH = 'Move to trash',
26 ADD_TO_PUBLIC_FAVORITES = 'Add to public favorites',
27 API_DETAILS = 'API Details',
28 ATTRIBUTES = 'Attributes',
30 COPY_AND_RERUN_PROCESS = 'Copy and re-run process',
31 COPY_TO_CLIPBOARD = 'Copy to clipboard',
32 DELETE_WORKFLOW = 'Delete Workflow',
33 EDIT_COLLECTION = 'Edit collection',
34 EDIT_PROJECT = 'Edit project',
35 EDIT_PROCESS = 'Edit process',
36 FREEZE_PROJECT = 'Freeze Project',
37 MAKE_A_COPY = 'Make a copy',
39 NEW_PROJECT = 'New project',
40 OPEN_IN_NEW_TAB = 'Open in new tab',
41 OPEN_W_3RD_PARTY_CLIENT = 'Open with 3rd party client',
44 RUN_WORKFLOW = 'Run Workflow',
46 VIEW_DETAILS = 'View details',
47 ACTIVATE_USER = 'Activate user',
48 DEACTIVATE_USER = 'Deactivate user',
49 SETUP_USER = 'Setup user',
50 LOGIN_AS_USER = 'Login as user',
53 export type MultiSelectMenuAction = {
60 useAlts?: (uuid: string | null, iconProps: {resources: ResourcesState, favorites: FavoritesState, publicFavorites: PublicFavoritesState}) => boolean;
61 execute(dispatch: Dispatch, resources: ContextMenuResource[], state?: any): void;
63 filters?: UserAccountStatus[]
66 export type MultiSelectMenuActionSet = MultiSelectMenuAction[][];
68 const { ADD_TO_FAVORITES, ADD_TO_PUBLIC_FAVORITES, OPEN_IN_NEW_TAB, VIEW_DETAILS, API_DETAILS, SHARE } = MultiSelectMenuActionNames;
70 const msToggleFavoriteAction: MultiSelectMenuAction = {
71 name: ADD_TO_FAVORITES,
72 icon: AddFavoriteIcon,
74 altName: 'Remove from Favorites',
75 altIcon: RemoveFavoriteIcon,
77 useAlts: (uuid: string, iconProps) => {
78 return checkFavorite(uuid, iconProps.favorites);
80 execute: (dispatch, resources) => {
81 dispatch<any>(toggleFavorite(resources[0])).then(() => {
82 dispatch(favoritePanelActions.REQUEST_ITEMS());
87 const msOpenInNewTabMenuAction: MultiSelectMenuAction = {
88 name: OPEN_IN_NEW_TAB,
92 execute: (dispatch, resources) => {
93 dispatch<any>(openInNewTabAction(resources[0]));
97 const msViewDetailsAction: MultiSelectMenuAction = {
102 execute: (dispatch, resources) => {
103 dispatch<any>(toggleDetailsPanel(resources[0].uuid));
107 const msAdvancedAction: MultiSelectMenuAction = {
112 execute: (dispatch, resources) => {
113 dispatch<any>(openAdvancedTabDialog(resources[0].uuid));
117 const msShareAction: MultiSelectMenuAction = {
122 execute: (dispatch, resources) => {
123 dispatch<any>(openSharingDialog(resources[0].uuid));
127 const msTogglePublicFavoriteAction: MultiSelectMenuAction = {
128 name: ADD_TO_PUBLIC_FAVORITES,
129 icon: PublicFavoriteIcon,
131 altName: 'Remove from public favorites',
132 altIcon: PublicFavoriteIcon,
134 useAlts: (uuid: string, iconProps) => {
135 return iconProps.publicFavorites[uuid] === true
137 execute: (dispatch, resources) => {
138 dispatch<any>(togglePublicFavorite(resources[0])).then(() => {
139 dispatch(publicFavoritePanelActions.REQUEST_ITEMS());
144 export const msCommonActionSet = [
145 msToggleFavoriteAction,
146 msOpenInNewTabMenuAction,
150 msTogglePublicFavoriteAction