//
// 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 { ProjectResource } from "models/project";
+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 = <T extends EditableResource & GroupResource>(id: string, userUuid?: string) =>
+export const getResourceWithEditableStatus = <T extends GroupResource & EditableResource>(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;