X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/f63f3a5360ae6381d4b332bf86ef52b4e22107fb..e4b54c3b5d99c99553e319ead28c3aa8dcd6eecc:/src/store/context-menu/context-menu-actions.ts?ds=sidebyside diff --git a/src/store/context-menu/context-menu-actions.ts b/src/store/context-menu/context-menu-actions.ts index a1ed6c5536..596ac87b09 100644 --- a/src/store/context-menu/context-menu-actions.ts +++ b/src/store/context-menu/context-menu-actions.ts @@ -3,7 +3,7 @@ // 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'; @@ -12,6 +12,8 @@ import { ProjectResource } from '~/models/project'; import { UserResource } from '~/models/user'; import { isSidePanelTreeCategory } from '~/store/side-panel-tree/side-panel-tree-actions'; import { extractUuidKind, ResourceKind } from '~/models/resource'; +import { Process } from '~/store/processes/process'; +import { RepositoryResource } from '~/models/repositories'; export const contextMenuActions = unionize({ OPEN_CONTEXT_MENU: ofType<{ position: ContextMenuPosition, resource: ContextMenuResource }>(), @@ -25,21 +27,52 @@ export type ContextMenuResource = { uuid: string; ownerUuid: string; description?: string; - kind: ContextMenuKind; + kind: ResourceKind, + menuKind: ContextMenuKind; isTrashed?: boolean; -} - + index?: number +}; +export const isKeyboardClick = (event: React.MouseEvent) => + event.nativeEvent.detail === 0; export const openContextMenu = (event: React.MouseEvent, resource: ContextMenuResource) => (dispatch: Dispatch) => { event.preventDefault(); + const { left, top } = event.currentTarget.getBoundingClientRect(); dispatch( contextMenuActions.OPEN_CONTEXT_MENU({ - position: { x: event.clientX, y: event.clientY }, + position: { + x: event.clientX || left, + y: event.clientY || top, + }, resource }) ); }; +export const openCollectionFilesContextMenu = (event: React.MouseEvent) => + (dispatch: Dispatch, getState: () => RootState) => { + const isCollectionFileSelected = JSON.stringify(getState().collectionPanelFiles).includes('"selected":true'); + dispatch(openContextMenu(event, { + name: '', + uuid: '', + ownerUuid: '', + kind: ResourceKind.COLLECTION, + menuKind: isCollectionFileSelected ? ContextMenuKind.COLLECTION_FILES : ContextMenuKind.COLLECTION_FILES_NOT_SELECTED + })); + }; + +export const openRepositoryContextMenu = (event: React.MouseEvent, index: number, repository: RepositoryResource) => + (dispatch: Dispatch, getState: () => RootState) => { + dispatch(openContextMenu(event, { + name: '', + uuid: repository.uuid, + ownerUuid: repository.ownerUuid, + kind: ResourceKind.REPOSITORY, + menuKind: ContextMenuKind.REPOSITORY, + index + })); + }; + export const openRootProjectContextMenu = (event: React.MouseEvent, projectUuid: string) => (dispatch: Dispatch, getState: () => RootState) => { const res = getResource(projectUuid)(getState().resources); @@ -48,7 +81,8 @@ export const openRootProjectContextMenu = (event: React.MouseEvent, name: '', uuid: res.uuid, ownerUuid: res.uuid, - kind: ContextMenuKind.ROOT_PROJECT, + kind: res.kind, + menuKind: ContextMenuKind.ROOT_PROJECT, isTrashed: false })); } @@ -61,7 +95,8 @@ export const openProjectContextMenu = (event: React.MouseEvent, pro dispatch(openContextMenu(event, { name: res.name, uuid: res.uuid, - kind: ContextMenuKind.PROJECT, + kind: res.kind, + menuKind: ContextMenuKind.PROJECT, ownerUuid: res.ownerUuid, isTrashed: res.isTrashed })); @@ -80,13 +115,15 @@ export const openSidePanelContextMenu = (event: React.MouseEvent, i } }; -export const openProcessContextMenu = (event: React.MouseEvent) => +export const openProcessContextMenu = (event: React.MouseEvent, process: Process) => (dispatch: Dispatch, getState: () => RootState) => { const resource = { - uuid: '', + uuid: process.containerRequest.uuid, + ownerUuid: '', + kind: ResourceKind.PROCESS, name: '', description: '', - kind: ContextMenuKind.PROCESS + menuKind: ContextMenuKind.PROCESS }; dispatch(openContextMenu(event, resource)); }; @@ -98,6 +135,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: