// 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;
return mapKeys ? CommonService.mapResponseKeys(response) : response.data;
})
.catch(({ response }) => {
- actions.progressFn(reqId, false);
- const errors = CommonService.mapResponseKeys(response) as Errors;
- errors.status = response.status;
- actions.errorFn(reqId, errors, showErrors);
- throw errors;
+ if (response) {
+ actions.progressFn(reqId, false);
+ const errors = CommonService.mapResponseKeys(response) as Errors;
+ errors.status = response.status;
+ actions.errorFn(reqId, errors, showErrors);
+ throw errors;
+ }
});
}
);
}
- delete(uuid: string): Promise<T> {
+ delete(uuid: string, showErrors?: boolean): Promise<T> {
this.validateUuid(uuid);
return CommonService.defaultResponse(
this.serverApi
.delete(`/${this.resourceType}/${uuid}`),
- this.actions
+ this.actions,
+ true, // mapKeys
+ showErrors
);
}
- 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<T>(`/${this.resourceType}/${uuid}`),
+ .get<T>(`/${this.resourceType}/${uuid}`, cfg),
this.actions,
true, // mapKeys
showErrors
return CommonService.defaultResponse(
this.serverApi.get(`/${this.resourceType}`, { params }),
this.actions,
+ true,
showErrors
);
} else {
// Using the POST special case to avoid URI length 414 errors.
- const formData = new FormData();
+ // We must use urlencoded post body since api doesn't support form data
+ // const formData = new FormData();
+ const formData = new URLSearchParams();
formData.append("_method", "GET");
Object.keys(params).forEach(key => {
if (params[key] !== undefined) {
}
});
return CommonService.defaultResponse(
- this.serverApi.post(`/${this.resourceType}`, formData, {
- params: {
- _method: 'GET'
- }
- }),
+ this.serverApi.post(`/${this.resourceType}`, formData, {}),
this.actions,
+ true,
showErrors
);
}
}
- update(uuid: string, data: Partial<T>) {
+ update(uuid: string, data: Partial<T>, showErrors?: boolean) {
this.validateUuid(uuid);
return CommonService.defaultResponse(
this.serverApi
.put<T>(`/${this.resourceType}/${uuid}`, data && CommonService.mapKeys(snakeCase)(data)),
- this.actions
+ this.actions,
+ undefined, // mapKeys
+ showErrors
);
}
}