UNPKG

choerodon-ui

Version:

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

723 lines (613 loc) 24.6 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 _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2")); var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); 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 _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); 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 _omit = _interopRequireDefault(require("lodash/omit")); var _isPlainObject = _interopRequireDefault(require("lodash/isPlainObject")); var _isNil = _interopRequireDefault(require("lodash/isNil")); var _defer = _interopRequireDefault(require("lodash/defer")); var _noop = _interopRequireDefault(require("lodash/noop")); var _debounce = _interopRequireDefault(require("lodash/debounce")); var _throttle = _interopRequireDefault(require("lodash/throttle")); var _isString = _interopRequireDefault(require("lodash/isString")); var _mobxReact = require("mobx-react"); var _moment = require("moment"); var _mobx = require("mobx"); var _UnitConvertor = require("../../../../lib/_util/UnitConvertor"); var _KeyCode = _interopRequireDefault(require("../../../../lib/_util/KeyCode")); var _icon = _interopRequireDefault(require("../../icon")); var _TextField2 = require("../../text-field/TextField"); var _autobind = _interopRequireDefault(require("../../_util/autobind")); var _measureTextWidth = _interopRequireDefault(require("../../_util/measureTextWidth")); var _utils = require("../utils"); var _Select = _interopRequireDefault(require("../../select/Select")); var _Option = _interopRequireDefault(require("../../option/Option")); var _isSameLike = _interopRequireDefault(require("../../_util/isSameLike")); var _enum = require("../../data-set/enum"); var _utils2 = require("../../field/utils"); var FilterSelect = /*#__PURE__*/function (_TextField) { (0, _inherits2["default"])(FilterSelect, _TextField); var _super = (0, _createSuper2["default"])(FilterSelect); function FilterSelect(props, context) { var _this; (0, _classCallCheck2["default"])(this, FilterSelect); _this = _super.call(this, props, context); _this.setFilterText = (0, _debounce["default"])((0, _mobx.action)(function (text) { _this.filterText = text; }), 500); _this.doQuery = (0, _throttle["default"])(function () { var _this$props$onQuery = _this.props.onQuery, onQuery = _this$props$onQuery === void 0 ? _noop["default"] : _this$props$onQuery; var optionDataSet = _this.observableProps.optionDataSet; optionDataSet.query(); onQuery(); }, 500); var _assertThisInitialize = (0, _assertThisInitialized2["default"])(_this), observableProps = _assertThisInitialize.observableProps; _this.on(observableProps.queryDataSet); _this.reaction = (0, _mobx.reaction)(function () { return observableProps.queryDataSet; }, _this.on); return _this; } (0, _createClass2["default"])(FilterSelect, [{ key: "getPrefix", value: function getPrefix() { var _this$props$prefix = this.props.prefix, prefix = _this$props$prefix === void 0 ? /*#__PURE__*/_react["default"].createElement(_icon["default"], { type: "filter_list" }) : _this$props$prefix; if (prefix) { return this.wrapperPrefix(prefix); } } }, { key: "value", get: function get() { var filter = this.props.filter; var _this$observableProps = this.observableProps, value = _this$observableProps.value, queryDataSet = _this$observableProps.queryDataSet; if (value) { return filter ? value.filter(filter) : value; } var paramName = this.props.paramName; if (queryDataSet) { var current = queryDataSet.current; if (current) { var result = []; var keys = queryDataSet.fields.keys(); (paramName ? (0, _toConsumableArray2["default"])(new Set([].concat((0, _toConsumableArray2["default"])(keys), [paramName]))) : (0, _toConsumableArray2["default"])(keys)).forEach(function (key) { if (key && (!filter || filter(key))) { var values = current.get(key); if ((0, _mobx.isArrayLike)(values)) { var field = current.getField(key); if (field && field.get('multiple', current)) { values.forEach(function (item) { return !(0, _isNil["default"])(item) && result.push(key); }); } else if (values.some(function (item) { return !(0, _isNil["default"])(item); })) { result.push(key); } } else if (!(0, _isNil["default"])(values)) { result.push(key); } } }); return result; } } return undefined; }, set: function set(value) { var _this2 = this; (0, _mobx.runInAction)(function () { _this2.observableProps.value = value; }); } }, { key: "getObservableProps", value: function getObservableProps(props, context) { return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, (0, _get2["default"])((0, _getPrototypeOf2["default"])(FilterSelect.prototype), "getObservableProps", this).call(this, props, context)), {}, { optionDataSet: props.optionDataSet, queryDataSet: props.queryDataSet }); } }, { key: "on", value: function on(ds) { this.off(); if (ds) { ds.addEventListener(_enum.DataSetEvents.update, this.handleDataSetUpdate); ds.addEventListener(_enum.DataSetEvents.reset, this.handleDataSetReset); } this.queryDataSet = ds; } }, { key: "off", value: function off() { var queryDataSet = this.queryDataSet; if (queryDataSet) { queryDataSet.removeEventListener(_enum.DataSetEvents.update, this.handleDataSetUpdate); queryDataSet.removeEventListener(_enum.DataSetEvents.reset, this.handleDataSetReset); } } }, { key: "componentWillUnmount", value: function componentWillUnmount() { (0, _get2["default"])((0, _getPrototypeOf2["default"])(FilterSelect.prototype), "componentWillUnmount", this).call(this); this.setFilterText.cancel(); this.off(); this.reaction(); } }, { key: "setText", value: function setText(text) { (0, _get2["default"])((0, _getPrototypeOf2["default"])(FilterSelect.prototype), "setText", this).call(this, text); this.setFilterText(text); } }, { key: "getPlaceholders", value: function getPlaceholders() { if (!this.selectField) { return (0, _get2["default"])((0, _getPrototypeOf2["default"])(FilterSelect.prototype), "getPlaceholders", this).call(this); } return []; } }, { key: "getOmitPropsKeys", value: function getOmitPropsKeys() { return (0, _get2["default"])((0, _getPrototypeOf2["default"])(FilterSelect.prototype), "getOmitPropsKeys", this).call(this).concat(['paramName', 'optionDataSet', 'queryDataSet', 'dropdownMenuStyle', 'hiddenIfNone', 'editable', 'filter']); } }, { key: "getRootDomNode", value: function getRootDomNode() { return this.element; } }, { key: "defaultRenderer", value: function defaultRenderer(_ref) { var _this3 = this; var value = _ref.value, _ref$repeat = _ref.repeat, repeat = _ref$repeat === void 0 ? 0 : _ref$repeat; var paramName = this.props.paramName; var queryDataSet = this.observableProps.queryDataSet; if (queryDataSet) { var current = queryDataSet.current; if (current) { var fieldValue = current.get(value); if (value === paramName) { return fieldValue; } var field = queryDataSet.getField(value); if (field) { var range = field.get('range', current); if (field.get('multiple', current)) { fieldValue = (fieldValue || [])[repeat]; } if (range) { return "".concat(this.getFieldLabel(field, current), ": ").concat((0, _utils2.toRangeValue)(fieldValue, range).map(function (v) { return (0, _utils2.processFieldValue)((0, _isPlainObject["default"])(v) ? v : (0, _utils2.processValue)(v, _this3.getDateFormat(field)), field, { getProp: function getProp(name) { return _this3.getProp(name); }, getValue: function getValue() { return _this3.getValue(); }, lang: _this3.lang }, undefined, current); }).join('~')); } if (field.get('bind', current) || (0, _isNil["default"])(fieldValue)) return; var text = this.processText((0, _isNil["default"])(fieldValue) ? (0, _utils2.processValue)(value, this.getDateFormat(field)) : (0, _moment.isMoment)(fieldValue) ? (0, _utils2.processValue)(fieldValue, this.getDateFormat(field)) : fieldValue); return "".concat(this.getFieldLabel(field, current), ": ").concat((0, _utils2.processFieldValue)((0, _isPlainObject["default"])(fieldValue) ? fieldValue : text, field, { getProp: function getProp(name) { return _this3.getProp(name); }, getValue: function getValue() { return _this3.getValue(); }, lang: this.lang }, undefined, current)); } return value; } } } }, { key: "getQueryRecord", value: function getQueryRecord() { var queryDataSet = this.observableProps.queryDataSet; if (queryDataSet) { return queryDataSet.current; } } }, { key: "getQueryField", value: function getQueryField(fieldName) { var queryDataSet = this.observableProps.queryDataSet; if (queryDataSet) { return queryDataSet.getField(fieldName); } } }, { key: "addQueryParams", value: function addQueryParams(value) { var paramName = this.props.paramName; if (paramName) { this.setQueryValue(paramName, value); } } }, { key: "afterRemoveValue", value: function afterRemoveValue(value, repeat) { var values = this.getQueryValues(value); if (repeat === -1) { values.pop(); } else { values.splice(repeat, 1); } var multiple = this.getQueryFieldMultiple(value); this.setQueryValue(value, multiple ? values : values[0]); } }, { key: "getQueryFieldMultiple", value: function getQueryFieldMultiple(value) { var paramName = this.props.paramName; if (paramName !== value) { var field = this.getQueryField(value); if (field && field.get('multiple', this.getQueryRecord())) { return true; } } return false; } }, { key: "handleDataSetReset", value: function handleDataSetReset() { var _this$props$onReset = this.props.onReset, onReset = _this$props$onReset === void 0 ? _noop["default"] : _this$props$onReset; this.setValue(undefined); onReset(); } }, { key: "handleDataSetUpdate", value: function handleDataSetUpdate(_ref2) { var name = _ref2.name, value = _ref2.value, record = _ref2.record; var values = this.getValues(); if ((0, _mobx.isArrayLike)(value)) { var length = value.length; if (length) { var field = record.getField(name); if (field && field.get('multiple', record)) { var repeat = 0; var filtered = values.filter(function (item) { if (item === name) { repeat += 1; if (repeat > length) { return false; } } return true; }); for (var i = 0, n = length - repeat; i < n; i += 1) { filtered.push(name); } this.setValue(filtered); } else if (values.indexOf(name) === -1) { values.push(name); this.setValue(values); } } else { this.setValue(values.filter(function (item) { return item !== name; })); } } else if ((0, _isNil["default"])(value)) { this.setValue(values.filter(function (item) { return item !== name; })); } else { if (values.indexOf(name) === -1) { values.push(name); } this.setValue(values); } if (!this.isDoClear) { this.doQuery(); } } }, { key: "handleBlur", value: function handleBlur(e) { (0, _get2["default"])((0, _getPrototypeOf2["default"])(FilterSelect.prototype), "handleBlur", this).call(this, e); if (!e.isDefaultPrevented()) { this.setSelectField(undefined); } } }, { key: "isEditorReadOnly", value: function isEditorReadOnly() { var _this$props = this.props, paramName = _this$props.paramName, editable = _this$props.editable; return this.getQueryValues(paramName).length > 0 && !this.selectField || !editable; } }, { key: "handleFieldChange", value: function handleFieldChange(value) { var selectField = this.selectField; if (selectField) { var name = selectField.name; this.setQueryValue(name, value); } else if ((0, _isString["default"])(value)) { this.addQueryParams(value); if (this.isFocused) { this.element.expand(); } } else { this.setSelectField(value); } } }, { key: "handleInput", value: function handleInput(e) { this.setText(e.target.value); } }, { key: "handleFieldEnterDown", value: function handleFieldEnterDown() { var _this4 = this; (0, _defer["default"])(function () { return _this4.focus(); }); } }, { key: "handleKeyDown", value: function handleKeyDown(e) { if (this.selectField) { if (e.keyCode === _KeyCode["default"].BACKSPACE && !this.text) { this.setSelectField(undefined); } } else { (0, _get2["default"])((0, _getPrototypeOf2["default"])(FilterSelect.prototype), "handleKeyDown", this).call(this, e); } } }, { key: "handleEnterDown", value: function handleEnterDown() {// noop } }, { key: "setSelectField", value: function setSelectField(value) { this.selectField = value; this.setFilterText(undefined); } }, { key: "getQueryValues", value: function getQueryValues(fieldName) { var current = this.getQueryRecord(); if (current) { return [].concat((0, _mobx.toJS)(current.get(fieldName)) || []); } return []; } }, { key: "syncValueOnBlur", value: function syncValueOnBlur() {// noop } }, { key: "setQueryValue", value: function setQueryValue(fieldName, value) { var current = this.getQueryRecord(); if (current) { current.set(fieldName, value); } this.setSelectField(undefined); } }, { key: "getFieldLabel", value: function getFieldLabel(field, record) { return field.get('label', record) || field.name; } }, { key: "multipleFieldExistsValue", value: function multipleFieldExistsValue(field, current) { if (field.get('multiple', current)) { var options = field.getOptions(current); if (options && current) { var values = current.get(field.name); var valueField = field.get('valueField', current); return options.some(function (r) { return !values.some(function (value) { return (0, _isSameLike["default"])(r.get(valueField), value); }); }); } } return false; } }, { key: "getInputFilterOptions", value: function getInputFilterOptions(filterText) { var _this$observableProps2 = this.observableProps, optionDataSet = _this$observableProps2.optionDataSet, fields = _this$observableProps2.optionDataSet.fields; var values = new Set(); optionDataSet.forEach(function (record) { fields.forEach(function (_, key) { var value = record.get(key); if ((0, _isString["default"])(value) && value.toLowerCase().indexOf(filterText.toLowerCase()) !== -1) { values.add(value); } }); }); return (0, _toConsumableArray2["default"])(values).map(function (value) { return /*#__PURE__*/_react["default"].createElement(_Option["default"], { key: value, value: value }, value); }); } }, { key: "getFieldSelectOptions", value: function getFieldSelectOptions() { var _this5 = this; var paramName = this.props.paramName; var queryDataSet = this.observableProps.queryDataSet; var data = []; if (queryDataSet) { var current = queryDataSet.current; queryDataSet.fields.forEach(function (field, key) { if (key !== paramName && (_this5.getValues().indexOf(key) === -1 || _this5.multipleFieldExistsValue(field, current)) && !field.get('bind', current)) { data.push( /*#__PURE__*/_react["default"].createElement(_Option["default"], { key: String(key), value: field }, _this5.getFieldLabel(field, current))); } }); } return data; } }, { key: "getFieldEditor", value: function getFieldEditor(props, selectField) { var current = this.queryDataSet ? this.queryDataSet.current : undefined; var editor = (0, _utils.getEditorByField)(selectField, current, true); var editorProps = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, props), {}, { key: 'value', record: this.getQueryRecord(), name: selectField.name, autoFocus: true, onInput: this.handleInput, onEnterDown: this.handleFieldEnterDown, renderer: _noop["default"], isFlat: selectField && selectField.get('range', current) }); if (editor.type.__PRO_SELECT) { editorProps.dropdownMenuStyle = this.props.dropdownMenuStyle; editorProps.dropdownMatchSelectWidth = false; } return /*#__PURE__*/(0, _react.cloneElement)(editor, editorProps); } }, { key: "getFieldSelect", value: function getFieldSelect(props) { var filterText = this.filterText, dropdownMenuStyle = this.props.dropdownMenuStyle; var editable = !this.isEditorReadOnly(); var options = editable && filterText ? this.getInputFilterOptions(filterText) : this.getFieldSelectOptions(); return /*#__PURE__*/_react["default"].createElement(_Select["default"], (0, _extends2["default"])({}, props, { key: "key", combo: editable, searchable: editable, value: null, onInput: this.handleInput, onEnterDown: this.handleFieldEnterDown, autoFocus: this.isFocused, dropdownMenuStyle: dropdownMenuStyle, dropdownMatchSelectWidth: false }), options); } }, { key: "clear", value: function clear() { var record = this.getQueryRecord(); this.isDoClear = true; if (record) { record.clear(); this.doQuery(); } this.setValue(undefined); this.setSelectField(undefined); this.element.text = undefined; this.isDoClear = false; } }, { key: "renderWrapper", value: function renderWrapper() { var hiddenIfNone = this.props.hiddenIfNone; if (this.isEmpty() && hiddenIfNone) { return null; } return (0, _get2["default"])((0, _getPrototypeOf2["default"])(FilterSelect.prototype), "renderWrapper", this).call(this); } }, { key: "renderMultipleEditor", value: function renderMultipleEditor(props) { var text = this.text, selectField = this.selectField, prefixCls = this.prefixCls, queryDataSet = this.queryDataSet; var editorProps = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, (0, _omit["default"])(props, ['multiple', 'prefixCls'])), {}, { clearButton: false, prefix: null, suffix: null, elementClassName: "".concat(prefixCls, "-inner-editor"), onChange: this.handleFieldChange }); if (text && (!selectField || !queryDataSet || !selectField.get('range', queryDataSet.current))) { editorProps.style = { width: (0, _UnitConvertor.pxToRem)((0, _measureTextWidth["default"])(text), true) }; } return /*#__PURE__*/_react["default"].createElement("li", { key: "text" }, selectField ? /*#__PURE__*/_react["default"].createElement("span", { className: "".concat(prefixCls, "-select-field") }, this.getFieldLabel(selectField, this.getQueryRecord()), ":") : null, selectField ? this.getFieldEditor(editorProps, selectField) : this.getFieldSelect(editorProps)); } }]); return FilterSelect; }(_TextField2.TextField); FilterSelect.displayName = 'FilterSelect'; FilterSelect.defaultProps = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, _TextField2.TextField.defaultProps), {}, { multiple: true, clearButton: true, editable: true, dropdownMenuStyle: { minWidth: (0, _UnitConvertor.pxToRem)(180) } }); (0, _tslib.__decorate)([_mobx.observable], FilterSelect.prototype, "selectField", void 0); (0, _tslib.__decorate)([_mobx.observable], FilterSelect.prototype, "filterText", void 0); (0, _tslib.__decorate)([_mobx.computed], FilterSelect.prototype, "value", null); (0, _tslib.__decorate)([_autobind["default"]], FilterSelect.prototype, "on", null); (0, _tslib.__decorate)([_mobx.action], FilterSelect.prototype, "setText", null); (0, _tslib.__decorate)([_autobind["default"]], FilterSelect.prototype, "getRootDomNode", null); (0, _tslib.__decorate)([_autobind["default"]], FilterSelect.prototype, "defaultRenderer", null); (0, _tslib.__decorate)([_autobind["default"]], FilterSelect.prototype, "handleDataSetReset", null); (0, _tslib.__decorate)([_autobind["default"], _mobx.action], FilterSelect.prototype, "handleDataSetUpdate", null); (0, _tslib.__decorate)([_autobind["default"]], FilterSelect.prototype, "handleBlur", null); (0, _tslib.__decorate)([_autobind["default"]], FilterSelect.prototype, "handleFieldChange", null); (0, _tslib.__decorate)([_autobind["default"]], FilterSelect.prototype, "handleInput", null); (0, _tslib.__decorate)([_autobind["default"]], FilterSelect.prototype, "handleFieldEnterDown", null); (0, _tslib.__decorate)([_autobind["default"]], FilterSelect.prototype, "handleKeyDown", null); (0, _tslib.__decorate)([_autobind["default"]], FilterSelect.prototype, "handleEnterDown", null); (0, _tslib.__decorate)([_mobx.action], FilterSelect.prototype, "setSelectField", null); (0, _tslib.__decorate)([_mobx.action], FilterSelect.prototype, "setQueryValue", null); (0, _tslib.__decorate)([_mobx.action], FilterSelect.prototype, "clear", null); FilterSelect = (0, _tslib.__decorate)([_mobxReact.observer], FilterSelect); var _default = FilterSelect; exports["default"] = _default; //# sourceMappingURL=FilterSelect.js.map