Added central action for navigation
[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 import { getResourceKind } from "../../models/resource";
11
12 interface GroupResource extends ArvadosResource {
13     name: string;
14     group_class: string;
15     description: string;
16     writable_by: string[];
17     delete_at: string;
18     trash_at: string;
19     is_trashed: boolean;
20 }
21
22 interface GroupsResponse {
23     offset: number;
24     limit: number;
25     items: GroupResource[];
26 }
27
28 export default class ProjectService {
29     public getProjectList = (parentUuid?: string): Promise<Project[]> => {
30         if (parentUuid) {
31             const fb = new FilterBuilder();
32             fb.addLike(FilterField.OWNER_UUID, parentUuid);
33             return serverApi.get<GroupsResponse>('/groups', { params: {
34                 filters: fb.get()
35             }}).then(resp => {
36                 const projects = resp.data.items.map(g => ({
37                     name: g.name,
38                     createdAt: g.created_at,
39                     modifiedAt: g.modified_at,
40                     href: g.href,
41                     uuid: g.uuid,
42                     ownerUuid: g.owner_uuid,
43                     kind: getResourceKind(g.kind)
44                 } as Project));
45                 return projects;
46             });
47         } else {
48             return Promise.resolve([]);
49         }
50     }
51 }