X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/a54f5270f980d4c2c6143b6654fb96a57b7bf46c..a950096809e19f48ec006651227222d60e4fa86c:/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 cf66a53d23..eabf41ae71 100644 --- a/src/store/context-menu/context-menu-actions.ts +++ b/src/store/context-menu/context-menu-actions.ts @@ -3,15 +3,16 @@ // SPDX-License-Identifier: AGPL-3.0 import { unionize, ofType, UnionOf } from '~/common/unionize'; -import { ContextMenuPosition, ContextMenuResource } from "./context-menu-reducer"; +import { ContextMenuPosition } from "./context-menu-reducer"; import { ContextMenuKind } from '~/views-components/context-menu/context-menu'; import { Dispatch } from 'redux'; import { RootState } from '~/store/store'; import { getResource } from '../resources/resources'; import { ProjectResource } from '~/models/project'; -import { UserResource } from '../../models/user'; +import { UserResource } from '~/models/user'; import { isSidePanelTreeCategory } from '~/store/side-panel-tree/side-panel-tree-actions'; import { extractUuidKind, ResourceKind } from '~/models/resource'; +import { matchProcessRoute } from '~/routes/routes'; export const contextMenuActions = unionize({ OPEN_CONTEXT_MENU: ofType<{ position: ContextMenuPosition, resource: ContextMenuResource }>(), @@ -20,7 +21,17 @@ export const contextMenuActions = unionize({ export type ContextMenuAction = UnionOf; -export const openContextMenu = (event: React.MouseEvent, resource: { name: string; uuid: string; description?: string; kind: ContextMenuKind; }) => +export type ContextMenuResource = { + name: string; + uuid: string; + ownerUuid: string; + description?: string; + kind: ResourceKind, + menuKind: ContextMenuKind; + isTrashed?: boolean; +}; + +export const openContextMenu = (event: React.MouseEvent, resource: ContextMenuResource) => (dispatch: Dispatch) => { event.preventDefault(); dispatch( @@ -33,24 +44,30 @@ export const openContextMenu = (event: React.MouseEvent, resource: export const openRootProjectContextMenu = (event: React.MouseEvent, projectUuid: string) => (dispatch: Dispatch, getState: () => RootState) => { - const userResource = getResource(projectUuid)(getState().resources); - if (userResource) { + const res = getResource(projectUuid)(getState().resources); + if (res) { dispatch(openContextMenu(event, { name: '', - uuid: userResource.uuid, - kind: ContextMenuKind.ROOT_PROJECT + uuid: res.uuid, + ownerUuid: res.uuid, + kind: res.kind, + menuKind: ContextMenuKind.ROOT_PROJECT, + isTrashed: false })); } }; export const openProjectContextMenu = (event: React.MouseEvent, projectUuid: string) => (dispatch: Dispatch, getState: () => RootState) => { - const projectResource = getResource(projectUuid)(getState().resources); - if (projectResource) { + const res = getResource(projectUuid)(getState().resources); + if (res) { dispatch(openContextMenu(event, { - name: projectResource.name, - uuid: projectResource.uuid, - kind: ContextMenuKind.PROJECT + name: res.name, + uuid: res.uuid, + kind: res.kind, + menuKind: ContextMenuKind.PROJECT, + ownerUuid: res.ownerUuid, + isTrashed: res.isTrashed })); } }; @@ -69,11 +86,17 @@ export const openSidePanelContextMenu = (event: React.MouseEvent, i export const openProcessContextMenu = (event: React.MouseEvent) => (dispatch: Dispatch, getState: () => RootState) => { + const { location } = getState().router; + const pathname = location ? location.pathname : ''; + const match = matchProcessRoute(pathname); + const uuid = match ? match.params.id : ''; const resource = { - uuid: '', + uuid, + ownerUuid: '', + kind: ResourceKind.PROCESS, name: '', description: '', - kind: ContextMenuKind.PROCESS + menuKind: ContextMenuKind.PROCESS }; dispatch(openContextMenu(event, resource)); }; @@ -85,6 +108,8 @@ export const resourceKindToContextMenuKind = (uuid: string) => { return ContextMenuKind.PROJECT; case ResourceKind.COLLECTION: return ContextMenuKind.COLLECTION_RESOURCE; + case ResourceKind.PROCESS: + return ContextMenuKind.PROCESS_RESOURCE; case ResourceKind.USER: return ContextMenuKind.ROOT_PROJECT; default: