UNPKG

choerodon-ui

Version:

An enterprise-class UI design language and React-based implementation

393 lines (330 loc) 12.7 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _react = _interopRequireWildcard(require("react")); var _reactDom = require("react-dom"); var _propTypes = _interopRequireDefault(require("prop-types")); var _classnames = _interopRequireDefault(require("classnames")); var _warning = _interopRequireDefault(require("../_util/warning")); var _constants = require("./constants"); var _PureRenderMixin = _interopRequireDefault(require("../rc-components/util/PureRenderMixin")); var _animate = _interopRequireDefault(require("../animate")); var _enum = require("./enum"); var _FormContext = _interopRequireDefault(require("./FormContext")); function _createSuper(Derived) { function isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; } var FormItem = /*#__PURE__*/ function (_Component) { (0, _inherits2["default"])(FormItem, _Component); var _super = _createSuper(FormItem); function FormItem() { var _this; (0, _classCallCheck2["default"])(this, FormItem); _this = _super.apply(this, arguments); _this.state = { helpShow: false }; _this.onHelpAnimEnd = function (_key, helpShow) { _this.setState({ helpShow: helpShow }); }; // Resolve duplicated ids bug between different forms _this.onLabelClick = function (e) { var _this$props = _this.props, label = _this$props.label, propId = _this$props.id; var id = propId || _this.getId(); if (!id) { return; } var controls = document.querySelectorAll("[id=\"".concat(id, "\"]")); if (controls.length !== 1) { // Only prevent in default situation // Avoid preventing event in `label={<a href="xx">link</a>}`` if (typeof label === 'string') { e.preventDefault(); } var control = (0, _reactDom.findDOMNode)((0, _assertThisInitialized2["default"])(_this)).querySelector("[id=\"".concat(id, "\"]")); if (control && control.focus) { control.focus(); } } }; return _this; } (0, _createClass2["default"])(FormItem, [{ key: "componentDidMount", value: function componentDidMount() { var children = this.props.children; (0, _warning["default"])(this.getControls(children, true).length <= 1, '`Form.Item` cannot generate `validateStatus` and `help` automatically, ' + 'while there are more than one `getFieldDecorator` in it.'); } }, { key: "shouldComponentUpdate", value: function shouldComponentUpdate() { for (var _len = arguments.length, args = new Array(_len), _key2 = 0; _key2 < _len; _key2++) { args[_key2] = arguments[_key2]; } return _PureRenderMixin["default"].shouldComponentUpdate.apply(this, args); } }, { key: "getHelpMsg", value: function getHelpMsg() { var props = this.props; var onlyControl = this.getOnlyControl(); if (props.help === undefined && onlyControl) { var errors = this.getField().errors; return errors ? errors.map(function (e) { return e.message; }).join(', ') : ''; } return props.help; } }, { key: "getControls", value: function getControls(children, recursively) { var controls = []; var childrenArray = _react.Children.toArray(children); for (var i = 0; i < childrenArray.length; i++) { if (!recursively && controls.length > 0) { break; } var child = childrenArray[i]; if (child.type && (child.type === FormItem || child.type.displayName === 'FormItem')) { continue; } if (!child.props) { continue; } if (_constants.FIELD_META_PROP in child.props) { // And means FIELD_DATA_PROP in chidl.props, too. controls.push(child); } else if (child.props.children) { controls = controls.concat(this.getControls(child.props.children, recursively)); } } return controls; } }, { key: "getOnlyControl", value: function getOnlyControl() { var children = this.props.children; var child = this.getControls(children, false)[0]; return child !== undefined ? child : null; } }, { key: "getChildProp", value: function getChildProp(prop) { var child = this.getOnlyControl(); return child && child.props && child.props[prop]; } }, { key: "getId", value: function getId() { return this.getChildProp('id'); } }, { key: "getMeta", value: function getMeta() { return this.getChildProp(_constants.FIELD_META_PROP); } }, { key: "getField", value: function getField() { return this.getChildProp(_constants.FIELD_DATA_PROP); } }, { key: "getPrefixCls", value: function getPrefixCls() { var prefixCls = this.props.prefixCls; var getPrefixCls = this.context.getPrefixCls; return getPrefixCls('form', prefixCls); } }, { key: "renderHelp", value: function renderHelp() { var prefixCls = this.getPrefixCls(); var help = this.getHelpMsg(); var children = help ? _react["default"].createElement("div", { className: "".concat(prefixCls, "-explain"), key: "error" }, help) : null; return _react["default"].createElement(_animate["default"], { transitionName: "show-error", component: "", transitionAppear: true, key: "error", onEnd: this.onHelpAnimEnd }, children); } }, { key: "renderExtra", value: function renderExtra() { var extra = this.props.extra; var prefixCls = this.getPrefixCls(); return extra ? _react["default"].createElement("div", { className: "".concat(prefixCls, "-extra") }, extra) : null; } }, { key: "getValidateStatus", value: function getValidateStatus() { var onlyControl = this.getOnlyControl(); if (onlyControl) { var field = this.getField(); if (field.validating) { return _enum.FormItemValidateStatus.validating; } if (field.errors) { return _enum.FormItemValidateStatus.error; } var fieldValue = 'value' in field ? field.value : this.getMeta().initialValue; if (fieldValue !== undefined && fieldValue !== null && fieldValue !== '') { return _enum.FormItemValidateStatus.success; } } } }, { key: "renderValidateWrapper", value: function renderValidateWrapper(c1, c2, c3) { var props = this.props; var prefixCls = this.getPrefixCls(); var onlyControl = this.getOnlyControl(); var validateStatus = props.validateStatus === undefined && onlyControl ? this.getValidateStatus() : props.validateStatus; var classes = "".concat(prefixCls, "-item-control"); if (validateStatus) { classes = (0, _classnames["default"])("".concat(prefixCls, "-item-control"), { 'has-feedback': props.hasFeedback || validateStatus === _enum.FormItemValidateStatus.validating, 'has-success': validateStatus === _enum.FormItemValidateStatus.success, 'has-warning': validateStatus === _enum.FormItemValidateStatus.warning, 'has-error': validateStatus === _enum.FormItemValidateStatus.error, 'is-validating': validateStatus === _enum.FormItemValidateStatus.validating }); } return _react["default"].createElement("div", { className: classes }, _react["default"].createElement("span", { className: "".concat(prefixCls, "-item-children") }, c1), c2, c3); } }, { key: "renderWrapper", value: function renderWrapper(children) { var wrapperCol = this.props.wrapperCol; var prefixCls = this.getPrefixCls(); var required = this.isRequired(); var className = (0, _classnames["default"])("".concat(prefixCls, "-item-control-wrapper"), wrapperCol && wrapperCol.className, { 'is-required': required }); return _react["default"].createElement("div", { className: className, key: "wrapper" }, children); } }, { key: "isRequired", value: function isRequired() { var required = this.props.required; if (required !== undefined) { return required; } if (this.getOnlyControl()) { var meta = this.getMeta() || {}; var validate = meta.validate || []; return validate.filter(function (item) { return !!item.rules; }).some(function (item) { return item.rules.some(function (rule) { return rule.required; }); }); } return false; } }, { key: "renderChildren", value: function renderChildren() { var children = this.props.children; return [// this.renderLabel(), this.renderWrapper(this.renderValidateWrapper(children, this.renderHelp(), this.renderExtra()))]; } }, { key: "renderFormItem", value: function renderFormItem(children) { var _itemClassName; var props = this.props; var helpShow = this.state.helpShow; var prefixCls = this.getPrefixCls(); var style = props.style; var itemClassName = (_itemClassName = {}, (0, _defineProperty2["default"])(_itemClassName, "".concat(prefixCls, "-item"), true), (0, _defineProperty2["default"])(_itemClassName, "".concat(prefixCls, "-item-with-help"), !!this.getHelpMsg() || helpShow), (0, _defineProperty2["default"])(_itemClassName, "".concat(prefixCls, "-item-no-colon"), !props.colon), (0, _defineProperty2["default"])(_itemClassName, "".concat(props.className), !!props.className), _itemClassName); return _react["default"].createElement("div", { className: (0, _classnames["default"])(itemClassName), style: style }, children); } }, { key: "render", value: function render() { var children = this.renderChildren(); return this.renderFormItem(children); } }], [{ key: "contextType", get: function get() { return _FormContext["default"]; } }]); return FormItem; }(_react.Component); exports["default"] = FormItem; FormItem.displayName = 'FormItem'; FormItem.defaultProps = { hasFeedback: false, colon: true }; FormItem.propTypes = { prefixCls: _propTypes["default"].string, label: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].node]), help: _propTypes["default"].oneOfType([_propTypes["default"].node, _propTypes["default"].bool]), validateStatus: _propTypes["default"].oneOf([_enum.FormItemValidateStatus.success, _enum.FormItemValidateStatus.warning, _enum.FormItemValidateStatus.error, _enum.FormItemValidateStatus.validating]), hasFeedback: _propTypes["default"].bool, wrapperCol: _propTypes["default"].object, className: _propTypes["default"].string, id: _propTypes["default"].string, children: _propTypes["default"].node, colon: _propTypes["default"].bool }; //# sourceMappingURL=FormItem.js.map