Merge branch '17426-plug-ins' refs #17426
[arvados-workbench2.git] / src / services / project-service / project-service.ts
index bc34081811fdbbdd6aaa14437087ab82549a08fa..515571e7d2a04113199530543eda3312d0dcd16b 100644 (file)
@@ -2,49 +2,27 @@
 //
 // SPDX-License-Identifier: AGPL-3.0
 
-import { serverApi } from "../../common/api/server-api";
-import { Dispatch } from "redux";
-import { Project } from "../../models/project";
-import FilterBuilder, { FilterField } from "../../common/api/filter-builder";
-import { ArvadosResource } from "../response";
+import { GroupsService } from "../groups-service/groups-service";
+import { ProjectResource } from "~/models/project";
+import { GroupClass } from "~/models/group";
+import { ListArguments } from "~/services/common-service/common-service";
+import { FilterBuilder, joinFilters } from "~/services/api/filter-builder";
+export class ProjectService extends GroupsService<ProjectResource> {
 
-interface GroupResource extends ArvadosResource {
-    name: string;
-    group_class: string;
-    description: string;
-    writable_by: string[];
-    delete_at: string;
-    trash_at: string;
-    is_trashed: boolean;
-}
-
-interface GroupsResponse {
-    offset: number;
-    limit: number;
-    items: GroupResource[];
-}
+    create(data: Partial<ProjectResource>) {
+        const projectData = { ...data, groupClass: GroupClass.PROJECT };
+        return super.create(projectData);
+    }
 
-export default class ProjectService {
-    public getProjectList = (parentUuid?: string): Promise<Project[]> => {
-        if (parentUuid) {
-            const fb = new FilterBuilder();
-            fb.addLike(FilterField.OWNER_UUID, parentUuid);
-            return serverApi.get<GroupsResponse>('/groups', { params: {
-                filters: fb.get()
-            }}).then(resp => {
-                const projects = resp.data.items.map(g => ({
-                    name: g.name,
-                    createdAt: g.created_at,
-                    modifiedAt: g.modified_at,
-                    href: g.href,
-                    uuid: g.uuid,
-                    ownerUuid: g.owner_uuid,
-                    kind: g.kind
-                } as Project));
-                return projects;
-            });
-        } else {
-            return Promise.resolve([]);
-        }
+    list(args: ListArguments = {}) {
+        return super.list({
+            ...args,
+            filters: joinFilters(
+                args.filters || '',
+                new FilterBuilder()
+                    .addIn('group_class', [GroupClass.PROJECT, GroupClass.FILTER])
+                    .getFilters()
+            )
+        });
     }
 }