knk
Version:
react components based on react
204 lines (200 loc) • 8.19 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _react = _interopRequireWildcard(require("react"));
var _antd = require("antd");
var _api = require("../../../common/api");
var _tool = require("../../../common/tool");
require("../../../style/ajax_tree_select.less");
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
/**
* 异步树组件
*/
var SHOW_PARENT = _antd.TreeSelect.SHOW_PARENT,
TreeNode = _antd.TreeSelect.TreeNode;
var AjaxTreeSelect = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
var isOpen = _react.default.useRef(true);
var _useState = (0, _react.useState)(false),
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
loading = _useState2[0],
setLoading = _useState2[1];
var _useState3 = (0, _react.useState)([]),
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
treeData = _useState4[0],
setTreeData = _useState4[1];
(0, _react.useEffect)(function () {
handleGetTreeData();
return function () {
isOpen.current = false;
};
}, []);
var handleGetTreeData = function handleGetTreeData() {
var apiPath = props.apiPath,
apiData = props.apiData,
apiMethod = props.apiMethod,
treeNameKey = props.treeNameKey,
treeValueKey = props.treeValueKey,
treeChildren = props.treeChildren;
setLoading(true);
(0, _api.fetch)(apiPath, apiData, apiMethod).then(function (data) {
var dataArr = [];
if (data.data) {
dataArr = Array.isArray(data.data) ? data.data : [data.data];
}
var buildTreeData = dataArr.map(function (item) {
return {
title: treeNameKey ? item[treeNameKey] : item.name,
value: treeValueKey ? item[treeValueKey] : item.groupId,
key: treeValueKey ? item[treeValueKey] : item.groupId,
children: buildChildData(item[treeChildren])
};
});
if (!multiple && !checkable) {
buildTreeData.unshift({
title: '请选择',
value: '',
key: 'all',
children: []
});
}
// 判断如果卸载,则不再设置数据
if (!isOpen.current) return;
setTreeData(buildTreeData);
}).catch(function (err) {
if (!isOpen.current) return;
_tool.log.error(err);
_antd.message.error("\u83B7\u53D6\u6570\u636E\u5931\u8D25:".concat(err.message) || '');
}).finally(function () {
if (!isOpen.current) return;
setLoading(false);
});
function buildChildData(child) {
if (!child || !Array.isArray(child)) return [];
return Object.keys(child).map(function (groupId) {
var item = child[groupId];
return {
title: treeNameKey ? item[treeNameKey] : item.name,
value: treeValueKey ? item[treeValueKey] : item.groupId,
key: treeValueKey ? item[treeValueKey] : item.groupId,
children: buildChildData(item[treeChildren])
};
});
}
};
var handleChange = function handleChange(groupIds) {
var onChange = props.onChange;
onChange(groupIds);
};
// 异步加载数据
var onLoadData = function onLoadData(treeNode) {
var apiPath = props.apiPath,
apiMethod = props.apiMethod,
treeChildren = props.treeChildren,
treeValueKey = props.treeValueKey,
parentId = props.parentId;
return new Promise(function (resolve) {
var nodeValue = treeNode.props[treeValueKey];
if (treeNode.props[treeChildren] && treeNode.props[treeChildren].length) {
resolve(true);
return;
}
var sendData = {};
sendData[parentId || 'parentId'] = nodeValue;
(0, _api.fetch)(apiPath, sendData, apiMethod).then(function (res) {
var data = res && res.data || [];
if (data.length) {
var buildTreeNode = function buildTreeNode(item) {
var len = item.length;
for (var i = 0; i < len; i++) {
if (item[i][treeChildren] && item[i][treeChildren].length) {
buildTreeNode(item[i][treeChildren]);
}
if (item[i][treeValueKey] === nodeValue) {
item[i][treeChildren] = data;
break;
}
}
};
buildTreeNode(data);
}
// 判断如果卸载,则不再设置数据
if (!isOpen.current) return;
setTreeData(data);
resolve(true);
}).catch(function (err) {
if (!isOpen.current) return;
_tool.log.error(err);
_antd.message.error("\u83B7\u53D6\u6570\u636E\u5931\u8D25:".concat(err.message) || '');
}).finally(function () {
if (!isOpen.current) return;
setLoading(false);
});
});
};
// 处理展示
var renderTreeNodes = function renderTreeNodes(data) {
return data && data.length ? data.map(function (item) {
if (item.children && item.children.length) {
return /*#__PURE__*/_react.default.createElement(TreeNode, {
key: item.key,
title: item.title,
value: item.value
}, item.children && item.children.length ? renderTreeNodes(item.children) : '');
}
return /*#__PURE__*/_react.default.createElement(TreeNode, (0, _extends2.default)({}, item, {
key: item.key,
title: item.title,
value: item.value
}));
}) : '';
};
var value = props.value,
placeholder = props.placeholder,
disabled = props.disabled,
multiple = props.multiple,
checkable = props.checkable,
showSearch = props.showSearch,
allowClear = props.allowClear,
isOnLoad = props.isOnLoad,
isSelectParent = props.isSelectParent,
dropdownStyle = props.dropdownStyle,
maxTagCount = props.maxTagCount;
var onLoadProps = isOnLoad ? {
loadData: onLoadData
} : {};
return /*#__PURE__*/_react.default.createElement(_antd.Spin, {
spinning: loading,
className: !isSelectParent ? 'app-tree-select-no-parent' : '',
ref: ref
}, /*#__PURE__*/_react.default.createElement(_antd.TreeSelect, (0, _extends2.default)({
showSearch: showSearch,
value: value,
dropdownStyle: dropdownStyle,
placeholder: placeholder,
maxTagCount: maxTagCount,
onChange: handleChange,
treeNodeFilterProp: "title",
notFoundContent: "\u672A\u627E\u5230\u6570\u636E",
multiple: multiple,
treeCheckable: checkable,
allowClear: allowClear,
disabled: disabled
}, onLoadProps), renderTreeNodes(treeData)));
});
AjaxTreeSelect.defaultProps = {
treeChildren: 'children',
showCheckedStrategy: SHOW_PARENT,
dropdownStyle: {
maxHeight: 400,
overflow: 'auto'
},
placeholder: '请选择'
};
var _default = exports.default = AjaxTreeSelect;