@nutui/nutui-react
Version:
京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序
227 lines (226 loc) • 12.5 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "FormItem", {
enumerable: true,
get: function() {
return FormItem;
}
});
var _interop_require_default = require("@swc/helpers/_/_interop_require_default");
var _call_super = require("@swc/helpers/_/_call_super");
var _class_call_check = require("@swc/helpers/_/_class_call_check");
var _create_class = require("@swc/helpers/_/_create_class");
var _define_property = require("@swc/helpers/_/_define_property");
var _inherits = require("@swc/helpers/_/_inherits");
var _object_spread = require("@swc/helpers/_/_object_spread");
var _object_spread_props = require("@swc/helpers/_/_object_spread_props");
var _sliced_to_array = require("@swc/helpers/_/_sliced_to_array");
var _to_consumable_array = require("@swc/helpers/_/_to_consumable_array");
var _react = /*#__PURE__*/ _interop_require_default._(require("react"));
var _context = require("../form/context");
var _cell = /*#__PURE__*/ _interop_require_default._(require("../cell"));
var _typings = require("../../utils/typings");
var _isforwardrefcomponent = require("../../utils/is-forward-ref-component");
var _toarray = require("../../utils/to-array");
var _useform = require("../form/useform");
var defaultProps = (0, _object_spread_props._)((0, _object_spread._)({}, _typings.ComponentDefaults), {
required: false,
name: '',
label: '',
rules: [
{
required: false,
message: ''
}
],
errorMessageAlign: 'left',
shouldUpdate: false,
noStyle: false
});
var _React_Component;
var FormItem = /*#__PURE__*/ function(_superClass) {
"use strict";
(0, _inherits._)(FormItem, _superClass);
function FormItem(props) {
(0, _class_call_check._)(this, FormItem);
var _this;
_this = (0, _call_super._)(this, FormItem, [
props
]), (0, _define_property._)(_this, "cancelRegister", void 0), (0, _define_property._)(_this, "componentRef", void 0), (0, _define_property._)(_this, "eventOff", void 0), (0, _define_property._)(_this, "getControlled", function(children) {
var _children_props;
var _this_context_formInstance = _this.context.formInstance, setFieldsValue = _this_context_formInstance.setFieldsValue, getFieldValue = _this_context_formInstance.getFieldValue;
var dispatch = _this.context.formInstance.getInternal(_useform.SECRET).dispatch;
var _this_props = _this.props, _this_props_name = _this_props.name, name = _this_props_name === void 0 ? '' : _this_props_name;
if (children === null || children === void 0 ? void 0 : (_children_props = children.props) === null || _children_props === void 0 ? void 0 : _children_props.defaultValue) {
if (process.env.NODE_ENV !== 'production') {
console.warn('[NutUI] FormItem:', '请通过 initialValue 设置初始值,而不是 defaultValue');
}
}
var fieldValue = getFieldValue(name);
var _obj;
var controlled = (0, _object_spread_props._)((0, _object_spread._)({}, children.props), (_obj = {
className: children.props.className
}, (0, _define_property._)(_obj, _this.props.valuePropName || 'value', fieldValue !== undefined ? fieldValue : _this.props.initialValue), (0, _define_property._)(_obj, _this.props.trigger || 'onChange', function() {
for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){
args[_key] = arguments[_key];
}
// args [a, b]
var originOnChange = children.props[_this.props.trigger || 'onChange'];
if (originOnChange) {
originOnChange.apply(void 0, (0, _to_consumable_array._)(args));
}
var _args = (0, _sliced_to_array._)(args, 1), next = _args[0];
if (_this.props.getValueFromEvent) {
var _this_props;
next = (_this_props = _this.props).getValueFromEvent.apply(_this_props, (0, _to_consumable_array._)(args));
}
setFieldsValue((0, _define_property._)({}, name, next));
}), _obj));
var validateTrigger = _this.props.validateTrigger;
var mergedValidateTrigger = validateTrigger || _this.context.validateTrigger;
var validateTriggers = (0, _toarray.toArray)(mergedValidateTrigger);
validateTriggers.forEach(function(trigger) {
var originTrigger = controlled[trigger];
controlled[trigger] = function() {
for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){
args[_key] = arguments[_key];
}
if (originTrigger) {
originTrigger.apply(void 0, (0, _to_consumable_array._)(args));
}
if (_this.props.rules && _this.props.rules.length) {
dispatch({
name: _this.props.name
});
}
};
});
if ((0, _isforwardrefcomponent.isForwardRefComponent)(children)) {
controlled.ref = function(componentInstance) {
var originRef = children.ref;
if (originRef) {
if (typeof originRef === 'function') {
originRef(componentInstance);
}
if ('current' in originRef) {
originRef.current = componentInstance;
}
}
_this.componentRef = componentInstance;
};
}
return controlled;
}), (0, _define_property._)(_this, "refresh", function() {
_this.setState(function(param) {
var resetCount = param.resetCount;
return {
resetCount: resetCount + 1
};
});
}), (0, _define_property._)(_this, "onStoreChange", function(type) {
if (type === 'reset') {
_this.context.formInstance.errors[_this.props.name] = [];
_this.refresh();
} else {
_this.forceUpdate();
}
}), (0, _define_property._)(_this, "renderLayout", function(childNode) {
var _$_object_spread = (0, _object_spread._)({}, defaultProps, _this.props), label = _$_object_spread.label, name = _$_object_spread.name, required = _$_object_spread.required, rules = _$_object_spread.rules, className = _$_object_spread.className, style = _$_object_spread.style, errorMessageAlign = _$_object_spread.errorMessageAlign, align = _$_object_spread.align;
var requiredInRules = rules === null || rules === void 0 ? void 0 : rules.some(function(rule) {
return rule.required;
});
var item = name ? _this.context.formInstance.errors[name] : [];
var starPosition = _this.context.formInstance.starPosition;
var renderStar = (required || requiredInRules) && /*#__PURE__*/ _react.default.createElement("div", {
className: "nut-form-item-label-required required"
}, "*");
var renderLabel = /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/ _react.default.createElement("span", {
className: "nut-form-item-labeltxt"
}, starPosition === 'left' ? renderStar : null, label), starPosition === 'right' ? renderStar : null);
return /*#__PURE__*/ _react.default.createElement(_cell.default, {
className: "".concat(_this.getClassNameWithDirection('nut-form-item'), " ").concat(className),
style: style,
align: align,
onClick: function onClick(e) {
return _this.props.onClick && _this.props.onClick(e, _this.componentRef);
}
}, label ? /*#__PURE__*/ _react.default.createElement("div", {
className: "nut-cell-title ".concat(_this.getClassNameWithDirection('nut-form-item-label'))
}, renderLabel) : null, /*#__PURE__*/ _react.default.createElement("div", {
className: "nut-cell-value ".concat(_this.getClassNameWithDirection('nut-form-item-body'))
}, /*#__PURE__*/ _react.default.createElement("div", {
className: "nut-form-item-body-slots"
}, childNode), item && item.length > 0 && /*#__PURE__*/ _react.default.createElement("div", {
className: "nut-form-item-body-tips",
style: {
textAlign: errorMessageAlign
}
}, item[0].message)));
});
_this.componentRef = /*#__PURE__*/ _react.default.createRef();
_this.state = {
resetCount: 1
};
return _this;
}
(0, _create_class._)(FormItem, [
{
key: "componentDidMount",
value: function componentDidMount() {
// Form设置initialValues时的处理
var _this_context_formInstance_getInternal = this.context.formInstance.getInternal(_useform.SECRET), _this_context_formInstance_getInternal_store = _this_context_formInstance_getInternal.store, store = _this_context_formInstance_getInternal_store === void 0 ? {} : _this_context_formInstance_getInternal_store, setInitialValues = _this_context_formInstance_getInternal.setInitialValues;
if (this.props.initialValue && this.props.name && !Object.keys(store).includes(this.props.name)) {
setInitialValues((0, _object_spread_props._)((0, _object_spread._)({}, store), (0, _define_property._)({}, this.props.name, this.props.initialValue)), true);
}
// 注册组件实例到FormStore
var _this_context_formInstance_getInternal1 = this.context.formInstance.getInternal(_useform.SECRET), registerField = _this_context_formInstance_getInternal1.registerField, registerUpdate = _this_context_formInstance_getInternal1.registerUpdate;
this.cancelRegister = registerField(this);
// 这里需要增加事件监听,因为此实现属于依赖触发
this.eventOff = registerUpdate(this, this.props.shouldUpdate);
}
},
{
key: "componentWillUnmount",
value: function componentWillUnmount() {
if (this.cancelRegister) {
this.cancelRegister();
}
if (this.eventOff) {
this.eventOff();
}
}
},
{
key: "getClassNameWithDirection",
value: function getClassNameWithDirection(className) {
if (className && this.context.labelPosition) {
return "".concat(className, " ").concat(className, "-").concat(this.context.labelPosition);
}
return className;
}
},
{
key: "render",
value: function render() {
var children = this.props.children;
var child = Array.isArray(children) ? children[0] : children;
var returnChildNode;
if (!this.props.shouldUpdate) {
returnChildNode = /*#__PURE__*/ _react.default.cloneElement(child, this.getControlled(child));
} else {
returnChildNode = child(this.context.formInstance);
}
return /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, {
key: this.state.resetCount
}, /*#__PURE__*/ _react.default.createElement("div", {
className: this.context.disabled ? 'nut-form-item-disabled' : ''
}, this.props.noStyle ? returnChildNode : this.renderLayout(returnChildNode)));
}
}
]);
return FormItem;
}(_React_Component = _react.default.Component);
(0, _define_property._)(FormItem, "defaultProps", defaultProps);
(0, _define_property._)(FormItem, "contextType", _context.Context);
;