UNPKG

choerodon-ui

Version:

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

376 lines (319 loc) 13.4 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _tslib = require("tslib"); var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _classnames = _interopRequireDefault(require("classnames")); var _mobx = require("mobx"); var _mobxReact = require("mobx-react"); var _tree = _interopRequireDefault(require("../../../lib/tree")); var _TreeNode = _interopRequireDefault(require("./TreeNode")); var _Select2 = require("../select/Select"); var _normalizeTreeNodes = _interopRequireDefault(require("./normalizeTreeNodes")); var _autobind = _interopRequireDefault(require("../_util/autobind")); var _isIE = _interopRequireDefault(require("../_util/isIE")); var _tree2 = require("../tree"); var _util = require("../tree/util"); var _icon = _interopRequireDefault(require("../icon")); function _createSuper(Derived) { function isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; } var TreeSelect = /*#__PURE__*/ function (_Select) { (0, _inherits2["default"])(TreeSelect, _Select); var _super = _createSuper(TreeSelect); function TreeSelect() { var _this; (0, _classCallCheck2["default"])(this, TreeSelect); _this = _super.apply(this, arguments); _this.stateForceRenderKeys = []; return _this; } (0, _createClass2["default"])(TreeSelect, [{ key: "handleSearch", value: function handleSearch(text) { if (text) { var options = this.options; var idField = options.props.idField; this.expandedKeys = options.map(function (r) { return String(r.get(idField)); }); } } }, { key: "handleExpand", value: function handleExpand(keys) { this.expandedKeys = keys; } }, { key: "handleTreeSelect", value: function handleTreeSelect(_e, _ref) { var _this2 = this; var node = _ref.node; var record = node.record, disabled = node.disabled, key = node.key; if (key === _Select2.MORE_KEY) { var options = this.options; options.queryMore(options.currentPage + 1); } else if (!disabled) { var multiple = this.multiple; if (multiple) { if (this.isSelected(record)) { var records = record.treeReduce(function (array, r) { return _this2.isSelected(r) ? array.concat(r) : array; }, []); var parents = record.parents.filter(function (parent) { return _this2.isSelected(parent); }); this.unChoose(records.concat(parents)); } else { var _records = record.treeReduce(function (array, r) { return _this2.isSelected(r) ? array : array.concat(r); }, []); var _parents = []; record.parents.every(function (parent, index) { var children = parent.children; if (children && children.every(function (child) { return (index === 0 ? _records.includes(child) : _parents.includes(child)) || _this2.isSelected(child); })) { _parents.push(parent); return true; } return false; }); this.choose(_records.concat(_parents)); } } else { this.choose(record); } } } }, { key: "handleTreeNode", value: function handleTreeNode(e) { var onOption = this.props.onOption; var props = onOption(e) || {}; props.className = (0, _classnames["default"])(props.className, "".concat(this.getMenuPrefixCls(), "-item")); return props; } }, { key: "handleLoadData", value: function handleLoadData(event) { var loadData = this.props.loadData; var dataSet = this.options; var promises = []; if (dataSet) { var _dataSet$props = dataSet.props, idField = _dataSet$props.idField, parentField = _dataSet$props.parentField; var record = event.props.record; if (idField && parentField && record && !record.children) { var id = record.get(idField); promises.push(dataSet.queryMore(-1, (0, _defineProperty2["default"])({}, parentField, id))); } } if (loadData) { promises.push(loadData(event)); } return Promise.all(promises); } }, { key: "getMenu", value: function getMenu() { var menuProps = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var options = this.options; var menuPrefixCls = this.getMenuPrefixCls(); var textField = this.textField, selectedKeys = this.selectedKeys, expandedKeys = this.expandedKeys, multiple = this.multiple, forceRenderKeys = this.forceRenderKeys, text = this.text, _this$props = this.props, dropdownMenuStyle = _this$props.dropdownMenuStyle, _this$props$optionRen = _this$props.optionRenderer, optionRenderer = _this$props$optionRen === void 0 ? _tree2.defaultRenderer : _this$props$optionRen, optionsFilter = _this$props.optionsFilter, treeDefaultExpandAll = _this$props.treeDefaultExpandAll, treeDefaultExpandedKeys = _this$props.treeDefaultExpandedKeys, treeCheckable = _this$props.treeCheckable, async = _this$props.async, loadData = _this$props.loadData; var menuDisabled = this.isDisabled(); /** * fixed when ie the scroll width would cover the item width */ var IeMenuStyle = !this.dropdownMatchSelectWidth && (0, _isIE["default"])() ? { padding: '.08rem' } : {}; var treeData = (0, _util.getTreeNodes)(options, this.treeData, (0, _toConsumableArray2["default"])(forceRenderKeys.values()), optionRenderer, // @ts-ignore this.handleTreeNode, async || !!loadData, textField, treeDefaultExpandAll, optionsFilter, this.matchRecordBySearch, text); if (!treeData || !treeData.length) { return _react["default"].createElement("div", { className: menuPrefixCls }, _react["default"].createElement("div", { className: "".concat(menuPrefixCls, "-item ").concat(menuPrefixCls, "-item-disabled") }, this.loading ? ' ' : this.getNotFoundContent())); } if (options.paging && options.currentPage < options.totalPage) { treeData.push({ key: _Select2.MORE_KEY, eventKey: _Select2.MORE_KEY, title: _react["default"].createElement(_icon["default"], { type: "more_horiz" }), className: "".concat(this.getMenuPrefixCls(), "-item ").concat(menuPrefixCls, "-item-more"), isLeaf: true }); } var props = {}; if (expandedKeys) { props.expandedKeys = expandedKeys.slice(); } return _react["default"].createElement(_tree["default"], (0, _extends2["default"])({ ref: this.saveMenu, ripple: true, disabled: menuDisabled, onSelect: this.handleTreeSelect, onCheck: this.handleTreeSelect, onExpand: this.handleExpand, style: (0, _objectSpread2["default"])({}, IeMenuStyle, {}, dropdownMenuStyle), selectable: true, focusable: false, treeData: treeData, defaultExpandAll: treeDefaultExpandAll, defaultExpandedKeys: treeDefaultExpandedKeys, selectedKeys: selectedKeys, checkedKeys: selectedKeys, checkable: 'treeCheckable' in this.props ? treeCheckable : multiple, className: menuPrefixCls, multiple: multiple, loadData: async ? this.handleLoadData : loadData }, props, menuProps)); } }, { key: "forceRenderKeys", get: function get() { if (this.expandedKeys) { this.stateForceRenderKeys = (0, _toConsumableArray2["default"])(new Set([].concat((0, _toConsumableArray2["default"])(this.stateForceRenderKeys), (0, _toConsumableArray2["default"])(this.expandedKeys)))); } else { this.stateForceRenderKeys = this.props.treeDefaultExpandedKeys || []; } return this.stateForceRenderKeys; } }, { key: "parentField", get: function get() { return this.getProp('parentField') || 'parentValue'; } }, { key: "idField", get: function get() { return this.getProp('idField') || this.valueField; } }, { key: "options", get: function get() { var field = this.field, textField = this.textField, valueField = this.valueField, idField = this.idField, parentField = this.parentField, multiple = this.multiple, _this$observableProps = this.observableProps, children = _this$observableProps.children, options = _this$observableProps.options; return options || field && field.options || (0, _normalizeTreeNodes["default"])({ textField: textField, valueField: valueField, disabledField: _Select2.DISABLED_FIELD, parentField: parentField, idField: idField, multiple: multiple, children: children }); } }, { key: "treeData", get: function get() { return this.optionsWithCombo.filter(function (r) { return !r.parent; }); } }, { key: "selectedKeys", get: function get() { var _this3 = this; var idField = this.idField; return this.options.reduce(function (array, r) { return _this3.isSelected(r) ? array.concat(String(r.get(idField))) : array; }, []); } }]); return TreeSelect; }(_Select2.Select); TreeSelect.displayName = 'TreeSelect'; TreeSelect.propTypes = (0, _objectSpread2["default"])({ treeCheckable: _propTypes["default"].bool, treeDefaultExpandAll: _propTypes["default"].bool, treeDefaultExpandedKeys: _propTypes["default"].arrayOf(_propTypes["default"].oneOfType([_propTypes["default"].number, _propTypes["default"].string])) }, _Select2.Select.propTypes); TreeSelect.defaultProps = (0, _objectSpread2["default"])({}, _Select2.Select.defaultProps, { suffixCls: 'tree-select', dropdownMatchSelectWidth: false, reverse: false }); TreeSelect.TreeNode = _TreeNode["default"]; (0, _tslib.__decorate)([_mobx.observable], TreeSelect.prototype, "expandedKeys", void 0); (0, _tslib.__decorate)([_mobx.computed], TreeSelect.prototype, "forceRenderKeys", null); (0, _tslib.__decorate)([_mobx.computed], TreeSelect.prototype, "parentField", null); (0, _tslib.__decorate)([_mobx.computed], TreeSelect.prototype, "idField", null); (0, _tslib.__decorate)([_mobx.computed], TreeSelect.prototype, "options", null); (0, _tslib.__decorate)([_mobx.computed], TreeSelect.prototype, "treeData", null); (0, _tslib.__decorate)([_mobx.computed], TreeSelect.prototype, "selectedKeys", null); (0, _tslib.__decorate)([_mobx.action], TreeSelect.prototype, "handleSearch", null); (0, _tslib.__decorate)([_autobind["default"], _mobx.action], TreeSelect.prototype, "handleExpand", null); (0, _tslib.__decorate)([_autobind["default"]], TreeSelect.prototype, "handleTreeSelect", null); (0, _tslib.__decorate)([_autobind["default"]], TreeSelect.prototype, "handleTreeNode", null); (0, _tslib.__decorate)([_autobind["default"]], TreeSelect.prototype, "handleLoadData", null); (0, _tslib.__decorate)([_autobind["default"]], TreeSelect.prototype, "getMenu", null); TreeSelect = (0, _tslib.__decorate)([_mobxReact.observer], TreeSelect); var _default = TreeSelect; exports["default"] = _default; //# sourceMappingURL=TreeSelect.js.map