X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/15469ba0284ac7d26de058cff4ae4e6ce6abc74f..6796b44d4934ddff098e1bfcf7b842ec11e4e210:/src/store/context-menu/context-menu-actions.ts diff --git a/src/store/context-menu/context-menu-actions.ts b/src/store/context-menu/context-menu-actions.ts index f846d25b..4cad2962 100644 --- a/src/store/context-menu/context-menu-actions.ts +++ b/src/store/context-menu/context-menu-actions.ts @@ -11,7 +11,7 @@ import { getResource, getResourceWithEditableStatus } from "../resources/resourc import { UserResource } from "models/user"; import { isSidePanelTreeCategory } from "store/side-panel-tree/side-panel-tree-actions"; import { extractUuidKind, ResourceKind, EditableResource, Resource } from "models/resource"; -import { Process } from "store/processes/process"; +import { Process, isProcessCancelable } from "store/processes/process"; import { RepositoryResource } from "models/repositories"; import { SshKeyResource } from "models/ssh-key"; import { VirtualMachinesResource } from "models/virtual-machines"; @@ -23,6 +23,7 @@ import { GroupContentsResource } from "services/groups-service/groups-service"; import { LinkResource } from "models/link"; import { resourceIsFrozen } from "common/frozen-resources"; import { ProjectResource } from "models/project"; +import { getProcess } from "store/processes/process"; import { filterCollectionFilesBySelection } from "store/collection-panel/collection-panel-files/collection-panel-files-state"; export const contextMenuActions = unionize({ @@ -69,6 +70,7 @@ export const openContextMenu = (event: React.MouseEvent, resource: export const openCollectionFilesContextMenu = (event: React.MouseEvent, isWritable: boolean) => (dispatch: Dispatch, getState: () => RootState) => { + const isCollectionFileSelected = JSON.stringify(getState().collectionPanelFiles).includes('"selected":true'); const selectedCount = filterCollectionFilesBySelection(getState().collectionPanelFiles, true).length; const multiple = selectedCount > 1; dispatch( @@ -220,6 +222,25 @@ export const openProcessContextMenu = (event: React.MouseEvent, pro } }; +export const openRunningProcessContextMenu = + (event: React.MouseEvent, process: Process) => (dispatch: Dispatch, getState: () => RootState) => { + const res = getResource(process.containerRequest.uuid)(getState().resources); + if (res) { + dispatch( + openContextMenu(event, { + uuid: res.uuid, + ownerUuid: res.ownerUuid, + kind: ResourceKind.PROCESS, + name: res.name, + description: res.description, + outputUuid: res.outputUuid || "", + workflowUuid: res.properties.template_uuid || "", + menuKind: ContextMenuKind.RUNNING_PROCESS_RESOURCE, + }) + ); + } + }; + export const openPermissionEditContextMenu = (event: React.MouseEvent, link: LinkResource) => (dispatch: Dispatch, getState: () => RootState) => { if (link) { @@ -289,9 +310,13 @@ export const resourceUuidToContextMenuKind = : ContextMenuKind.READONLY_COLLECTION; case ResourceKind.PROCESS: return isAdminUser && isEditable - ? ContextMenuKind.PROCESS_ADMIN + ? resource && isProcessCancelable(getProcess(resource.uuid)(getState().resources) as Process) + ? ContextMenuKind.RUNNING_PROCESS_ADMIN + : ContextMenuKind.PROCESS_ADMIN : readonly ? ContextMenuKind.READONLY_PROCESS_RESOURCE + : resource && isProcessCancelable(getProcess(resource.uuid)(getState().resources) as Process) + ? ContextMenuKind.RUNNING_PROCESS_RESOURCE : ContextMenuKind.PROCESS_RESOURCE; case ResourceKind.USER: return ContextMenuKind.ROOT_PROJECT;