X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/ba0c5cf6838e36740881c4dd9639043b527bf82d..45d451dc2d78d82afbff32de5ee71d0734daf936:/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 86faf4b7..c394ea90 100644 --- a/src/views-components/multiselect-toolbar/ms-project-action-set.ts +++ b/src/views-components/multiselect-toolbar/ms-project-action-set.ts @@ -2,37 +2,152 @@ // // SPDX-License-Identifier: AGPL-3.0 -import { ContextMenuActionSet } 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"; - -export const msCopyToClipboardMenuAction = { +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, + MOVE_TO_TRASH, + FREEZE_PROJECT, + NEW_PROJECT, +} = MultiSelectMenuActionNames; + +const msCopyToClipboardMenuAction: MultiSelectMenuAction = { + name: COPY_TO_CLIPBOARD, icon: Link, - name: "Copy to clipboard", + hasAlts: false, + isForMulti: false, + execute: (dispatch, resources) => { + dispatch(copyToClipboardAction(resources)); + }, +}; + +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 = { - component: ToggleTrashAction, - name: "ToggleTrashAction", +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: MOVE_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)); + for (const resource of [...resources]) { + dispatch(toggleProjectTrashed(resource.uuid, resource.ownerUuid, resource.isTrashed!!, resources.length > 1)); } }, }; -export const msProjectActionSet: ContextMenuActionSet = [[msCopyToClipboardMenuAction, msMoveToAction, msToggleTrashAction]]; +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, + MOVE_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, MOVE_TO_TRASH, EDIT_PROJECT, MOVE_TO]) \ No newline at end of file