X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/38d27e9783f7f760cee84cc225e86144069848c4..c48d10802d4ae95273f8b98e622e5df200cdc3a7:/src/services/common-service/common-service.ts diff --git a/src/services/common-service/common-service.ts b/src/services/common-service/common-service.ts index 82777342..f16a2024 100644 --- a/src/services/common-service/common-service.ts +++ b/src/services/common-service/common-service.ts @@ -3,10 +3,11 @@ // SPDX-License-Identifier: AGPL-3.0 import { camelCase, isPlainObject, isArray, snakeCase } from "lodash"; -import { AxiosInstance, AxiosPromise } from "axios"; +import { AxiosInstance, AxiosPromise, AxiosRequestConfig } from "axios"; import uuid from "uuid/v4"; import { ApiActions } from "services/api/api-actions"; import QueryString from "query-string"; +import { Session } from "models/session"; interface Errors { status: number; @@ -68,7 +69,7 @@ export class CommonService { } } - private validateUuid(uuid: string) { + protected validateUuid(uuid: string) { if (uuid === "") { throw new Error('UUID cannot be empty string'); } @@ -113,29 +114,45 @@ export class CommonService { ); } - get(uuid: string, showErrors?: boolean) { + get(uuid: string, showErrors?: boolean, select?: string[], session?: Session) { this.validateUuid(uuid); + + const cfg: AxiosRequestConfig = { + params: { + select: select + ? `[${select.map(snakeCase).map(s => `"${s}"`).join(',')}]` + : undefined + } + }; + if (session) { + cfg.baseURL = session.baseUrl; + cfg.headers = { 'Authorization': 'Bearer ' + session.token }; + } + return CommonService.defaultResponse( this.serverApi - .get(`/${this.resourceType}/${uuid}`), + .get(`/${this.resourceType}/${uuid}`, cfg), this.actions, true, // mapKeys showErrors ); } - list(args: ListArguments = {}): Promise> { - const { filters, order, ...other } = args; + list(args: ListArguments = {}, showErrors?: boolean): Promise> { + const { filters, select, ...other } = args; const params = { ...CommonService.mapKeys(snakeCase)(other), filters: filters ? `[${filters}]` : undefined, - order: order ? order : undefined + select: select + ? `[${select.map(snakeCase).map(s => `"${s}"`).join(', ')}]` + : undefined }; if (QueryString.stringify(params).length <= 1500) { return CommonService.defaultResponse( this.serverApi.get(`/${this.resourceType}`, { params }), - this.actions + this.actions, + showErrors ); } else { // Using the POST special case to avoid URI length 414 errors. @@ -152,7 +169,8 @@ export class CommonService { _method: 'GET' } }), - this.actions + this.actions, + showErrors ); } }