X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/46751b9305a7e991d484494facd1f40790254d40..d8b6d772739992431b81de993f8adc783b00feb1:/src/store/resources/resources.ts diff --git a/src/store/resources/resources.ts b/src/store/resources/resources.ts index 4fec02a5d5..3f71140497 100644 --- a/src/store/resources/resources.ts +++ b/src/store/resources/resources.ts @@ -2,16 +2,36 @@ // // SPDX-License-Identifier: AGPL-3.0 -import { ResourceTypes } from "~/models/resource"; -import { ResourceKind } from '~/models/resource'; +import { Resource, EditableResource } from "models/resource"; +import { ResourceKind } from 'models/resource'; +import { ProjectResource } from "models/project"; +import { GroupResource } from "models/group"; -export type ResourcesState = { [key: string]: ResourceTypes }; +export type ResourcesState = { [key: string]: Resource }; -export const getResource = (id: 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)); + + if (resource) { + resource.isEditable = resource.canWrite; + + if (!resource.isEditable && state[resource.ownerUuid]) { + const resourceOwner = JSON.parse(JSON.stringify(state[resource.ownerUuid] as T)); + resource.isEditable = resourceOwner.canWrite; + } + } + + return resource; + }; + +export const getResource = (id: string) => (state: ResourcesState): T | undefined => state[id] as T; -export const setResource = (id: string, data: T) => +export const setResource = (id: string, data: T) => (state: ResourcesState) => ({ ...state, [id]: data @@ -24,7 +44,7 @@ export const deleteResource = (id: string) => return newState; }; -export const filterResources = (filter: (resource: ResourceTypes) => boolean) => +export const filterResources = (filter: (resource: Resource) => boolean) => (state: ResourcesState) => Object .keys(state)