choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
280 lines (227 loc) • 8.49 kB
JavaScript
import _defineProperty from "@babel/runtime/helpers/defineProperty";
import _objectSpread from "@babel/runtime/helpers/objectSpread2";
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
import _createClass from "@babel/runtime/helpers/createClass";
import _assertThisInitialized from "@babel/runtime/helpers/assertThisInitialized";
import _inherits from "@babel/runtime/helpers/inherits";
import _createSuper from "@babel/runtime/helpers/createSuper";
import { __decorate } from "tslib";
import React, { Children, cloneElement } from 'react';
import { observer } from 'mobx-react';
import { observable, computed, action, runInAction, toJS } from 'mobx';
import Tag from '../../../es/tag';
import isNumber from 'lodash/isNumber';
import isString from 'lodash/isString';
import isNil from 'lodash/isNil';
import omit from 'lodash/omit';
import warning from '../../../es/_util/warning';
import isArray from 'lodash/isArray';
import isSame from '../_util/isSame';
import DataSetComponent from '../data-set/DataSetComponent';
import ScreeningItem from './ScreeningItem';
import { $l } from '../locale-context';
var Screening = /*#__PURE__*/function (_DataSetComponent) {
_inherits(Screening, _DataSetComponent);
var _super = _createSuper(Screening);
function Screening(props, context) {
var _this;
_classCallCheck(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 = omit(toJS(_this.mergeValue), '__dirty');
if (fieldName) {
_this.mergeValue = _objectSpread(_objectSpread({}, _this.mergeValue), {}, _defineProperty({}, fieldName, value));
}
var valueNow = omit(toJS(_this.mergeValue), '__dirty');
if (!isSame(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 = _assertThisInitialized(_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 = _assertThisInitialized(_this),
_record = _assertThisInitialize2.record;
label = field.get('label', _record);
if (isArray(value)) {
text = value.map(function (v) {
var itemText = field.getText(v, undefined, _record);
if (isNil(itemText)) {
itemText = _this.findByValue(v, key);
}
return itemText;
});
} else {
text = field.getText(value, undefined, _record);
if (isNil(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($l('Screening', 'selected'), ":");
var labelNode = /*#__PURE__*/React.createElement("span", {
className: "".concat(prefixCls, "-choosed-label")
}, labelTitle);
if (tagsProps.length > 0) {
return tagRender ? tagRender({
labelTitle: labelTitle,
tagsProps: tagsProps
}) : /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-choosed")
}, /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-choosed-title")
}, labelNode), /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-choosed-content")
}, tagsProps.map(function (tagItemProps) {
return /*#__PURE__*/React.createElement(Tag, {
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;
runInAction(function () {
if (dataSet && record) {
_this.mergeValue = record.toData();
}
});
return _this;
}
/**
* return the record: dataIndex record, current, undefined
*/
_createClass(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 (isNumber(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 = toJS(this.mergeValue);
mergeValue = omit(mergeValue, ['__dirty']);
var filteredChildren = Children.toArray(children).filter(function (c) {
return !!c;
});
return /*#__PURE__*/React.createElement("div", {
className: "".concat(this.prefixCls)
}, this.renderTag(mergeValue), Children.map(filteredChildren, function (child, _index) {
var name = child.props.name;
if (_this2.mergeValue && name && isNil(_this2.mergeValue[name])) {
var screenProps = {
onConfirm: _this2.handleConfirm,
onChange: _this2.handleChange,
dataSet: dataSet,
onRef: function onRef(ref) {
_this2.onRef(ref, name);
}
};
if (!isString(name)) {
// @ts-expect-error: this should be optional
delete screenProps.onRef;
warning(false, "ScreeningItem need binding DataSet with property name.");
}
return /*#__PURE__*/cloneElement(child, screenProps);
}
}));
}
}]);
return Screening;
}(DataSetComponent);
Screening.displayName = 'Screening';
Screening.ScreeningItem = ScreeningItem;
Screening.defaultProps = {
suffixCls: 'screening'
};
__decorate([observable], Screening.prototype, "mergeValue", void 0);
__decorate([computed], Screening.prototype, "record", null);
__decorate([computed], Screening.prototype, "dataSet", null);
__decorate([action], Screening.prototype, "handleConfirm", void 0);
__decorate([action], Screening.prototype, "handleCloseItem", void 0);
Screening = __decorate([observer], Screening);
export default Screening;
//# sourceMappingURL=index.js.map