Merge branch 'master'
[arvados-workbench2.git] / src / services / project-service / project-service.ts
index f35ca9cd4102e7d5a97b515b910ab4c737301430..119cfece4b8fcb130fa69f4ec54304e2f7d270f5 100644 (file)
@@ -2,10 +2,12 @@
 //
 // SPDX-License-Identifier: AGPL-3.0
 
-import { serverApi } from "../../common/server-api";
+import { serverApi } from "../../common/api/server-api";
 import { Dispatch } from "redux";
 import actions from "../../store/project/project-action";
 import { Project } from "../../models/project";
+import UrlBuilder from "../../common/api/url-builder";
+import FilterBuilder, { FilterField } from "../../common/api/filter-builder";
 
 interface GroupsResponse {
     offset: number;
@@ -31,18 +33,29 @@ interface GroupsResponse {
 }
 
 export default class ProjectService {
-    public getTopProjectList = () => (dispatch: Dispatch) => {
-        dispatch(actions.TOP_PROJECTS_REQUEST());
-        serverApi.get<GroupsResponse>('/groups').then(groups => {
-            const projects = groups.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
-            } as Project));
-            dispatch(actions.TOP_PROJECTS_SUCCESS(projects));
-        });
+    public getProjectList = (parentUuid?: string) => (dispatch: Dispatch): Promise<Project[]> => {
+        dispatch(actions.PROJECTS_REQUEST(parentUuid));
+        if (parentUuid) {
+            const fb = new FilterBuilder();
+            fb.addLike(FilterField.OWNER_UUID, parentUuid);
+            return serverApi.get<GroupsResponse>('/groups', { params: {
+                filters: fb.get()
+            }}).then(groups => {
+                const projects = groups.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));
+                dispatch(actions.PROJECTS_SUCCESS({projects, parentItemId: parentUuid}));
+                return projects;
+            });
+        } else {
+            dispatch(actions.PROJECTS_SUCCESS({projects: [], parentItemId: parentUuid}));
+            return Promise.resolve([]);
+        }
     }
 }