UNPKG

knk

Version:

react components based on react

204 lines (200 loc) 8.19 kB
"use strict"; 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;