react-formal
Version:
Classy HTML form management for React
114 lines (111 loc) • 5.32 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
exports.useMergedEventHandlers = useMergedEventHandlers;
var _propTypes = _interopRequireDefault(require("prop-types"));
var _react = _interopRequireWildcard(require("react"));
var _useField = _interopRequireDefault(require("./useField"));
var _notify = _interopRequireDefault(require("./utils/notify"));
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 _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
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; }
function useMergedEventHandlers({
onBlur: onFieldBlur,
onChange: onFieldChange
}, {
onBlur,
onChange
}) {
return (0, _react.useMemo)(() => ({
onChange: (...args) => {
(0, _notify.default)(onChange, args);
(0, _notify.default)(onFieldChange, args);
},
onBlur: (...args) => {
(0, _notify.default)(onBlur, args);
(0, _notify.default)(onFieldBlur, args);
}
}), [onFieldBlur, onFieldChange, onBlur, onChange]);
}
/**
* When Field renders an Element, it injects a few props.
* In the case none DOM elements it also injects `meta`
*/
/**
* @alias Field
* @memberof Form
*/
const _Field = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
let {
children,
type,
as: asProp,
injectMeta,
name,
mapFromValue,
mapToValue,
validates,
validateOn,
value,
noValidate,
errorClass,
className,
onChange,
onBlur,
exclusive = false
} = props,
rest = _objectWithoutPropertiesLoose(props, ["children", "type", "as", "injectMeta", "name", "mapFromValue", "mapToValue", "validates", "validateOn", "value", "noValidate", "errorClass", "className", "onChange", "onBlur", "exclusive"]);
const hasRenderProp = typeof children === 'function';
const [field, meta] = (0, _useField.default)({
name,
type,
// XXX: opt out of inferred props for fn children
as: asProp || hasRenderProp,
mapFromValue,
mapToValue,
validates,
validateOn,
exclusive,
noValidate,
errorClass,
className,
onChange,
onBlur,
value
});
let fieldProps = field;
if (ref) fieldProps.ref = ref;
if (typeof children === 'function') {
return children(fieldProps, meta);
}
let Input = asProp || meta.nativeTagName;
if (injectMeta != null ? injectMeta : typeof Input !== 'string') {
fieldProps.meta = meta;
}
return /*#__PURE__*/_react.default.createElement(Input, _extends({}, rest, fieldProps, {
type: meta.nativeType
}), children);
});
_Field.displayName = 'Field';
_Field.propTypes = {
name: _propTypes.default.string.isRequired,
as: _propTypes.default.oneOfType([_propTypes.default.elementType, _propTypes.default.string]),
validateOn: _propTypes.default.oneOfType([_propTypes.default.shape({
change: _propTypes.default.bool,
blur: _propTypes.default.bool
}), _propTypes.default.oneOf(['change', 'blur']), _propTypes.default.func]),
mapFromValue: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.string, _propTypes.default.object]),
mapToValue: _propTypes.default.func,
errorClass: _propTypes.default.string,
validates: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.arrayOf(_propTypes.default.string)]),
exclusive: _propTypes.default.bool,
noValidate: _propTypes.default.bool,
children: _propTypes.default.oneOfType([_propTypes.default.node, _propTypes.default.func]),
injectMeta: _propTypes.default.bool
};
var _default = _Field;
exports.default = _default;