Add new conditions and concatenation to FilterBuilder
[arvados-workbench2.git] / src / services / collection-service / collection-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 FilterBuilder from "../../common/api/filter-builder";
7 import { ArvadosResource } from "../response";
8 import { Collection } from "../../models/collection";
9 import { getResourceKind } from "../../models/resource";
10
11 interface CollectionResource extends ArvadosResource {
12     name: string;
13     description: string;
14     properties: any;
15     portable_data_hash: string;
16     manifest_text: string;
17     replication_desired: number;
18     replication_confirmed: number;
19     replication_confirmed_at: string;
20     trash_at: string;
21     delete_at: string;
22     is_trashed: boolean;
23 }
24
25 interface CollectionsResponse {
26     offset: number;
27     limit: number;
28     items: CollectionResource[];
29 }
30
31 export default class CollectionService {
32     public getCollectionList = (parentUuid?: string): Promise<Collection[]> => {
33         if (parentUuid) {
34             const fb = new FilterBuilder();
35             fb.addLike("ownerUuid", parentUuid);
36             return serverApi.get<CollectionsResponse>('/collections', { params: {
37                 filters: fb.serialize()
38             }}).then(resp => {
39                 const collections = resp.data.items.map(g => ({
40                     name: g.name,
41                     createdAt: g.created_at,
42                     modifiedAt: g.modified_at,
43                     href: g.href,
44                     uuid: g.uuid,
45                     ownerUuid: g.owner_uuid,
46                     kind: getResourceKind(g.kind)
47                 } as Collection));
48                 return collections;
49             });
50         } else {
51             return Promise.resolve([]);
52         }
53     }
54 }