-export class CommonResourceService<T> {
-
- static mapResponseKeys = (response: { data: any }) =>
- CommonResourceService.mapKeys(_.camelCase)(response.data)
-
- static mapKeys = (mapFn: (key: string) => string) =>
- (value: any): any => {
- switch (true) {
- case _.isPlainObject(value):
- return Object
- .keys(value)
- .map(key => [key, mapFn(key)])
- .reduce((newValue, [key, newKey]) => ({
- ...newValue,
- [newKey]: CommonResourceService.mapKeys(mapFn)(value[key])
- }), {});
- case _.isArray(value):
- return value.map(CommonResourceService.mapKeys(mapFn));
- default:
- return value;
- }
- }
-
- static defaultResponse<R>(promise: AxiosPromise<R>, actions: ApiActions, mapKeys = true): Promise<R> {
- const reqId = uuid();
- actions.progressFn(reqId, true);
- return promise
- .then(data => {
- actions.progressFn(reqId, false);
- return data;
- })
- .then((response: { data: any }) => {
- return mapKeys ? CommonResourceService.mapResponseKeys(response) : response.data;
- })
- .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 actions: ApiActions;
-
- constructor(serverApi: AxiosInstance, resourceType: string, actions: ApiActions) {
- this.serverApi = serverApi;
- this.resourceType = '/' + resourceType + '/';
- this.actions = actions;
+export class CommonResourceService<T extends Resource> extends CommonService<T> {
+ constructor(serverApi: AxiosInstance, resourceType: string, actions: ApiActions, readOnlyFields: string[] = []) {
+ super(serverApi, resourceType, actions, readOnlyFields.concat([
+ 'uuid',
+ 'etag',
+ 'kind'
+ ]));