UNPKG

@appello/services

Version:

Services package with api / graphql

62 lines (61 loc) 2.75 kB
"use strict"; 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); } }; }