@appello/services
Version:
Services package with api / graphql
41 lines (40 loc) • 1.89 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createProcessApiErrorResponse = createProcessApiErrorResponse;
const common_1 = require("@appello/common");
const consts_1 = require("../../consts");
function resolveField(field, fields) {
if (Array.isArray(fields)) {
return fields.includes(field)
? field
: undefined;
}
return fields === null || fields === void 0 ? void 0 : fields[field];
}
function createProcessApiErrorResponse(config) {
return function processApiError({ errors, fields, setFormError, setFieldError, onGlobalError = config.onGlobalError, onUnknownErrors = config.onUnknownErrors, onManualHandleError = config.onManualHandleError, }) {
const unknownErrors = [];
if (onManualHandleError) {
onManualHandleError(errors);
return;
}
if (errors[consts_1.ApiErrorCodeEnum.GLOBAL_ERROR]) {
onGlobalError(errors[consts_1.ApiErrorCodeEnum.GLOBAL_ERROR], errors);
return;
}
(0, common_1.entries)(errors).forEach(([field, error]) => {
const formField = resolveField(field, fields);
if (formField && (setFieldError || setFormError)) {
const setError = setFieldError !== null && setFieldError !== void 0 ? setFieldError : ((name, message) => setFormError === null || setFormError === void 0 ? void 0 : setFormError(name, { message }));
setError(formField, error);
}
else {
unknownErrors.push({ name: field, value: error });
}
});
if (unknownErrors.length) {
const message = unknownErrors.map(({ name, value }) => `${name}: ${value}`).join('; ');
onUnknownErrors(`${consts_1.ApiErrorMessagesEnum.UNKNOWN_ERROR}: ${message}`, errors);
}
};
}