@appello/services
Version:
Services package with api / graphql
62 lines (61 loc) • 2.75 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createProcessGqlErrorResponse = createProcessGqlErrorResponse;
const common_1 = require("@appello/common");
const consts_1 = require("../../consts");
const gqlErrorsHelpers_1 = require("../gqlErrorsHelpers");
function createProcessGqlErrorResponse(config) {
return function processGqlErrorResponse(e, { fields = [], setFormError, setFieldError = setFormError ? (name, message) => setFormError(name, { message }) : undefined, onNonFieldError = config.onNonFieldError, onUnhandledFieldErrors = config.onUnhandledFieldErrors, onUnknownError = config.onUnknownError, onUnprocessableEntityError = config.onUnprocessableEntityError, onManualHandleError = config.onManualHandleError, }) {
const gqlErrors = (0, gqlErrorsHelpers_1.getGqlErrors)(e);
if (!gqlErrors) {
return;
}
const error = (0, gqlErrorsHelpers_1.getGqlError)(gqlErrors);
if (onManualHandleError) {
onManualHandleError(error);
return;
}
const { code, explain } = error || {};
if (code !== consts_1.GqlErrorCodeEnum.UNPROCESSABLE_ENTITY) {
onUnprocessableEntityError === null || onUnprocessableEntityError === void 0 ? void 0 : onUnprocessableEntityError(consts_1.GqlErrorMessagesEnum.SOMETHING_WRONG, error);
return;
}
if (!explain) {
onUnknownError(consts_1.GqlErrorMessagesEnum.UNKNOWN_ERROR, error);
return;
}
if ('non_field' in explain) {
onNonFieldError(explain['non_field'], error);
return;
}
const errors = explain;
const unhandledFieldErrors = [];
(0, common_1.entries)(errors).forEach(([field, error]) => {
let formField;
if (Array.isArray(fields)) {
if (fields.some(v => v.startsWith(field))) {
formField = field;
}
}
else {
formField = fields[field];
}
if (fields && formField && setFieldError) {
if ((0, common_1.isObject)(error)) {
(0, common_1.entries)(error).forEach(([nestedField, nestedError]) => {
setFieldError(`${formField}.${nestedField}`, nestedError);
});
}
else {
setFieldError(formField, error);
}
}
else {
unhandledFieldErrors.push({ name: field, value: error });
}
});
if (unhandledFieldErrors.length) {
onUnhandledFieldErrors(unhandledFieldErrors, error);
}
};
}