projects
/
arvados.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
refs #14161 Merge branch 'origin/14161-inputs-focus-enter-action'
[arvados.git]
/
src
/
services
/
common-service
/
common-resource-service.ts
diff --git
a/src/services/common-service/common-resource-service.ts
b/src/services/common-service/common-resource-service.ts
index 7b36b71cf42d7ce6ba289712eac1f2955b047ec4..f6810c0453b183a1db0847fe127a8dd607004d41 100644
(file)
--- a/
src/services/common-service/common-resource-service.ts
+++ b/
src/services/common-service/common-resource-service.ts
@@
-5,6
+5,8
@@
import * as _ from "lodash";
import { AxiosInstance, AxiosPromise } from "axios";
import { Resource } from "src/models/resource";
import * as _ from "lodash";
import { AxiosInstance, AxiosPromise } from "axios";
import { Resource } from "src/models/resource";
+import * as uuid from "uuid/v4";
+import { ApiActions } from "~/services/api/api-actions";
export interface ListArguments {
limit?: number;
export interface ListArguments {
limit?: number;
@@
-32,13
+34,14
@@
export interface Errors {
export enum CommonResourceServiceError {
UNIQUE_VIOLATION = 'UniqueViolation',
OWNERSHIP_CYCLE = 'OwnershipCycle',
export enum CommonResourceServiceError {
UNIQUE_VIOLATION = 'UniqueViolation',
OWNERSHIP_CYCLE = 'OwnershipCycle',
+ MODIFYING_CONTAINER_REQUEST_FINAL_STATE = 'ModifyingContainerRequestFinalState',
UNKNOWN = 'Unknown',
NONE = 'None'
}
export class CommonResourceService<T extends Resource> {
UNKNOWN = 'Unknown',
NONE = 'None'
}
export class CommonResourceService<T extends Resource> {
- static mapResponseKeys = (response: { data: any })
: Promise<any>
=>
+ static mapResponseKeys = (response: { data: any }) =>
CommonResourceService.mapKeys(_.camelCase)(response.data)
static mapKeys = (mapFn: (key: string) => string) =>
CommonResourceService.mapKeys(_.camelCase)(response.data)
static mapKeys = (mapFn: (key: string) => string) =>
@@
-59,36
+62,55
@@
export class CommonResourceService<T extends Resource> {
}
}
}
}
- static defaultResponse<R>(promise: AxiosPromise<R>): Promise<R> {
+ static defaultResponse<R>(promise: AxiosPromise<R>, actions: ApiActions): Promise<R> {
+ const reqId = uuid();
+ actions.progressFn(reqId, true);
return promise
return promise
+ .then(data => {
+ actions.progressFn(reqId, false);
+ return data;
+ })
.then(CommonResourceService.mapResponseKeys)
.then(CommonResourceService.mapResponseKeys)
- .catch(({ response }) => Promise.reject<Errors>(CommonResourceService.mapResponseKeys(response)));
+ .catch(({ response }) => {
+ actions.progressFn(reqId, false);
+ const errors = CommonResourceService.mapResponseKeys(response) as Errors;
+ actions.errorFn(reqId, errors);
+ throw errors;
+ });
}
protected serverApi: AxiosInstance;
protected resourceType: string;
}
protected serverApi: AxiosInstance;
protected resourceType: string;
+ protected actions: ApiActions;
- constructor(serverApi: AxiosInstance, resourceType: string) {
+ constructor(serverApi: AxiosInstance, resourceType: string
, actions: ApiActions
) {
this.serverApi = serverApi;
this.resourceType = '/' + resourceType + '/';
this.serverApi = serverApi;
this.resourceType = '/' + resourceType + '/';
+ this.actions = actions;
}
create(data?: Partial<T> | any) {
return CommonResourceService.defaultResponse(
this.serverApi
}
create(data?: Partial<T> | any) {
return CommonResourceService.defaultResponse(
this.serverApi
- .post<T>(this.resourceType, data && CommonResourceService.mapKeys(_.snakeCase)(data)));
+ .post<T>(this.resourceType, data && CommonResourceService.mapKeys(_.snakeCase)(data)),
+ this.actions
+ );
}
delete(uuid: string): Promise<T> {
return CommonResourceService.defaultResponse(
this.serverApi
}
delete(uuid: string): Promise<T> {
return CommonResourceService.defaultResponse(
this.serverApi
- .delete(this.resourceType + uuid));
+ .delete(this.resourceType + uuid),
+ this.actions
+ );
}
get(uuid: string) {
return CommonResourceService.defaultResponse(
this.serverApi
}
get(uuid: string) {
return CommonResourceService.defaultResponse(
this.serverApi
- .get<T>(this.resourceType + uuid));
+ .get<T>(this.resourceType + uuid),
+ this.actions
+ );
}
list(args: ListArguments = {}): Promise<ListResults<T>> {
}
list(args: ListArguments = {}): Promise<ListResults<T>> {
@@
-102,14
+124,17
@@
export class CommonResourceService<T extends Resource> {
this.serverApi
.get(this.resourceType, {
params: CommonResourceService.mapKeys(_.snakeCase)(params)
this.serverApi
.get(this.resourceType, {
params: CommonResourceService.mapKeys(_.snakeCase)(params)
- }));
+ }),
+ this.actions
+ );
}
update(uuid: string, data: Partial<T>) {
return CommonResourceService.defaultResponse(
this.serverApi
}
update(uuid: string, data: Partial<T>) {
return CommonResourceService.defaultResponse(
this.serverApi
- .put<T>(this.resourceType + uuid, data && CommonResourceService.mapKeys(_.snakeCase)(data)));
-
+ .put<T>(this.resourceType + uuid, data && CommonResourceService.mapKeys(_.snakeCase)(data)),
+ this.actions
+ );
}
}
}
}
@@
-121,6
+146,8
@@
export const getCommonResourceServiceError = (errorResponse: any) => {
return CommonResourceServiceError.UNIQUE_VIOLATION;
case /ownership cycle/.test(error):
return CommonResourceServiceError.OWNERSHIP_CYCLE;
return CommonResourceServiceError.UNIQUE_VIOLATION;
case /ownership cycle/.test(error):
return CommonResourceServiceError.OWNERSHIP_CYCLE;
+ case /Mounts cannot be modified in state 'Final'/.test(error):
+ return CommonResourceServiceError.MODIFYING_CONTAINER_REQUEST_FINAL_STATE;
default:
return CommonResourceServiceError.UNKNOWN;
}
default:
return CommonResourceServiceError.UNKNOWN;
}