choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
308 lines (235 loc) • 9.94 kB
JavaScript
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"];
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _objectSpread3 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
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 _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper"));
var _tslib = require("tslib");
var _react = _interopRequireWildcard(require("react"));
var _mobxReact = require("mobx-react");
var _mobx = require("mobx");
var _tag = _interopRequireDefault(require("../../../lib/tag"));
var _isNumber = _interopRequireDefault(require("lodash/isNumber"));
var _isString = _interopRequireDefault(require("lodash/isString"));
var _isNil = _interopRequireDefault(require("lodash/isNil"));
var _omit = _interopRequireDefault(require("lodash/omit"));
var _warning = _interopRequireDefault(require("../../../lib/_util/warning"));
var _isArray = _interopRequireDefault(require("lodash/isArray"));
var _isSame = _interopRequireDefault(require("../_util/isSame"));
var _DataSetComponent2 = _interopRequireDefault(require("../data-set/DataSetComponent"));
var _ScreeningItem = _interopRequireDefault(require("./ScreeningItem"));
var _localeContext = require("../locale-context");
var Screening = /*#__PURE__*/function (_DataSetComponent) {
(0, _inherits2["default"])(Screening, _DataSetComponent);
var _super = (0, _createSuper2["default"])(Screening);
function Screening(props, context) {
var _this;
(0, _classCallCheck2["default"])(this, Screening);
_this = _super.call(this, props, context);
_this.emptyValue = null; // 存下所有子集的ref便于直接调用其中内部方法
_this.child = {};
_this.onRef = function (ref, name) {
_this.child[name] = ref;
};
_this.handleChange = function (value, oldValue) {
var onChange = _this.props.onChange;
if (onChange) {
onChange(value, oldValue);
}
};
_this.handleConfirm = function (_ref) {
var value = _ref.value,
fieldName = _ref.fieldName;
var oldValue = (0, _omit["default"])((0, _mobx.toJS)(_this.mergeValue), '__dirty');
if (fieldName) {
_this.mergeValue = (0, _objectSpread3["default"])((0, _objectSpread3["default"])({}, _this.mergeValue), {}, (0, _defineProperty2["default"])({}, fieldName, value));
}
var valueNow = (0, _omit["default"])((0, _mobx.toJS)(_this.mergeValue), '__dirty');
if (!(0, _isSame["default"])(oldValue, valueNow)) {
_this.handleChange(valueNow, oldValue);
}
};
_this.handleCloseItem = function (filedName) {
var dataSet = _this.props.dataSet;
if (dataSet && filedName) {
(_this.record || dataSet.create({})).set(filedName, _this.emptyValue);
}
_this.mergeValue[filedName] = _this.emptyValue;
if (_this.child && _this.child[filedName]) {
_this.child[filedName].handleClear();
}
};
_this.findByValue = function (value, name) {
if (value && _this.child && _this.child[name]) {
return _this.child[name].processValue(value);
}
return value;
};
_this.renderTag = function (mergeValue) {
var _assertThisInitialize = (0, _assertThisInitialized2["default"])(_this),
dataSet = _assertThisInitialize.dataSet;
var prefixCls = _this.prefixCls;
var tagRender = _this.props.tagRender;
var tagsProps = [];
if (dataSet) {
Object.keys(mergeValue).forEach(function (key) {
var value = mergeValue[key];
var field = dataSet.getField(key);
var label = key;
var text = value;
if (field) {
var _assertThisInitialize2 = (0, _assertThisInitialized2["default"])(_this),
_record = _assertThisInitialize2.record;
label = field.get('label', _record);
if ((0, _isArray["default"])(value)) {
text = value.map(function (v) {
var itemText = field.getText(v, undefined, _record);
if ((0, _isNil["default"])(itemText)) {
itemText = _this.findByValue(v, key);
}
return itemText;
});
} else {
text = field.getText(value, undefined, _record);
if ((0, _isNil["default"])(text)) {
text = _this.findByValue(value, key);
}
}
}
if (text && label) {
var tagProps = {
text: text,
label: label,
handleClose: function handleClose(filedName) {
_this.handleCloseItem(filedName);
},
key: key
};
tagsProps.push(tagProps);
}
});
var labelTitle = "".concat((0, _localeContext.$l)('Screening', 'selected'), ":");
var labelNode = /*#__PURE__*/_react["default"].createElement("span", {
className: "".concat(prefixCls, "-choosed-label")
}, labelTitle);
if (tagsProps.length > 0) {
return tagRender ? tagRender({
labelTitle: labelTitle,
tagsProps: tagsProps
}) : /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-choosed")
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-choosed-title")
}, labelNode), /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-choosed-content")
}, tagsProps.map(function (tagItemProps) {
return /*#__PURE__*/_react["default"].createElement(_tag["default"], {
onClose: function onClose(e) {
e.preventDefault();
tagItemProps.handleClose(tagItemProps.key);
},
key: tagItemProps.key,
closable: true
}, "".concat(tagItemProps.label, ":").concat(tagItemProps.text));
})));
}
}
return null;
};
var dataSet = _this.dataSet;
var record = _this.record;
(0, _mobx.runInAction)(function () {
if (dataSet && record) {
_this.mergeValue = record.toData();
}
});
return _this;
}
/**
* return the record: dataIndex record, current, undefined
*/
(0, _createClass2["default"])(Screening, [{
key: "record",
get: function get() {
var _this$observableProps = this.observableProps,
record = _this$observableProps.record,
dataSet = _this$observableProps.dataSet,
dataIndex = _this$observableProps.dataIndex;
if (record) {
return record;
}
if (dataSet) {
if ((0, _isNumber["default"])(dataIndex)) {
return dataSet.get(dataIndex);
}
return dataSet.current;
}
return undefined;
}
}, {
key: "dataSet",
get: function get() {
var record = this.record;
if (record) {
return record.dataSet;
}
return this.observableProps.dataSet;
}
}, {
key: "render",
value: function render() {
var _this2 = this;
var dataSet = this.dataSet;
var children = this.props.children;
var mergeValue = (0, _mobx.toJS)(this.mergeValue);
mergeValue = (0, _omit["default"])(mergeValue, ['__dirty']);
var filteredChildren = _react.Children.toArray(children).filter(function (c) {
return !!c;
});
return /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(this.prefixCls)
}, this.renderTag(mergeValue), _react.Children.map(filteredChildren, function (child, _index) {
var name = child.props.name;
if (_this2.mergeValue && name && (0, _isNil["default"])(_this2.mergeValue[name])) {
var screenProps = {
onConfirm: _this2.handleConfirm,
onChange: _this2.handleChange,
dataSet: dataSet,
onRef: function onRef(ref) {
_this2.onRef(ref, name);
}
};
if (!(0, _isString["default"])(name)) {
// @ts-expect-error: this should be optional
delete screenProps.onRef;
(0, _warning["default"])(false, "ScreeningItem need binding DataSet with property name.");
}
return /*#__PURE__*/(0, _react.cloneElement)(child, screenProps);
}
}));
}
}]);
return Screening;
}(_DataSetComponent2["default"]);
Screening.displayName = 'Screening';
Screening.ScreeningItem = _ScreeningItem["default"];
Screening.defaultProps = {
suffixCls: 'screening'
};
(0, _tslib.__decorate)([_mobx.observable], Screening.prototype, "mergeValue", void 0);
(0, _tslib.__decorate)([_mobx.computed], Screening.prototype, "record", null);
(0, _tslib.__decorate)([_mobx.computed], Screening.prototype, "dataSet", null);
(0, _tslib.__decorate)([_mobx.action], Screening.prototype, "handleConfirm", void 0);
(0, _tslib.__decorate)([_mobx.action], Screening.prototype, "handleCloseItem", void 0);
Screening = (0, _tslib.__decorate)([_mobxReact.observer], Screening);
var _default = Screening;
exports["default"] = _default;
//# sourceMappingURL=index.js.map
;