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