X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/825ea4fce4ba3568f6105c17e83f4769a9323759..f63db3e0224e57695adb2c5fa975586065f6669f:/src/store/resources/resources.ts diff --git a/src/store/resources/resources.ts b/src/store/resources/resources.ts index 915235d1ec..bf82fac12d 100644 --- a/src/store/resources/resources.ts +++ b/src/store/resources/resources.ts @@ -2,52 +2,24 @@ // // SPDX-License-Identifier: AGPL-3.0 -import { Resource, EditableResource } from "~/models/resource"; -import { ResourceKind } from '~/models/resource'; -import { ProjectResource } from "~/models/project"; -import { GroupResource } from "~/models/group"; -import { extractUuidObjectType, ResourceObjectType } from "~/models/resource"; -import { GroupClass } from '~/models/group'; +import { Resource, EditableResource } from "models/resource"; +import { ResourceKind } from 'models/resource'; +import { GroupResource } from "models/group"; export type ResourcesState = { [key: string]: Resource }; -const getResourceWritableBy = (state: ResourcesState, id: string, userUuid: string): string[] => { - if (!id) { - return []; - } - - if (id === userUuid) { - return [userUuid]; - } - - const resource = (state[id] as ProjectResource); - - if (!resource) { - return []; - } - - const { writableBy } = resource; - - return writableBy || getResourceWritableBy(state, resource.ownerUuid, userUuid); -}; - -export const getResourceWithEditableStatus = (id: string, userUuid?: string) => +export const getResourceWithEditableStatus = (id: string, userUuid?: string) => (state: ResourcesState): T | undefined => { if (state[id] === undefined) { return; } - const resource = JSON.parse(JSON.stringify(state[id] as T)); + const resource = JSON.parse(JSON.stringify(state[id])) as T; if (resource) { - const objectType = extractUuidObjectType(resource.uuid); - switch (objectType) { - case ResourceObjectType.GROUP: - // filter groups are read-only for now - if (resource.groupClass === GroupClass.FILTER) { - resource.isEditable = false; - return resource; - } + if (resource.canWrite === undefined) { + resource.isEditable = (state[resource.ownerUuid] as GroupResource)?.canWrite; + } else { + resource.isEditable = resource.canWrite; } - resource.isEditable = userUuid ? getResourceWritableBy(state, id, userUuid).indexOf(userUuid) > -1 : false; } return resource;