1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 import { CancelToken } from 'axios';
6 import { snakeCase, camelCase } from "lodash";
7 import { CommonResourceService } from 'services/common-service/common-resource-service';
8 import { ListResults, ListArguments } from 'services/common-service/common-service';
9 import { AxiosInstance, AxiosRequestConfig } from "axios";
10 import { CollectionResource } from "models/collection";
11 import { ProjectResource } from "models/project";
12 import { ProcessResource } from "models/process";
13 import { WorkflowResource } from "models/workflow";
14 import { TrashableResourceService } from "services/common-service/trashable-resource-service";
15 import { ApiActions } from "services/api/api-actions";
16 import { GroupResource } from "models/group";
17 import { Session } from "models/session";
19 export interface ContentsArguments {
25 includeTrash?: boolean;
26 excludeHomeProject?: boolean;
29 export interface SharedArguments extends ListArguments {
33 export type GroupContentsResource =
39 export class GroupsService<T extends GroupResource = GroupResource> extends TrashableResourceService<T> {
41 constructor(serverApi: AxiosInstance, actions: ApiActions) {
42 super(serverApi, "groups", actions);
45 async contents(uuid: string, args: ContentsArguments = {}, session?: Session, cancelToken?: CancelToken): Promise<ListResults<GroupContentsResource>> {
46 const { filters, order, ...other } = args;
49 filters: filters ? `[${filters}]` : undefined,
50 order: order ? order : undefined
52 const pathUrl = uuid ? `/${uuid}/contents` : '/contents';
54 const cfg: AxiosRequestConfig = { params: CommonResourceService.mapKeys(snakeCase)(params) };
56 cfg.baseURL = session.baseUrl;
57 cfg.headers = { 'Authorization': 'Bearer ' + session.token };
61 cfg.cancelToken = cancelToken;
64 const response = await CommonResourceService.defaultResponse(
65 this.serverApi.get(this.resourceType + pathUrl, cfg), this.actions, false
68 return { ...TrashableResourceService.mapKeys(camelCase)(response), clusterId: session && session.clusterId };
71 shared(params: SharedArguments = {}): Promise<ListResults<GroupContentsResource>> {
72 return CommonResourceService.defaultResponse(
74 .get(this.resourceType + '/shared', { params }),
80 export enum GroupContentsResourcePrefix {
81 COLLECTION = "collections",
83 PROCESS = "container_requests",
84 WORKFLOW = "workflows"