rsuite
Version:
A suite of react components
309 lines (236 loc) • 9.35 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.default = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
var React = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _lodash = _interopRequireDefault(require("lodash"));
var _classnames = _interopRequireDefault(require("classnames"));
var _Input = _interopRequireDefault(require("../Input"));
var _ErrorMessage = _interopRequireDefault(require("../ErrorMessage"));
var _utils = require("../utils");
var _constants = require("../constants");
var _FormContext = _interopRequireWildcard(require("../Form/FormContext"));
var FormControl =
/*#__PURE__*/
function (_React$Component) {
(0, _inheritsLoose2.default)(FormControl, _React$Component);
function FormControl(_props, context) {
var _this;
_this = _React$Component.call(this, _props, context) || this;
_this.handleFieldChange = function (value, event) {
var _this$props = _this.props,
name = _this$props.name,
onChange = _this$props.onChange;
var onFieldChange = _this.context.onFieldChange;
var checkTrigger = _this.getCheckTrigger();
_this.setState({
value: value
});
_this.handleFieldCheck(value, checkTrigger === 'change').then(function (checkResult) {
_this.setState({
checkResult: checkResult
});
});
onFieldChange(name, value, event);
onChange && onChange(value, event);
};
_this.handleFieldBlur = function (event) {
var onBlur = _this.props.onBlur;
var checkTrigger = _this.getCheckTrigger();
var value = _this.getValue() || _this.state.value;
_this.handleFieldCheck(value, checkTrigger === 'blur');
onBlur && onBlur(event);
};
_this.handleFieldCheck = function (value, isCheckTrigger, callback) {
var _this$props2 = _this.props,
name = _this$props2.name,
formValue = _this$props2.formValue,
checkAsync = _this$props2.checkAsync;
var _this$context = _this.context,
onFieldError = _this$context.onFieldError,
onFieldSuccess = _this$context.onFieldSuccess,
model = _this$context.model;
var callbackEvents = function callbackEvents(checkResult) {
if (isCheckTrigger) {
if (checkResult.hasError) {
onFieldError(name, checkResult.errorMessage, callback);
} else {
onFieldSuccess(name, callback);
}
}
return checkResult;
};
if (checkAsync) {
return model.checkForFieldAsync(name, value, formValue).then(function (checkResult) {
return callbackEvents(checkResult);
});
}
return Promise.resolve(callbackEvents(model.checkForField(name, value, formValue)));
};
_this.addPrefix = function (name) {
return (0, _utils.prefix)(_this.props.classPrefix)(name);
};
_this.renderError = function (formError, errorMessage) {
var _this$props3 = _this.props,
errorPlacement = _this$props3.errorPlacement,
name = _this$props3.name;
if (formError) {
errorMessage = formError[name];
}
return React.createElement(_ErrorMessage.default, {
show: !!errorMessage,
className: _this.addPrefix('message-wrapper'),
placement: errorPlacement
}, errorMessage);
};
_this.renderAccepter = function () {
var _this$props4 = _this.props,
name = _this$props4.name,
Component = _this$props4.accepter,
props = (0, _objectWithoutPropertiesLoose2.default)(_this$props4, ["name", "accepter"]);
var _this$context$formDef = _this.context.formDefaultValue,
formDefaultValue = _this$context$formDef === void 0 ? {} : _this$context$formDef;
var unhandled = (0, _utils.getUnhandledProps)(FormControl, props);
var value = _this.getValue();
var readOnly = _this.getReadOnly();
if (_lodash.default.get(Component, 'defaultProps.componentClass') === 'input' && readOnly) {
unhandled.readOnly = readOnly;
}
return React.createElement(Component, (0, _extends2.default)({}, unhandled, {
name: name,
onChange: _this.handleFieldChange,
onBlur: _this.handleFieldBlur,
defaultValue: formDefaultValue[name],
value: value
}));
};
if (!context || !context.onFieldChange) {
throw new Error("\n <FormControl> must be inside a component decorated with <Form>.\n And need to update React to 16.6.0 +.\n ");
}
var _context$formDefaultV = context.formDefaultValue,
_formDefaultValue = _context$formDefaultV === void 0 ? {} : _context$formDefaultV;
var _name = _props.name;
_this.state = {
checkResult: {},
value: _this.getValue(_props) || _formDefaultValue[_name]
};
return _this;
}
var _proto = FormControl.prototype;
_proto.getValue = function getValue(props) {
var _ref = props || this.props,
formValue = _ref.formValue,
name = _ref.name,
value = _ref.value;
if (!_lodash.default.isUndefined(value)) {
return value;
}
if (!formValue) {
return;
}
return formValue[name];
};
_proto.getCheckTrigger = function getCheckTrigger() {
var checkTrigger = this.context.checkTrigger;
return this.props.checkTrigger || checkTrigger;
};
_proto.getReadOnly = function getReadOnly() {
var readOnly = this.context.readOnly;
if (!_lodash.default.isUndefined(readOnly)) {
return readOnly;
}
return this.props.readOnly;
};
_proto.getPlaintext = function getPlaintext() {
var plaintext = this.context.plaintext;
if (!_lodash.default.isUndefined(plaintext)) {
return plaintext;
}
return this.props.plaintext;
};
_proto.checkErrorFromContext = function checkErrorFromContext() {
var errorFromContext = this.context.errorFromContext;
var errorMessage = this.props.errorMessage;
if (typeof errorMessage !== 'undefined') {
return this.renderError(undefined, errorMessage);
}
if (errorFromContext) {
return React.createElement(_FormContext.FormErrorContext.Consumer, null, this.renderError);
}
return null;
};
_proto.render = function render() {
var plaintextDefaultValue = this.props.plaintextDefaultValue;
var readOnly = this.getReadOnly();
var plaintext = this.getPlaintext();
var value = this.getValue();
var classes = (0, _classnames.default)(this.addPrefix('wrapper'), {
'read-only': readOnly,
plaintext: plaintext
});
if (plaintext && (_lodash.default.isUndefined(value) || _lodash.default.isNull(value))) {
return React.createElement("div", {
className: classes
}, React.createElement("div", {
className: this.addPrefix('default-value')
}, plaintextDefaultValue));
}
return React.createElement("div", {
className: classes
}, React.createElement(_FormContext.FormPlaintextContext.Provider, {
value: plaintext
}, this.renderAccepter()), this.checkErrorFromContext());
};
return FormControl;
}(React.Component);
FormControl.contextType = _FormContext.default;
FormControl.propTypes = {
name: _propTypes.default.string,
checkTrigger: _propTypes.default.oneOf(['change', 'blur', 'none']),
checkAsync: _propTypes.default.bool,
accepter: _propTypes.default.elementType,
onChange: _propTypes.default.func,
onBlur: _propTypes.default.func,
classPrefix: _propTypes.default.string,
errorMessage: _propTypes.default.node,
errorPlacement: _propTypes.default.oneOf(_constants.PLACEMENT_8),
formValue: _propTypes.default.object,
readOnly: _propTypes.default.bool,
plaintext: _propTypes.default.bool,
plaintextDefaultValue: _propTypes.default.node,
value: _propTypes.default.any
};
FormControl.defaultProps = {
accepter: _Input.default,
errorPlacement: 'bottomStart',
plaintextDefaultValue: '--'
};
var FormControlWrapper =
/*#__PURE__*/
function (_React$Component2) {
(0, _inheritsLoose2.default)(FormControlWrapper, _React$Component2);
function FormControlWrapper() {
return _React$Component2.apply(this, arguments) || this;
}
var _proto2 = FormControlWrapper.prototype;
_proto2.render = function render() {
var _this2 = this;
return React.createElement(_FormContext.FormValueContext.Consumer, null, function (formValue) {
return React.createElement(FormControl, (0, _extends2.default)({}, _this2.props, {
formValue: formValue
}));
});
};
return FormControlWrapper;
}(React.Component);
var EnhancedFormControl = (0, _utils.defaultProps)({
classPrefix: 'form-control'
})(FormControlWrapper);
var _default = EnhancedFormControl;
exports.default = _default;
module.exports = exports.default;