UNPKG

@arun-s-aot/formio-react

Version:

React renderer for formsflow form.io forms.

81 lines (74 loc) 2.49 kB
"use strict"; 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;