Update models with groups, colelctions, workflows and processes
[arvados-workbench2.git] / src / services / groups-service / groups-service.ts
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import * as _ from "lodash";
6 import CommonResourceService, { Resource, ListResults } from "../../common/api/common-resource-service";
7 import FilterBuilder from "../../common/api/filter-builder";
8 import OrderBuilder from "../../common/api/order-builder";
9 import { AxiosInstance } from "axios";
10 import { GroupResource } from "../../models/group";
11 import { CollectionResource } from "../../models/collection";
12 import { ProjectResource } from "../../models/project";
13 import { WorkflowResource } from "../../models/workflow";
14 import { ProcessResource } from "../../models/process";
15
16 interface ContensArguments {
17     limit?: number;
18     offset?: number;
19     order?: OrderBuilder;
20     filters?: FilterBuilder;
21     recursive?: boolean;
22 }
23
24 export type GroupContentsResource =
25     CollectionResource |
26     ProjectResource |
27     WorkflowResource |
28     ProcessResource;
29
30 export default class GroupsService extends CommonResourceService<GroupResource> {
31
32     constructor(serverApi: AxiosInstance) {
33         super(serverApi, "groups");
34     }
35
36     contents(uuid: string, args: ContensArguments = {}): Promise<ListResults<GroupContentsResource>> {
37         const { filters, order, ...other } = args;
38         const params = {
39             ...other,
40             filters: filters ? filters.get() : undefined,
41             order: order ? order.getOrder() : undefined
42         };
43         return this.serverApi
44             .get(this.resourceType + `${uuid}/contents/`, {
45                 params: CommonResourceService.mapKeys(_.snakeCase)(params)
46             })
47             .then(CommonResourceService.mapResponseKeys);
48     }
49 }