@arun-s-aot/formio-react
Version:
React renderer for formsflow form.io forms.
81 lines (74 loc) • 2.49 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
const Errors = props => {
const {
type = 'danger',
errors
} = props;
const hasErrors = error => {
if (Array.isArray(error)) {
return error.filter(item => !!item).length !== 0;
}
return !!error;
};
/**
* @param {string|any[]} error
* @returns {string|unknown[]|*}
*/
const formatError = error => {
if (typeof error === 'string') {
return error;
}
if (Array.isArray(error)) {
return error.map(formatError);
}
// eslint-disable-next-line no-prototype-builtins
if (error.hasOwnProperty('errors')) {
return Object.keys(error.errors).map((key, index) => {
const item = error.errors[key];
return /*#__PURE__*/_react.default.createElement("div", {
key: index
}, /*#__PURE__*/_react.default.createElement("strong", null, item.name, " (", item.path, ")"), ' ', "- ", item.message);
});
}
// If this is a standard error.
// eslint-disable-next-line no-prototype-builtins
if (error.hasOwnProperty('message')) {
return error.message;
}
// If this is a joy validation error.
// eslint-disable-next-line no-prototype-builtins
if (error.hasOwnProperty('name') && error.name === 'ValidationError') {
return error.details.map((item, index) => {
return /*#__PURE__*/_react.default.createElement("div", {
key: index
}, item.message);
});
}
// If a conflict error occurs on a form, the form is returned.
// eslint-disable-next-line no-prototype-builtins
if (error.hasOwnProperty('_id') && error.hasOwnProperty('display')) {
return 'Another user has saved this form already. Please reload and re-apply your changes.';
}
return 'An error occurred. See console logs for details.';
};
// If there are no errors, don't render anything.
if (!hasErrors(errors)) {
return null;
}
return /*#__PURE__*/_react.default.createElement("div", {
className: `alert alert-${type}`,
role: "alert"
}, formatError(errors));
};
Errors.propTypes = {
errors: _propTypes.default.any,
type: _propTypes.default.string
};
var _default = exports.default = Errors;