ming-demo3
Version:
mdf metaui web
533 lines (479 loc) • 17.8 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = exports.SearchTreeControl = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireDefault(require("react"));
var _baseui = require("@mdf/baseui");
var _TreeToolbar = _interopRequireDefault(require("./TreeToolbar"));
var TreeNode = _baseui.Tree.TreeNode;
var SearchTreeControl = function (_React$Component) {
(0, _inherits2["default"])(SearchTreeControl, _React$Component);
function SearchTreeControl(props) {
var _this;
(0, _classCallCheck2["default"])(this, SearchTreeControl);
_this = (0, _possibleConstructorReturn2["default"])(this, (0, _getPrototypeOf2["default"])(SearchTreeControl).call(this, props));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getNewDataAndMain", function (data) {
var _ref;
return [(_ref = {}, (0, _defineProperty2["default"])(_ref, _this.state.keyField, 'main'), (0, _defineProperty2["default"])(_ref, _this.state.titleField, _this.props.title), (0, _defineProperty2["default"])(_ref, _this.state.childrenField, data), _ref)];
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onCheck", function (checkedKeys) {
if (_this.props.model) _this.props.model.check(checkedKeys);
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleSearch", function () {
var _this$state = _this.state,
searchValue = _this$state.searchValue,
dataSource = _this$state.dataSource,
keyField = _this$state.keyField,
titleField = _this$state.titleField;
var _ids = [];
dataSource.forEach(function (v) {
if (v[titleField] === searchValue) {
_ids.unshift(v[keyField]);
}
});
if (_ids[0]) {
_this.setState({
selectedKeys: _ids
});
}
_this.searchSelect(_ids[0]);
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getSearchData", function (value, callback) {
var dataSource = _this.state.dataSource;
var newData = [];
var self = (0, _assertThisInitialized2["default"])(_this);
var titleField = _this.state.titleField;
function loopData(list, level) {
list.forEach(function (item, index) {
if (item.children) {
if (Array.isArray(titleField)) {
titleField.map(function (title, index) {
if (item[title].includes(value)) {
var newItem = cb.utils.extend([], item.children);
newItem.children = [];
newItem.children.push(loopSub(item.children));
newData.push(item);
}
});
} else {
if (item[titleField].includes(value)) {
var newItem = cb.utils.extend([], item.children);
newItem.children = [];
newItem.children.push(loopSub(item.children));
newData.push(item);
}
}
} else {
if (Array.isArray(titleField)) {
titleField.map(function (title, index) {
if (item[title].includes(value)) {
newData.push(item);
}
});
} else {
if (item[titleField].includes(value)) {
newData.push(item);
}
}
}
});
}
function loopSub(list) {
return list.map(function (item) {
if (item.children) {
if (Array.isArray(titleField)) {
titleField.map(function (title, index) {
if (item[title].includes(value)) {
var newItem = cb.utils.extend([], item.children);
newItem.children = [];
newItem.children.push(loopSub(item.children));
return newItem;
}
});
} else {
if (item[titleField].includes(value)) {
var newItem = cb.utils.extend([], item.children);
newItem.children = [];
newItem.children.push(loopSub(item.children));
return newItem;
}
}
} else {
if (Array.isArray(titleField)) {
titleField.map(function (title, index) {
if (item[title].includes(value)) {
return item;
}
});
} else {
if (item[titleField].includes(value)) {
return item;
}
}
}
});
}
loopData(dataSource);
_this.searchValue = value;
callback(newData);
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleSearchClick", function (e) {
_this.flag = true;
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleTreeClick", function (e) {
_this.flag = true;
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleClick", function (e) {
if (_this.flag) {
_this.flag = false;
return;
}
_this.onSelect([]);
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "clearSearchValue", function () {
_this.searchValue = '';
_this.setState({
searchValue: '',
filterData: _this.state.dataSource
});
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "renderTitleField", function (titleField, data, keyField) {
var title = [];
if (Array.isArray(titleField)) {
if (data[keyField] === 'main') {
title.push(_react["default"].createElement("span", null, data[titleField]));
} else {
titleField.map(function (item, index) {
title.push(_react["default"].createElement("span", {
style: {
paddingRight: '2px'
}
}, data[item]));
});
}
} else {
title.push(_react["default"].createElement("span", null, data[titleField]));
}
return title;
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onClick", function (model, item) {
var keyField = _this.state.keyField;
_this.props.model.select(item[keyField], model.getName());
model.fireEvent('click');
});
var filterProps = ['name'];
var placeholder = null;
var substractHeight = 0;
if (props.config) {
var config = null;
try {
config = JSON.parse(_this.props.config);
} catch (e) {
config = {};
}
if (cb.utils.isArray(config.filters)) filterProps = config.filters;
if (config.placeholder) placeholder = config.placeholder;
if (config.substractHeight) substractHeight = config.substractHeight;
}
_this.state = {
multiple: _this.props.multiple || false,
checkable: _this.props.checkable || false,
expandAll: _this.props.expandAll || false,
keyField: _this.props.keyField || 'key',
titleField: _this.props.titleField || 'title',
childrenField: _this.props.childrenField || 'children',
expandedKeys: _this.props.expandedKeys || [],
buttonGroup: _this.props.buttonGroup || [{
type: 'edit-disabled'
}],
visible: !props.bHidden,
autoExpandParent: false,
selectedKeys: [],
checkedKeys: [],
dataSource: [],
optionData: [],
renderFlag: true,
searchValue: '',
selectKey: '',
filterProps: filterProps,
placeholder: placeholder || "请输入关键字",
substractHeight: substractHeight,
filterData: [],
readOnly: _this.props.readOnly || false,
selectData: []
};
_this.selectDataSource = [];
return _this;
}
(0, _createClass2["default"])(SearchTreeControl, [{
key: "componentDidMount",
value: function componentDidMount() {
if (this.props.model) this.props.model.addListener(this);
}
}, {
key: "componentDidUpdate",
value: function componentDidUpdate() {
if (this.props.model) this.props.model.addListener(this);
}
}, {
key: "componentWillReceiveProps",
value: function componentWillReceiveProps(nextProps) {
var childrenField = this.state.childrenField;
if (!nextProps.dataSource || this.props.id === nextProps.id) return;
var states = {
dataSource: nextProps.dataSource,
optionData: nextProps.dataSource
};
if (this.state.expandAll) {
var keyField = this.state.keyField;
var expandedKeys = [];
var loop = function loop(data) {
return data.map(function (item) {
expandedKeys.push(item[keyField]);
if (item[childrenField]) loop(item[childrenField]);
});
};
loop(nextProps.dataSource);
states.expandedKeys = expandedKeys;
}
this.setState(states);
}
}, {
key: "componentWillUnmount",
value: function componentWillUnmount() {
if (this.props.model) this.props.model.removeListener(this);
}
}, {
key: "onSelect",
value: function onSelect(selectedKeys, e) {
if (this.props.onSelect) this.props.onSelect(selectedKeys, e);
if (this.props.model) this.props.model.select(selectedKeys);
}
}, {
key: "onExpand",
value: function onExpand(expandedKeys, e) {
if (e) {
this.setState({
expandedKeys: expandedKeys,
autoExpandParent: false
});
} else {
this.setState({
expandedKeys: expandedKeys,
autoExpandParent: true
});
}
}
}, {
key: "searchSelect",
value: function searchSelect(value, option) {
var _this$state2 = this.state,
selectData = _this$state2.selectData,
expandedKeys = _this$state2.expandedKeys;
var currentData = selectData.find(function (item) {
return item.id == value;
});
var newExpandedKeys = [].concat(expandedKeys);
if (currentData && currentData.parent) {
var expandedKey = currentData.parent.toString();
if (newExpandedKeys.indexOf(expandedKey) === -1) newExpandedKeys.push(expandedKey);
}
this.onExpand(newExpandedKeys);
this.onSelect([value]);
}
}, {
key: "fetch",
value: function fetch(value, callback) {
var dataSource = this.selectDataSource;
var filterProps = this.state.filterProps;
var data = [];
if (!dataSource) {
console.log("search Tree fetch of dataSource is null ! ");
return;
}
dataSource.forEach(function (ele) {
filterProps.forEach(function (field) {
if (ele[field].toString().indexOf(value) < 0) return;
data.push(ele);
});
});
callback(data);
}
}, {
key: "onSearch",
value: function onSearch(value) {
var _this2 = this;
this.setState({
searchValue: value
});
this.getSearchData(value, function (filterData) {
return _this2.setState({
filterData: filterData
});
});
}
}, {
key: "setDataSource",
value: function setDataSource(dataSource) {
this.setState({
dataSource: dataSource,
filterData: [],
searchValue: ""
});
this.searchValue = '';
if (!this.state.expandedKeys.length) {
this.setState({
expandedKeys: ['main']
});
}
}
}, {
key: "renderToolbar",
value: function renderToolbar(data, main) {
var _this3 = this;
var _this$props = this.props,
meta = _this$props.meta,
vm = _this$props.vm;
var readOnly = this.state.readOnly;
var toolbar = null;
meta.containers.map(function (item) {
if (item.cControlType.trim().toLocaleLowerCase() === 'toolbar') {
var controls = item.controls;
if (main) {
controls = item.controls.filter(function (item) {
return item.cItemName === 'btnAdd';
});
}
toolbar = _react["default"].createElement(_TreeToolbar["default"], {
controls: controls,
model: vm,
disabled: readOnly,
item: data,
iconClick: _this3.onClick
});
}
});
return toolbar;
}
}, {
key: "render",
value: function render() {
var _this4 = this;
var _this$state3 = this.state,
titleField = _this$state3.titleField,
keyField = _this$state3.keyField,
childrenField = _this$state3.childrenField,
readOnly = _this$state3.readOnly;
var loop = function loop(data) {
return data.map(function (item) {
if (item[childrenField]) {
return _react["default"].createElement(TreeNode, {
disabled: !readOnly,
data: item,
title: _react["default"].createElement("div", {
className: "tree-title",
onClick: readOnly ? function (e) {
_this4.onSelect(item[keyField], e);
} : undefined
}, _react["default"].createElement("span", {
className: "refer-tree-switch iconfont "
}), _this4.renderTitleField(titleField, item, keyField), item[keyField] === 'main' ? _this4.renderToolbar(item, true) : _this4.renderToolbar(item)),
key: item[keyField]
}, loop(item[childrenField]));
}
return _react["default"].createElement(TreeNode, {
data: item,
title: _react["default"].createElement("div", {
className: "tree-title",
onClick: readOnly ? function (e) {
_this4.onSelect(item[keyField], e);
} : undefined
}, _react["default"].createElement("span", {
className: "refer-tree-point"
}), _this4.renderTitleField(titleField, item), _this4.renderToolbar(item)),
key: item[keyField],
isLeaf: item.isLeaf,
disabled: !readOnly
});
});
};
var loopData = this.getNewDataAndMain(this.searchValue ? this.state.filterData : this.state.dataSource);
var treeNodes = loop(loopData);
var treeProps = {
multiple: this.state.multiple,
checkable: this.state.checkable,
expandedKeys: this.state.expandedKeys,
selectedKeys: this.state.selectedKeys,
checkedKeys: this.state.checkedKeys,
autoExpandParent: this.state.autoExpandParent
};
if (treeProps.selectedKeys.length) {
treeProps.selectedKeys = treeProps.selectedKeys.map(function (v) {
return v + '';
});
}
var style = this.state.visible ? {} : {
display: "none"
};
var height = this.props.height - this.state.substractHeight;
var tree3style = {};
return _react["default"].createElement("div", {
className: "bg-white border-r",
style: {
height: height
}
}, _react["default"].createElement("div", {
onClick: this.handleSearchClick,
className: "search-tree-2"
}, this.state.searchValue ? _react["default"].createElement(_baseui.Button, {
icon: "close-circle",
onClick: this.clearSearchValue,
style: {
cursor: "pointer",
right: '10px'
}
}) : null, _react["default"].createElement(_baseui.Button, {
icon: "search",
onClick: function onClick() {
_this4.handleSearch();
},
disabled: !readOnly
}), _react["default"].createElement(_baseui.Select, {
placeholder: this.state.placeholder,
mode: "combobox",
value: this.state.searchValue,
onSearch: function onSearch(value) {
return _this4.onSearch(value);
},
disabled: !readOnly
})), _react["default"].createElement("div", {
style: tree3style,
onClick: this.handleTreeClick,
className: "search-tree-3 edit"
}, _react["default"].createElement(_baseui.Tree, (0, _extends2["default"])({
key: treeNodes.length,
style: style,
onExpand: function onExpand(expandedKeys, e) {
return _this4.onExpand(expandedKeys, e);
},
onCheck: this.onCheck
}, treeProps), treeNodes)));
}
}]);
return SearchTreeControl;
}(_react["default"].Component);
exports.SearchTreeControl = SearchTreeControl;
;
var _default = SearchTreeControl;
exports["default"] = _default;
//# sourceMappingURL=NccSearchTree.js.map