bc34081811fdbbdd6aaa14437087ab82549a08fa
[arvados-workbench2.git] / src / services / project-service / project-service.ts
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import { serverApi } from "../../common/api/server-api";
6 import { Dispatch } from "redux";
7 import { Project } from "../../models/project";
8 import FilterBuilder, { FilterField } from "../../common/api/filter-builder";
9 import { ArvadosResource } from "../response";
10
11 interface GroupResource extends ArvadosResource {
12     name: string;
13     group_class: string;
14     description: string;
15     writable_by: string[];
16     delete_at: string;
17     trash_at: string;
18     is_trashed: boolean;
19 }
20
21 interface GroupsResponse {
22     offset: number;
23     limit: number;
24     items: GroupResource[];
25 }
26
27 export default class ProjectService {
28     public getProjectList = (parentUuid?: string): Promise<Project[]> => {
29         if (parentUuid) {
30             const fb = new FilterBuilder();
31             fb.addLike(FilterField.OWNER_UUID, parentUuid);
32             return serverApi.get<GroupsResponse>('/groups', { params: {
33                 filters: fb.get()
34             }}).then(resp => {
35                 const projects = resp.data.items.map(g => ({
36                     name: g.name,
37                     createdAt: g.created_at,
38                     modifiedAt: g.modified_at,
39                     href: g.href,
40                     uuid: g.uuid,
41                     ownerUuid: g.owner_uuid,
42                     kind: g.kind
43                 } as Project));
44                 return projects;
45             });
46         } else {
47             return Promise.resolve([]);
48         }
49     }
50 }