UNPKG

react-formal

Version:

Classy HTML form management for React

67 lines (66 loc) 3.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _propTypes = _interopRequireDefault(require("prop-types")); var _react = _interopRequireWildcard(require("react")); var _Contexts = require("./Contexts"); var _Errors = require("./Errors"); var _uniqMessage = _interopRequireDefault(require("./utils/uniqMessage")); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } let flatten = (arr, next) => arr.concat(next); /** * Represents a Form validation error message. Only renders when the * value that it is `for` is invalid. * * @alias FormMessage * @memberof Form */ function Message(_ref) { let { errors: propsErrors, for: names, className, filter = _uniqMessage.default, extract = error => error.message || error, children = (errors, msgProps) => /*#__PURE__*/_react.default.createElement("span", msgProps, errors.join(', ')) } = _ref, props = _objectWithoutPropertiesLoose(_ref, ["errors", "for", "className", "filter", "extract", "children"]); const { errors: formErrors } = (0, _react.useContext)(_Contexts.FormContext); const inputErrors = propsErrors || formErrors; const errors = (0, _react.useMemo)(() => (0, _Errors.filterAndMapErrors)({ errors: inputErrors, names }), [names, inputErrors]); if (!errors || !Object.keys(errors).length) return null; return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, children(Object.values(errors).reduce(flatten, []).filter(filter).map(extract), Object.assign({}, props, { className }))); } Message.propTypes = { for: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.arrayOf(_propTypes.default.string)]), /** * A function that maps an array of message strings * and returns a renderable string or ReactElement. * * ```jsx static * <Message> * {errors => errors.join(', ')} * </Message> * ``` */ children: _propTypes.default.func, /** * Map the passed in message object for the field to a string to display */ extract: _propTypes.default.func, filter: _propTypes.default.func }; var _default = Message; exports.default = _default;