X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/416d4f0f57336b2225bcc82b0f4db8873adf8cd2..1b7a371a20a0ce0f4811e1b58222f1d837b62337:/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 9a8733ba..d098823d 100644 --- a/src/store/context-menu/context-menu-actions.ts +++ b/src/store/context-menu/context-menu-actions.ts @@ -21,6 +21,7 @@ import { CollectionResource } from 'models/collection'; import { GroupClass, GroupResource } from 'models/group'; import { GroupContentsResource } from 'services/groups-service/groups-service'; import { LinkResource } from 'models/link'; +import { resourceIsFrozen } from 'common/frozen-resources'; export const contextMenuActions = unionize({ OPEN_CONTEXT_MENU: ofType<{ position: ContextMenuPosition, resource: ContextMenuResource }>(), @@ -40,7 +41,10 @@ export type ContextMenuResource = { isEditable?: boolean; outputUuid?: string; workflowUuid?: string; + isAdmin?: boolean; + isFrozen?: boolean; storageClassesDesired?: string[]; + properties?: { [key: string]: string | string[] }; }; export const isKeyboardClick = (event: React.MouseEvent) => event.nativeEvent.detail === 0; @@ -188,8 +192,8 @@ export const openProcessContextMenu = (event: React.MouseEvent, pro name: res.name, description: res.description, outputUuid: res.outputUuid || '', - workflowUuid: res.properties.workflowUuid || '', - menuKind: ContextMenuKind.PROCESS + workflowUuid: res.properties.template_uuid || '', + menuKind: ContextMenuKind.PROCESS_RESOURCE })); } }; @@ -207,15 +211,31 @@ export const openPermissionEditContextMenu = (event: React.MouseEvent, user: UserResource) => + (dispatch: Dispatch, getState: () => RootState) => { + dispatch(openContextMenu(event, { + name: '', + uuid: user.uuid, + ownerUuid: user.ownerUuid, + kind: user.kind, + menuKind: ContextMenuKind.USER + })); + }; + export const resourceUuidToContextMenuKind = (uuid: string, readonly = false) => (dispatch: Dispatch, getState: () => RootState) => { const { isAdmin: isAdminUser, uuid: userUuid } = getState().auth.user!; const kind = extractUuidKind(uuid); const resource = getResourceWithEditableStatus(uuid, userUuid)(getState().resources); + const isFrozen = resourceIsFrozen(resource, getState().resources); + const isEditable = (isAdminUser || (resource || {} as EditableResource).isEditable) && !readonly && !isFrozen; - const isEditable = (isAdminUser || (resource || {} as EditableResource).isEditable) && !readonly; switch (kind) { case ResourceKind.PROJECT: + if (isFrozen) { + return isAdminUser ? ContextMenuKind.FROZEN_PROJECT_ADMIN : ContextMenuKind.FROZEN_PROJECT; + } + return (isAdminUser && !readonly) ? (resource && resource.groupClass !== GroupClass.FILTER) ? ContextMenuKind.PROJECT_ADMIN @@ -234,13 +254,13 @@ export const resourceUuidToContextMenuKind = (uuid: string, readonly = false) => ? ContextMenuKind.OLD_VERSION_COLLECTION : (isTrashed && isEditable) ? ContextMenuKind.TRASHED_COLLECTION - : (isAdminUser && !readonly) + : (isAdminUser && isEditable) ? ContextMenuKind.COLLECTION_ADMIN : isEditable ? ContextMenuKind.COLLECTION : ContextMenuKind.READONLY_COLLECTION; case ResourceKind.PROCESS: - return (isAdminUser && !readonly) + return (isAdminUser && isEditable) ? ContextMenuKind.PROCESS_ADMIN : readonly ? ContextMenuKind.READONLY_PROCESS_RESOURCE @@ -249,6 +269,8 @@ export const resourceUuidToContextMenuKind = (uuid: string, readonly = false) => return ContextMenuKind.ROOT_PROJECT; case ResourceKind.LINK: return ContextMenuKind.LINK; + case ResourceKind.WORKFLOW: + return ContextMenuKind.WORKFLOW; default: return; }