X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/1d5fd6f8997bb6f06c8ed62dc01905566cbe135e..578c6026645cda9432f3386f29521075b8526609:/src/views-components/multiselect-toolbar/ms-project-action-set.ts diff --git a/src/views-components/multiselect-toolbar/ms-project-action-set.ts b/src/views-components/multiselect-toolbar/ms-project-action-set.ts index 8d58f413..9c0a4d88 100644 --- a/src/views-components/multiselect-toolbar/ms-project-action-set.ts +++ b/src/views-components/multiselect-toolbar/ms-project-action-set.ts @@ -2,55 +2,89 @@ // // SPDX-License-Identifier: AGPL-3.0 -import { DynamicContextMenuActionSet, DynamicContextMenuAction } from "views-components/context-menu/context-menu-action-set"; -import { MoveToIcon, Link } from "components/icon/icon"; -import { openMoveProjectDialog } from "store/projects/project-move-actions"; -import { ToggleTrashAction } from "views-components/context-menu/actions/trash-action"; -import { toggleProjectTrashed } from "store/trash/trash-actions"; -import { copyToClipboardAction } from "store/open-in-new-tab/open-in-new-tab.actions"; -import { ToggleFavoriteAction } from "views-components/context-menu/actions/favorite-action"; -import { toggleFavorite } from "store/favorites/favorites-actions"; -import { favoritePanelActions } from "store/favorite-panel/favorite-panel-action"; -import { AddFavoriteIcon, RemoveFavoriteIcon } from "components/icon/icon"; -import { RestoreFromTrashIcon, TrashIcon } from "components/icon/icon"; - - -export const msToggleFavoriteAction: DynamicContextMenuAction = { - name: "ToggleFavoriteAction", - defaultText: 'Add to Favorites', - altText: 'Remove from Favorites', - defaultIcon: AddFavoriteIcon, - altIcon: RemoveFavoriteIcon, +import { MultiSelectMenuAction, MultiSelectMenuActionSet, MultiSelectMenuActionNames, msCommonActionSet } from 'views-components/multiselect-toolbar/ms-menu-actions'; +import { openMoveProjectDialog } from 'store/projects/project-move-actions'; +import { toggleProjectTrashed } from 'store/trash/trash-actions'; +import { + FreezeIcon, + MoveToIcon, + NewProjectIcon, + RenameIcon, + UnfreezeIcon, +} from 'components/icon/icon'; +import { RestoreFromTrashIcon, TrashIcon, FolderSharedIcon, Link } from 'components/icon/icon'; +import { getResource } from 'store/resources/resources'; +import { openProjectCreateDialog } from 'store/projects/project-create-actions'; +import { openProjectUpdateDialog } from 'store/projects/project-update-actions'; +import { freezeProject, unfreezeProject } from 'store/projects/project-lock-actions'; +import { openWebDavS3InfoDialog } from 'store/collections/collection-info-actions'; +import { copyToClipboardAction } from 'store/open-in-new-tab/open-in-new-tab.actions'; +const { + ADD_TO_FAVORITES, + OPEN_IN_NEW_TAB, + COPY_TO_CLIPBOARD, + VIEW_DETAILS, + API_DETAILS, + OPEN_W_3RD_PARTY_CLIENT, + EDIT_PROJECT, + SHARE, + MOVE_TO, + ADD_TO_TRASH, + FREEZE_PROJECT, + NEW_PROJECT, +} = MultiSelectMenuActionNames; + +const msCopyToClipboardMenuAction: MultiSelectMenuAction = { + name: COPY_TO_CLIPBOARD, + icon: Link, + hasAlts: false, + isForMulti: false, execute: (dispatch, resources) => { - dispatch(toggleFavorite(resources[0])).then(() => { - dispatch(favoritePanelActions.REQUEST_ITEMS()); - }); + dispatch(copyToClipboardAction(resources)); }, }; -export const msCopyToClipboardMenuAction = { - icon: Link, - name: "Copy to clipboard", +const msEditProjectAction: MultiSelectMenuAction = { + name: EDIT_PROJECT, + icon: RenameIcon, + hasAlts: false, + isForMulti: false, execute: (dispatch, resources) => { - dispatch(copyToClipboardAction(resources)); + dispatch(openProjectUpdateDialog(resources[0])); }, }; -export const msMoveToAction = { +const msMoveToAction: MultiSelectMenuAction = { + name: MOVE_TO, icon: MoveToIcon, - name: "Move to", + hasAlts: false, + isForMulti: true, execute: (dispatch, resource) => { - dispatch(openMoveProjectDialog(resource[0])); + dispatch(openMoveProjectDialog(resource[0])); }, }; -export const msToggleTrashAction: DynamicContextMenuAction = { - name: "ToggleTrashAction", - defaultText: 'Add to Trash', - altText: 'Restore from Trash', - defaultIcon: TrashIcon, +const msOpenWith3rdPartyClientAction: MultiSelectMenuAction = { + name: OPEN_W_3RD_PARTY_CLIENT, + icon: FolderSharedIcon, + hasAlts: false, + isForMulti: false, + execute: (dispatch, resources) => { + dispatch(openWebDavS3InfoDialog(resources[0].uuid)); + }, +}; + +export const msToggleTrashAction: MultiSelectMenuAction = { + name: ADD_TO_TRASH, + icon: TrashIcon, + hasAlts: true, + altName: 'Restore from Trash', altIcon: RestoreFromTrashIcon, + isForMulti: true, + useAlts: (uuid, iconProps) => { + return uuid ? (getResource(uuid)(iconProps.resources) as any).isTrashed : false; + }, execute: (dispatch, resources) => { for (const resource of [...resources]) { dispatch(toggleProjectTrashed(resource.uuid, resource.ownerUuid, resource.isTrashed!!, resources.length > 1)); @@ -58,4 +92,62 @@ export const msToggleTrashAction: DynamicContextMenuAction = { }, }; -export const msProjectActionSet: DynamicContextMenuAction[][] = [[msCopyToClipboardMenuAction, msMoveToAction, msToggleTrashAction, msToggleFavoriteAction]]; +const msFreezeProjectAction: MultiSelectMenuAction = { + name: FREEZE_PROJECT, + icon: FreezeIcon, + hasAlts: true, + altName: 'Unfreeze Project', + altIcon: UnfreezeIcon, + isForMulti: false, + useAlts: (uuid, iconProps) => { + return uuid ? !!(getResource(uuid)(iconProps.resources) as any).frozenByUuid : false; + }, + execute: (dispatch, resources) => { + if ((resources[0] as any).frozenByUuid) { + dispatch(unfreezeProject(resources[0].uuid)); + } else { + dispatch(freezeProject(resources[0].uuid)); + } + }, +}; + +const msNewProjectAction: MultiSelectMenuAction = { + name: NEW_PROJECT, + icon: NewProjectIcon, + hasAlts: false, + isForMulti: false, + execute: (dispatch, resources): void => { + dispatch(openProjectCreateDialog(resources[0].uuid)); + }, +}; + +export const msProjectActionSet: MultiSelectMenuActionSet = [ + [ + ...msCommonActionSet, + msEditProjectAction, + msMoveToAction, + msToggleTrashAction, + msNewProjectAction, + msFreezeProjectAction, + msOpenWith3rdPartyClientAction, + msCopyToClipboardMenuAction + ], +]; + +export const msCommonProjectActionFilter = new Set([ + ADD_TO_FAVORITES, + ADD_TO_TRASH, + API_DETAILS, + COPY_TO_CLIPBOARD, + EDIT_PROJECT, + FREEZE_PROJECT, + MOVE_TO, + NEW_PROJECT, + OPEN_IN_NEW_TAB, + OPEN_W_3RD_PARTY_CLIENT, + SHARE, + VIEW_DETAILS, +]); +export const msReadOnlyProjectActionFilter = new Set([ADD_TO_FAVORITES, API_DETAILS, COPY_TO_CLIPBOARD, OPEN_IN_NEW_TAB, OPEN_W_3RD_PARTY_CLIENT, VIEW_DETAILS,]); +export const msFrozenProjectActionFilter = new Set([ADD_TO_FAVORITES, API_DETAILS, COPY_TO_CLIPBOARD, OPEN_IN_NEW_TAB, OPEN_W_3RD_PARTY_CLIENT, VIEW_DETAILS, SHARE, FREEZE_PROJECT]) +export const msFilterGroupActionFilter = new Set([ADD_TO_FAVORITES, API_DETAILS, COPY_TO_CLIPBOARD, OPEN_IN_NEW_TAB, OPEN_W_3RD_PARTY_CLIENT, VIEW_DETAILS, SHARE, ADD_TO_TRASH, EDIT_PROJECT, MOVE_TO]) \ No newline at end of file