react-jsonschema-form-validation
Version:
Simple form validation using JSON Schema and AJV
112 lines (97 loc) • 3.79 kB
JavaScript
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
import _createClass from "@babel/runtime/helpers/esm/createClass";
import _possibleConstructorReturn from "@babel/runtime/helpers/esm/possibleConstructorReturn";
import _getPrototypeOf from "@babel/runtime/helpers/esm/getPrototypeOf";
import _inherits from "@babel/runtime/helpers/esm/inherits";
import classnames from 'classnames';
import memoize from 'memoize-one';
import React, { PureComponent } from 'react';
import { withFormContext } from '../Form/Context';
var Field =
/*#__PURE__*/
function (_PureComponent) {
_inherits(Field, _PureComponent);
function Field() {
var _getPrototypeOf2;
var _this;
_classCallCheck(this, Field);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Field)).call.apply(_getPrototypeOf2, [this].concat(args)));
_this.memoGetClassnames = memoize(function (className, isInvalid, isSubmitted, isTouched) {
return classnames('Jfv_Field', className, {
isInvalid: isInvalid,
isSubmitted: isSubmitted,
isTouched: isTouched
});
});
_this.memoGetOnBlurHandler = memoize(function (touch, name, onBlur) {
return function (event) {
touch(name);
if (onBlur) onBlur(event);
};
});
_this.memoGetOnChangeHandler = memoize(function (onChange, handleFieldChange) {
return function (event) {
if (onChange) {
// Pass Form.handleFieldChange handler as extra parameter to the onChange handler
onChange(event, handleFieldChange);
return;
}
handleFieldChange(event);
};
});
_this.getClassnames = function (form) {
var _this$props = _this.props,
className = _this$props.className,
name = _this$props.name;
var isFieldInvalid = form.isFieldInvalid,
isFieldTouched = form.isFieldTouched,
isSubmitted = form.isSubmitted;
return _this.memoGetClassnames(className, isFieldInvalid(name), isSubmitted, isFieldTouched(name));
};
return _this;
}
_createClass(Field, [{
key: "render",
value: function render() {
var _this2 = this;
var _this$props2 = this.props,
children = _this$props2.children,
className = _this$props2.className,
Component = _this$props2.component,
onBlur = _this$props2.onBlur,
onChange = _this$props2.onChange,
name = _this$props2.name,
forwardedRef = _this$props2.forwardedRef,
props = _objectWithoutProperties(_this$props2, ["children", "className", "component", "onBlur", "onChange", "name", "forwardedRef"]);
return withFormContext(function (form) {
return React.createElement(Component, Object.assign({
className: _this2.getClassnames(form),
name: name,
onBlur: _this2.memoGetOnBlurHandler(form.touch, name, onBlur),
onChange: _this2.memoGetOnChangeHandler(onChange, form.handleFieldChange),
ref: forwardedRef // eslint-disable-next-line react/jsx-props-no-spreading
}, props), children);
});
}
}]);
return Field;
}(PureComponent);
Field.defaultProps = {
children: null,
className: '',
component: 'input',
forwardedRef: null,
onBlur: null,
onChange: null
};
export default React.forwardRef(function (props, ref) {
return (// eslint-disable-next-line react/jsx-props-no-spreading
React.createElement(Field, Object.assign({}, props, {
forwardedRef: ref
}))
);
});