UNPKG

choerodon-ui

Version:

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

308 lines (235 loc) 9.94 kB
"use strict"; 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