UNPKG

@flatbiz/antd

Version:
1,123 lines (1,107 loc) 48.7 kB
/* eslint-disable */ import './../button-operate/index.css'; import './../dialog-confirm/index.css'; import './../fba-hooks/index.css'; import './../fba-utils/index.css'; import './../input-search-wrapper/index.css'; import './../request-status/index.css'; import './index.css'; /*! @flatjs/forge MIT @flatbiz/antd */ import { treeToArray, arrayToMap, isUndefinedOrNull, treeToTiledArray, treeLeafParentsArray, isNotEmptyArray, treeToTiledMap, getUuid, toArray, treeFilter, findParentsElement, attachPropertiesToComponent } from '@flatbiz/utils'; import { isArray } from '@dimjs/lang/is-array'; import { Model } from '@dimjs/model-react'; import { arrayRemove } from '@dimjs/utils/array/array-remove'; import _CaretDownFilled from '@ant-design/icons/es/icons/CaretDownFilled.js'; import { classNames } from '@dimjs/utils/class-names/class-names'; import { isString } from '@dimjs/lang/is-string'; import { c as _toConsumableArray, b as _objectSpread2, i as _defineProperty, _ as _objectWithoutProperties, a as _slicedToArray } from '../_rollupPluginBabelHelpers-BspM60Sw.js'; import { extend } from '@dimjs/utils/extend/extend'; import { get } from '@dimjs/utils/get/get'; import { forwardRef, useMemo, useState, useRef, useImperativeHandle, Fragment, isValidElement } from 'react'; import { useUpdate, useSafeState, useMemoizedFn, useDeepCompareEffect, useUpdateEffect, useDebounceFn } from 'ahooks'; import { Spin, Tree, Button, message } from 'antd'; import { cloneState } from '@dimjs/model'; import { a as ButtonOperate } from '../button-operate-BLs4OaUe.js'; import { fbaHooks } from '../fba-hooks/index.js'; import { I as InputSearchWrapper } from '../input-search-wrapper-Fw29CABR.js'; import { R as RequestStatus } from '../request-status-Cjtei7Bl.js'; import { walkThroughTree } from '@dimjs/utils/tree/walk-through-tree'; import { isObject } from '@dimjs/lang/is-object'; import 'dequal'; import { jsxs, jsx } from 'react/jsx-runtime'; import '@ant-design/icons/es/icons/MoreOutlined.js'; import '@dimjs/lang/is-undefined'; import '@dimjs/lang/is-plain-object'; import '@dimjs/lang/is-promise'; import '../button-wrapper-BGjkUPpk.js'; import '@ant-design/icons/es/icons/LoadingOutlined.js'; import '../config-provider-wrapper-Bxh9JdL4.js'; import 'antd/es/locale/en_US.js'; import 'antd/es/locale/zh_CN.js'; import 'dayjs'; import 'dayjs/plugin/advancedFormat.js'; import 'dayjs/plugin/customParseFormat.js'; import 'dayjs/plugin/localeData.js'; import 'dayjs/plugin/utc.js'; import 'dayjs/plugin/weekday.js'; import 'dayjs/plugin/weekOfYear.js'; import 'dayjs/plugin/weekYear.js'; import '../fba-utils-CusZeveq.js'; import 'dayjs/locale/en.js'; import 'dayjs/locale/zh-cn.js'; import '../dropdown-menu-wrapper-DlstqgER.js'; import '@ant-design/icons/es/icons/ExclamationCircleFilled.js'; import '../dialog-confirm-CfR3Y2vA.js'; import '../dialog-modal-CGMNBSgq.js'; import 'react-dom/client'; import '../flex-layout-BGtMe7zr.js'; import '../use-responsive-point-Bp3D3lZT.js'; import '../text-overflow-B4NevAuv.js'; var defaultState = { treeList: [], treeTiledArray: [], treeTiledArrayMap: {}, queryIsEmpty: false }; var TreeWrapperModel = { actions: { setTreeList: function setTreeList(params) { return function (state) { state.treeList = params.treeList || []; state.treeTiledArray = treeToArray(state.treeList, params.childrenName); state.treeTiledArrayMap = arrayToMap(state.treeTiledArray, params.valueName); state.requestStatus = 'request-success'; }; }, resetTreeList: function resetTreeList() { return function (state) { state.treeList = []; state.treeTiledArray = []; state.treeTiledArrayMap = {}; }; }, changeRequestStatus: function changeRequestStatus(params) { return function (state) { state.requestStatus = params.status; if (params.status === 'request-error') { state.treeList = []; state.treeTiledArray = []; state.treeTiledArrayMap = {}; state.requestErrorMessage = params.errorMessage || '数据查询异常'; } else { state.requestErrorMessage = undefined; } }; }, treeListAppendChildren: function treeListAppendChildren(params) { return function (state) { var tiledArray = treeToArray(state.treeList, params.childrenName); var treeTiledArrayMap = arrayToMap(tiledArray, params.valueName); var target = treeTiledArrayMap[params.value]; if (target) { if (isArray(params.appendList) && params.appendList.length > 0) { target[params.childrenName] = params.appendList; } else { target.isLeaf = true; } } state.treeTiledArray = tiledArray; state.treeTiledArrayMap = treeTiledArrayMap; }; } }, state: defaultState }; var treeWrapperModels = {}; /** * ``` * 使用方式 * const [state, actions] = useTreeWrapperModel('key值').useStore(); * ``` */ var treeWrapperModel = function treeWrapperModel(key) { if (!treeWrapperModels[key]) { treeWrapperModels[key] = Model(TreeWrapperModel); } return treeWrapperModels[key]; }; var getTreeDataList = function getTreeDataList(modelKey) { var state = treeWrapperModel(modelKey).getState(); return state.treeList; }; var getDefaultExpandAllKeys = function getDefaultExpandAllKeys(treeList, fieldNames) { var allValues = treeToArray(treeList, fieldNames.children).filter(function (item) { var childrenValue = item[fieldNames.children]; return childrenValue && childrenValue.length > 0; }).map(function (item) { return item[fieldNames.value]; }); return allValues; }; var getExpandedKeys = function getExpandedKeys(value, treeList, fieldNames) { var tiledArray = treeToTiledArray(treeList, fieldNames); return treeLeafParentsArray(value, tiledArray, true, { value: 'value', parentValue: 'parentValue' }).filter(function (item) { var childrenValue = item[fieldNames.children]; return childrenValue && childrenValue.length > 0; }).map(function (item) { return item.value; }); }; var getVauleList = function getVauleList(data, labelInValueFieldNames) { var tempList = isUndefinedOrNull(data) ? [] : data; tempList = isArray(tempList) ? tempList : [tempList]; tempList = tempList.map(function (item) { if (isObject(item)) return item[labelInValueFieldNames.value]; return item; }); return tempList; }; var onTreeDrop = function onTreeDrop(dataList, fieldNames, info) { var dropKey = info.node.key; var dragKey = info.dragNode.key; var dropPos = info.node.pos.split('-'); var dropPosition = info.dropPosition - Number(dropPos[dropPos.length - 1]); var treeKeyName = fieldNames.value; var treeChildrenName = fieldNames.children; var _loop = function loop(data, key, callback) { for (var i = 0; i < data.length; i++) { if (data[i][treeKeyName] === key) { return callback(data[i], i, data); } if (data[i][treeChildrenName]) { _loop(data[i][treeChildrenName], key, callback); } } }; var data = cloneState(dataList); // Find dragObject var dragObj; _loop(data, dragKey, function (item, index, arr) { arr.splice(index, 1); dragObj = item; }); if (!info.dropToGap) { // Drop on the content _loop(data, dropKey, function (item) { item[treeChildrenName] = item[treeChildrenName] || []; // where to insert 示例添加到头部,可以是随意位置 item[treeChildrenName].unshift(dragObj); }); } else if ((info.node.props.children || []).length > 0 && // Has children info.node.props.expanded && // Is expanded dropPosition === 1 // On the bottom gap ) { _loop(data, dropKey, function (item) { item[treeChildrenName] = item[treeChildrenName] || []; // where to insert 示例添加到头部,可以是随意位置 item[treeChildrenName].unshift(dragObj); // in previous version, we use item.children.push(dragObj) to insert the // item to the tail of the children }); } else { var ar = []; var i; _loop(data, dropKey, function (_item, index, arr) { ar = arr; i = index; }); if (dropPosition === -1) { ar.splice(i, 0, dragObj); } else { ar.splice(i + 1, 0, dragObj); } } return { dataList: data, dragNodeData: dragNodeData(dragKey, data, fieldNames) }; }; var dragNodeData = function dragNodeData(dorpNodeId, dataList, fieldNames) { var id = fieldNames.value; var children = fieldNames.children; walkThroughTree(_defineProperty(_defineProperty({}, id, undefined), children, dataList), function (node, index, _parent) { node['__index'] = index; node['__parentId'] = _parent === null || _parent === void 0 ? void 0 : _parent[id]; }, children); var tileList = treeToArray(dataList, children); var target = tileList.find(function (item) { return item[id] === dorpNodeId; }); return { parentId: target === null || target === void 0 ? void 0 : target['__parentId'], id: target === null || target === void 0 ? void 0 : target[id], index: target === null || target === void 0 ? void 0 : target['__index'] }; }; /** * 由于树节点过滤后,选中了父节点不一定是全部子节点,此处进行筛查 */ var getActualSelectKeyList = function getActualSelectKeyList(checkedValueList, treeTiledArrayMap, chidlrenKey, valueKey) { var leafValueDataMap = {}; var hasChildrenList = []; var retainHasChildrenValueList = []; checkedValueList.forEach(function (item) { var _treeTiledArrayMap$it; if (isNotEmptyArray((_treeTiledArrayMap$it = treeTiledArrayMap[item]) === null || _treeTiledArrayMap$it === void 0 ? void 0 : _treeTiledArrayMap$it[chidlrenKey])) { hasChildrenList.push(item); } else { leafValueDataMap[item] = item; } }); if (hasChildrenList.length > 0) { hasChildrenList.forEach(function (item) { var childrenTiledList = treeToArray(treeTiledArrayMap[item][chidlrenKey], chidlrenKey); if (Object.keys(leafValueDataMap).length > childrenTiledList.length) { var targetList = childrenTiledList.filter(function (item) { return checkedValueList.find(function (temp) { return temp === item[valueKey]; }); }); if (targetList.length === childrenTiledList.length) { retainHasChildrenValueList.push(item); } } }); } return checkedValueList.filter(function (item) { return retainHasChildrenValueList.find(function (temp) { return temp == item; }) || leafValueDataMap[item]; }); }; /** 移除指定节点以及所有子节点 */ var removeTargetNodeAndAllChildrenNode = function removeTargetNodeAndAllChildrenNode(checkedValueList, awitDeleteNode, chidlrenKey, valueKey) { var awitDeleteTieldDataMap = treeToTiledMap([awitDeleteNode], { value: valueKey, children: chidlrenKey }); return checkedValueList.filter(function (item) { return !awitDeleteTieldDataMap[item]; }); }; /** 移除父节点全选下的叶子节点 */ var removeAllSelectLeafNode = function removeAllSelectLeafNode(checkedValueList, treeTiledArrayMap, chidlrenKey, valueKey) { var awitDeleteCheckedValueMap = {}; checkedValueList.forEach(function (item) { var _treeTiledArrayMap$it2; var childrenList = (_treeTiledArrayMap$it2 = treeTiledArrayMap[item]) === null || _treeTiledArrayMap$it2 === void 0 ? void 0 : _treeTiledArrayMap$it2[chidlrenKey]; if (isNotEmptyArray(childrenList)) { // hasChildrenList.push(item); var targetMap = treeToTiledMap(childrenList, { value: valueKey, children: chidlrenKey }); awitDeleteCheckedValueMap = _objectSpread2(_objectSpread2({}, awitDeleteCheckedValueMap), targetMap); } }); return checkedValueList.filter(function (item) { return !awitDeleteCheckedValueMap[item]; }); }; /** 移除所有的父节点 */ var removeAllParentNode = function removeAllParentNode(checkedValueList, treeTiledArrayMap, chidlrenKey) { return checkedValueList.filter(function (item) { return !isNotEmptyArray(treeTiledArrayMap[item][chidlrenKey]); }); }; /** values中的数据可能存在缺少父节点下的子节点情况,此处补齐 */ var completionParentChildrenNode = function completionParentChildrenNode(values, treeTiledArrayMap, chidlrenKey, valueKey) { var allValues = _toConsumableArray(values); values.forEach(function (item) { var _treeTiledArrayMap$it3; var childrenList = (_treeTiledArrayMap$it3 = treeTiledArrayMap[item]) === null || _treeTiledArrayMap$it3 === void 0 ? void 0 : _treeTiledArrayMap$it3[chidlrenKey]; if (isNotEmptyArray(childrenList)) { var targetList = treeToArray(childrenList, chidlrenKey); allValues = allValues.concat(targetList.map(function (temp) { return temp[valueKey]; })); } }); return Array.from(new Set(allValues)); }; var _excluded = ["style", "serviceConfig", "effectDependencyList", "selectorTreeList", "value", "onChange", "modelKey", "checkableResponseParentNode", "checkable", "onSelectorTreeListChange", "onRequestResponseChange", "treeItemDataAdapter", "searchValue", "showSearch", "searchPlaceholder", "requestMessageConfig", "labelInValue", "disabledCanUse", "menuTriggerType", "initRootExpand", "searchResultType", "onDropNodeHandle", "onDropPrev", "labelRender", "searchStyle", "className", "defaultExpandAll", "menus", "customSearchRule", "checkableType", "clickParentNodeToggleExpand", "disableNodeSelect", "required", "executeOnChangeInRenderFirstValue"]; var compareArrays = function compareArrays(arr1, arr2) { var sortedArr1 = arr1.slice().sort(); var sortedArr2 = arr2.slice().sort(); return JSON.stringify(sortedArr1) === JSON.stringify(sortedArr2); }; /** * Tree包装组件,默认返回父节点,可配置不返回 * ``` * 1. treeNode内置字段说明(如需要相关功能,可在接口中添加固定字段) * a. disabled 禁掉响应 * b. isLeaf 设置为叶子节点 (设置了 loadData 时有效)。为 false 时会强制将其作为父节点 * c. disableCheckbox checkable模式下,treeNode复选框是否可选 * 2. 当设置selectorTreeList属性后,serviceConfig将失效 * 3. checkable=true,为多选模式 * 4. 设置value后,组件显示受控 * 5. 设置loadDataFlag=true,会动态获取children,当treeNode中包含isLeaf=true字段,表示为叶子节点,没有children了 * 6. 内置 onDrop 事件已处理数组排序,通过 onDropNodeHandle 事件可获取操作节点排序数据;自定义onDrop后,内置onDrop失效 * ``` */ var TreeWrapper$1 = /*#__PURE__*/forwardRef(function (props, ref) { var style = props.style, serviceConfig = props.serviceConfig, effectDependencyList = props.effectDependencyList, selectorTreeList = props.selectorTreeList, value = props.value, onChange = props.onChange, modelKey = props.modelKey, _props$checkableRespo = props.checkableResponseParentNode, checkableResponseParentNode = _props$checkableRespo === void 0 ? true : _props$checkableRespo, checkable = props.checkable, onSelectorTreeListChange = props.onSelectorTreeListChange, onRequestResponseChange = props.onRequestResponseChange, treeItemDataAdapter = props.treeItemDataAdapter, searchValue = props.searchValue, showSearch = props.showSearch, searchPlaceholder = props.searchPlaceholder, requestMessageConfig = props.requestMessageConfig, labelInValue = props.labelInValue, disabledCanUse = props.disabledCanUse, menuTriggerType = props.menuTriggerType, initRootExpand = props.initRootExpand, searchResultType = props.searchResultType, onDropNodeHandle = props.onDropNodeHandle, onDropPrev = props.onDropPrev, labelRender = props.labelRender, searchStyle = props.searchStyle, className = props.className, defaultExpandAll = props.defaultExpandAll, menus = props.menus, customSearchRule = props.customSearchRule, checkableType = props.checkableType, clickParentNodeToggleExpand = props.clickParentNodeToggleExpand, disableNodeSelect = props.disableNodeSelect, required = props.required, executeOnChangeInRenderFirstValue = props.executeOnChangeInRenderFirstValue, otherProps = _objectWithoutProperties(props, _excluded); var forceUpdate = useUpdate(); var modelKeyInner = useMemo(function () { return modelKey || getUuid(); }, [modelKey]); // eslint-disable-next-line no-prototype-builtins var hasSelectorTreeList = props.hasOwnProperty('selectorTreeList'); var newServiceConfig = serviceConfig || {}; var newEffectDependencyList = effectDependencyList || []; var _useState = useState([]), _useState2 = _slicedToArray(_useState, 2), treeExpandedKeys = _useState2[0], setTreeExpandedKeys = _useState2[1]; var _treeWrapperModel$use = treeWrapperModel(modelKeyInner).useStore(), _treeWrapperModel$use2 = _slicedToArray(_treeWrapperModel$use, 2), state = _treeWrapperModel$use2[0], actions = _treeWrapperModel$use2[1]; var _useSafeState = useSafeState(false), _useSafeState2 = _slicedToArray(_useSafeState, 2), loading = _useSafeState2[0], setLoading = _useSafeState2[1]; var requestPreKey = "request-progress-".concat(modelKeyInner); var searchTypeHighlight = searchResultType === 'highlight'; var fieldNames = useMemo(function () { return _objectSpread2({ label: 'label', value: 'value', children: 'children' }, props.fieldNames); }, [props.fieldNames]); var menuTriggerTypeNew = menuTriggerType === undefined ? 'click' : menuTriggerType; var responseFirstRef = useRef(true); var innerValueListRef = useRef(undefined); var labelInValueFieldNamesMerge = useMemo(function () { return { label: 'label', value: 'value' }; }, []); // tree 搜索值 var _useState3 = useState(), _useState4 = _slicedToArray(_useState3, 2), treeSearchValue = _useState4[0], setTreeSearchValue = _useState4[1]; var valueList = useMemo(function () { return getVauleList(value, labelInValueFieldNamesMerge); }, [labelInValueFieldNamesMerge, value]); fbaHooks.useEffectCustom(function () { if (state.treeList.length > 0) { if (responseFirstRef.current && labelInValue && executeOnChangeInRenderFirstValue && valueList.length > 0) { var dataList = []; var originalList = []; valueList.forEach(function (item) { var target = state.treeTiledArrayMap[item]; if (target) { originalList.push(target); dataList.push(_defineProperty(_defineProperty({}, labelInValueFieldNamesMerge.label, target[fieldNames.label]), labelInValueFieldNamesMerge.value, target[fieldNames.value])); } }); if (checkable) { var _props$onChange; (_props$onChange = props.onChange) === null || _props$onChange === void 0 || _props$onChange.call(props, dataList ? dataList : undefined, originalList); } else { var _props$onChange2; (_props$onChange2 = props.onChange) === null || _props$onChange2 === void 0 || _props$onChange2.call(props, dataList ? dataList[0] : undefined, originalList[0]); } } if (responseFirstRef.current && valueList.length === 0) { responseFirstRef.current = false; if (defaultExpandAll) { setTreeExpandedKeys(getDefaultExpandAllKeys(state.treeList, fieldNames)); return; } else if (initRootExpand && state.treeList.length) { setTreeExpandedKeys([state.treeList[0][fieldNames.value]]); return; } } if (valueList.length > 0) { responseFirstRef.current = false; if (innerValueListRef.current) { if (!compareArrays(valueList, innerValueListRef.current)) { var innerExpandedKeys = getTreeExpandedKeys(valueList); setTreeExpandedKeys(Array.from(new Set(treeExpandedKeys === null || treeExpandedKeys === void 0 ? void 0 : treeExpandedKeys.concat(innerExpandedKeys)))); } } else { var _innerExpandedKeys = getTreeExpandedKeys(valueList); setTreeExpandedKeys(Array.from(new Set(treeExpandedKeys === null || treeExpandedKeys === void 0 ? void 0 : treeExpandedKeys.concat(_innerExpandedKeys)))); } } } // 当 valueList 为空时,不去清除treeExpandedKeys数据 }, [state.treeList, JSON.stringify(valueList)]); var valueIsEmpty = function valueIsEmpty(data) { return data === '' || isUndefinedOrNull(data); }; var serviceResponseHandle = function serviceResponseHandle(respData) { var result = respData; if (newServiceConfig.onRequestResultAdapter) { result = newServiceConfig.onRequestResultAdapter(respData); } else if (fieldNames.list) { result = get(respData, fieldNames.list, []) || []; } if (!isArray(result)) { console.warn('接口返回数据为非数组结构,确认是否需要配置fieldNames.list进行解析'); return []; } return result; }; fbaHooks.useEffectCustom(function () { setTreeSearchValue(searchValue); }, [searchValue]); var startDataSourceRequest = useMemoizedFn(function () { return new Promise(function ($return, $error) { var requiredParamsKeys, params, isEmpty, _newServiceConfig$onR, _respData, respDataListNew; var $Try_1_Post = function () { try { return $return(); } catch ($boundEx) { return $error($boundEx); } }; var $Try_1_Catch = function (error) { try { responseFirstRef.current = false; setLoading(false); void message.error(error.message || '数据查询异常...'); return $Try_1_Post(); } catch ($boundEx) { return $error($boundEx); } }; try { if (!newServiceConfig.onRequest) { throw new Error('onRequest 调用接口服务不能为空'); } requiredParamsKeys = newServiceConfig.requiredParamsKeys; params = extend({}, newServiceConfig.params); if (requiredParamsKeys) { isEmpty = requiredParamsKeys.find(function (key) { return valueIsEmpty(params[key]); }); if (isEmpty) { void actions.changeRequestStatus({ status: 'no-dependencies-params' }); console.warn("TreeWrapper\u7EC4\u4EF6\uFF1A\u53C2\u6570\uFF1A".concat(requiredParamsKeys.join('、'), "\u4E0D\u80FD\u4E3A\u7A7A")); return $return(); } } var $Try_2_Post = function () { try { return $Try_1_Post(); } catch ($boundEx) { return $Try_1_Catch($boundEx); } }; var $Try_2_Catch = function (error) { try { window[requestPreKey] = false; setLoading(false); void actions.changeRequestStatus({ status: 'request-error', errorMessage: error.message }); return $Try_2_Post(); } catch ($boundEx) { return $Try_1_Catch($boundEx); } }; try { setLoading(true); return Promise.resolve(actions.changeRequestStatus({ status: 'request-progress' })).then(function ($await_4) { try { window[requestPreKey] = true; return Promise.resolve((_newServiceConfig$onR = newServiceConfig.onRequest) === null || _newServiceConfig$onR === void 0 ? void 0 : _newServiceConfig$onR.call(newServiceConfig, params)).then(function ($await_5) { try { _respData = $await_5; onRequestResponseChange === null || onRequestResponseChange === void 0 || onRequestResponseChange(_respData); respDataListNew = serviceResponseHandle(_respData); if (respDataListNew.length === 0) { responseFirstRef.current = false; } onChangeSelectorList(respDataListNew); setLoading(false); window[requestPreKey] = false; return $Try_2_Post(); } catch ($boundEx) { return $Try_2_Catch($boundEx); } }, $Try_2_Catch); } catch ($boundEx) { return $Try_2_Catch($boundEx); } }, $Try_2_Catch); } catch (error) { $Try_2_Catch(error); } } catch (error) { $Try_1_Catch(error); } }); }); useDeepCompareEffect(function () { if (hasSelectorTreeList) return; // 当无依赖项时,如果存在缓存数据,就不在调用接口 if (newEffectDependencyList.length) { void startDataSourceRequest(); return; } var allState = treeWrapperModel(modelKeyInner).getState(); if (allState.requestStatus === 'request-success') { onSelectorTreeListChange === null || onSelectorTreeListChange === void 0 || onSelectorTreeListChange(allState.treeList); return; } // 判断相同的modelKey是否已经在请求数据中,避免重复请求 if (!window[requestPreKey]) { void startDataSourceRequest(); } else { onSelectorTreeListChange === null || onSelectorTreeListChange === void 0 || onSelectorTreeListChange(allState.treeList); } }, newEffectDependencyList); fbaHooks.useEffectCustom(function () { if (hasSelectorTreeList) { onChangeSelectorList(selectorTreeList || []); } }, [selectorTreeList]); var onChangeSelectorList = useMemoizedFn(function (dataList) { if ((dataList === null || dataList === void 0 ? void 0 : dataList.length) === 0 && state.treeList.length === 0) { void actions.changeRequestStatus({ status: 'request-success' }); return; } void actions.setTreeList({ treeList: dataList || [], childrenName: fieldNames.children, valueName: fieldNames.value }); onSelectorTreeListChange === null || onSelectorTreeListChange === void 0 || onSelectorTreeListChange(dataList); }); var getTreeExpandedKeys = function getTreeExpandedKeys(valueList, refresh) { var newTreeExpandedKeys = []; valueList.forEach(function (value) { var targetKeys = getExpandedKeys(value, state.treeList, fieldNames); newTreeExpandedKeys = newTreeExpandedKeys.concat(targetKeys); }); return newTreeExpandedKeys; }; useUpdateEffect(function () { if (treeSearchValue) { var targetList = state.treeTiledArray.filter(function (item) { var labelValue = item[fieldNames.label] || ''; if (customSearchRule) { return customSearchRule(item, treeSearchValue); } return String(labelValue).toLowerCase().includes(treeSearchValue.toLowerCase()); }); var treeExpandedKeysNew = getTreeExpandedKeys(targetList.map(function (item) { return item[fieldNames.value]; })); setTreeExpandedKeys(Array.from(new Set(treeExpandedKeysNew))); } else { setTreeExpandedKeys([]); } }, [treeSearchValue]); useImperativeHandle(ref, function () { return { onClearSelectorList: function onClearSelectorList() { void actions.resetTreeList(); }, getTreeDataList: function getTreeDataList() { return state.treeList; }, getTreeTiledArray: function getTreeTiledArray() { return state.treeTiledArray; }, getTreeTiledArrayMap: function getTreeTiledArrayMap() { return state.treeTiledArrayMap; }, onChangeExpandedKeys: function onChangeExpandedKeys(dataList) { setTreeExpandedKeys(dataList); }, onSelectAll: function onSelectAll() { var targetList = state.treeTiledArray.map(function (temp) { return temp[fieldNames.value]; }); setTreeExpandedKeys(targetList); onChange === null || onChange === void 0 || onChange(targetList, undefined, state.treeList, undefined); }, onCancelSelectAll: function onCancelSelectAll() { setTreeExpandedKeys([]); onChange === null || onChange === void 0 || onChange(undefined); }, onExpandedAll: function onExpandedAll() { var targetList = state.treeTiledArray.map(function (temp) { return temp[fieldNames.value]; }); setTreeExpandedKeys(targetList); }, onCancelExpandedAll: function onCancelExpandedAll() { setTreeExpandedKeys([]); }, onRefresh: function onRefresh() { forceUpdate(); } }; }); var onExpand = useMemoizedFn(function (expandedKeys) { setTreeExpandedKeys(expandedKeys); }); var onInnerChange = function onInnerChange(selectedKey, operateNodeData, operateAllNodeDataList, operateInfo) { innerValueListRef.current = toArray(selectedKey); if (toArray(selectedKey).length === 0) { var _props$onChange3; var nodeValue = operateInfo === null || operateInfo === void 0 ? void 0 : operateInfo.node[fieldNames.value]; var target = state.treeTiledArrayMap[nodeValue]; (_props$onChange3 = props.onChange) === null || _props$onChange3 === void 0 || _props$onChange3.call(props, undefined, target, [target], operateInfo); } else { var _props$onChange4; (_props$onChange4 = props.onChange) === null || _props$onChange4 === void 0 || _props$onChange4.call(props, selectedKey, operateNodeData, operateAllNodeDataList, operateInfo); } }; var onTreeChangeHandle = useMemoizedFn(function (checkedData, operateInfo) { // 最终checkValueList var finalCheckedValueList = []; // 完整checkValueList var completeCheckedValueList = []; if (checkable) { finalCheckedValueList = props.checkStrictly ? checkedData.checked : checkedData; } else { finalCheckedValueList = checkedData; if (required && !toArray(checkedData).length) { return; } if (disableNodeSelect) { var target = state.treeTiledArrayMap[checkedData[0]]; var x = target ? disableNodeSelect(target) : false; if (x) { return; } } } finalCheckedValueList = toArray(finalCheckedValueList); if (!checkable) { completeCheckedValueList = finalCheckedValueList; } else { if (showSearch && treeSearchValue && !searchTypeHighlight) { // 数据源被过滤情况 var operateNode = operateInfo === null || operateInfo === void 0 ? void 0 : operateInfo.node; if (props.checkStrictly) { if (operateInfo.checked == false) { finalCheckedValueList = valueList.filter(function (item) { return item != operateNode[fieldNames.value]; }); } else { finalCheckedValueList = Array.from(new Set([].concat(_toConsumableArray(valueList), _toConsumableArray(finalCheckedValueList)))); } completeCheckedValueList = finalCheckedValueList; } else { // 非checkStrictly=true情况 var propsCompleteValues = checkableType === '2' || checkableType === '3' ? completionParentChildrenNode(valueList, state.treeTiledArrayMap, fieldNames.children, fieldNames.value) : valueList; if (operateInfo.checked == false) { finalCheckedValueList = removeTargetNodeAndAllChildrenNode(_toConsumableArray(propsCompleteValues), operateNode, fieldNames.children, fieldNames.value); } else { finalCheckedValueList = Array.from(new Set([].concat(_toConsumableArray(propsCompleteValues), _toConsumableArray(finalCheckedValueList)))); } completeCheckedValueList = getActualSelectKeyList(finalCheckedValueList, state.treeTiledArrayMap, fieldNames.children, fieldNames.value); } } else { // 无搜索情况 completeCheckedValueList = finalCheckedValueList; } if (!props.checkStrictly) { if (checkableType === '2') { finalCheckedValueList = removeAllParentNode(completeCheckedValueList, state.treeTiledArrayMap, fieldNames.children); } else if (checkableType === '3') { finalCheckedValueList = removeAllSelectLeafNode(completeCheckedValueList, state.treeTiledArrayMap, fieldNames.children, fieldNames.value); } else if (checkableResponseParentNode == false) { finalCheckedValueList = removeAllParentNode(completeCheckedValueList, state.treeTiledArrayMap, fieldNames.children); } else { finalCheckedValueList = completeCheckedValueList; } } } var completeCheckedItemList = completeCheckedValueList.map(function (item) { return state.treeTiledArrayMap[item]; }); if (labelInValue) { var lvValue = labelInValueFieldNamesMerge.value; var lvLabel = labelInValueFieldNamesMerge.label; var finalCheckedList = finalCheckedValueList.map(function (item) { return _defineProperty(_defineProperty({}, lvLabel, state.treeTiledArrayMap[item][fieldNames.label]), lvValue, state.treeTiledArrayMap[item][fieldNames.value]); }); if (checkable) { onInnerChange(finalCheckedList, finalCheckedValueList.map(function (item) { return state.treeTiledArrayMap[item]; }), completeCheckedItemList, operateInfo); } else { onInnerChange(finalCheckedList[0], state.treeTiledArrayMap[finalCheckedValueList[0]], completeCheckedItemList, operateInfo); } } else { if (checkable) { onInnerChange(finalCheckedValueList, finalCheckedValueList.map(function (item) { return state.treeTiledArrayMap[item]; }), completeCheckedItemList, operateInfo); } else { onInnerChange(finalCheckedValueList[0], state.treeTiledArrayMap[finalCheckedValueList[0]], completeCheckedItemList, operateInfo); } } }); var treeItemDataAdapterHandle = useMemoizedFn(function (dataItem) { return treeItemDataAdapter === null || treeItemDataAdapter === void 0 ? void 0 : treeItemDataAdapter(dataItem); }); var originalDataList = useMemo(function () { var list = cloneState(state.treeList || []); if (treeSearchValue && searchResultType !== 'highlight') { var resultList = treeFilter(cloneState(state.treeList || []), function (node) { var _node$fieldNames$labe; if (customSearchRule) { return customSearchRule(node, treeSearchValue); } var value = (_node$fieldNames$labe = node[fieldNames.label]) === null || _node$fieldNames$labe === void 0 ? void 0 : _node$fieldNames$labe.toLowerCase(); return value.indexOf(treeSearchValue.toLowerCase()) >= 0; }, { childrenName: fieldNames.children }); return resultList; } return list; }, [customSearchRule, fieldNames.children, fieldNames.label, searchResultType, state.treeList, treeSearchValue]); var treeData = useMemo(function () { var _loop = function loop(data) { return data === null || data === void 0 ? void 0 : data.map(function (item) { var adapterItem = (treeItemDataAdapterHandle === null || treeItemDataAdapterHandle === void 0 ? void 0 : treeItemDataAdapterHandle(item)) || item; var disabled = disabledCanUse ? undefined : adapterItem.disabled; var strTitle = adapterItem[fieldNames.label] || ''; var titleDom; if (treeSearchValue && isString(strTitle)) { var strTitleNew = strTitle === null || strTitle === void 0 ? void 0 : strTitle.toLowerCase(); var index = strTitleNew.indexOf(treeSearchValue.toLowerCase()); var beforeStr = strTitle.substring(0, index); var afterStr = strTitle.slice(index + treeSearchValue.length); var centerStr = strTitle.slice(index, index + treeSearchValue.length); titleDom = index > -1 ? /*#__PURE__*/jsxs("span", { className: classNames({ 'v-tree-item-disabled': adapterItem.disabled }), children: [beforeStr, /*#__PURE__*/jsx("span", { className: "site-tree-search-value", children: centerStr }), afterStr] }) : null; } if (!titleDom && adapterItem.disabled) { titleDom = /*#__PURE__*/jsx("span", { className: classNames({ 'v-tree-item-disabled': adapterItem.disabled }), children: strTitle }); } var children = adapterItem[fieldNames.children]; return _objectSpread2(_objectSpread2({}, adapterItem), {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty({ disabled: disabled }, fieldNames.label, titleDom || strTitle), "_treeItemName", strTitle), "_disabled", adapterItem.disabled), fieldNames.children, isArray(children) && children.length > 0 ? _loop(children) : undefined)); }); }; return _loop(originalDataList); }, [originalDataList, treeItemDataAdapterHandle, disabledCanUse, fieldNames.label, fieldNames.children, treeSearchValue]); var loadData = useMemoizedFn(function (dataItem) { // eslint-disable-next-line no-async-promise-executor return new Promise(function (resolve, reject) { return new Promise(function ($return, $error) { var _props$loadDataServic, _props$loadDataServic2, _props$loadDataServic3, _props$loadDataServic4, _props$loadDataServic5, respData, respDataList; if (dataItem[fieldNames.children]) { resolve(); return $return(); } var $Try_3_Post = function () { try { return $return(); } catch ($boundEx) { return $error($boundEx); } }; var $Try_3_Catch = function (error) { try { void message.error(error.message || '数据加载异常...'); // 此处失败后,会重试“loadData”请求多次 reject(); return $Try_3_Post(); } catch ($boundEx) { return $error($boundEx); } }; try { return Promise.resolve((_props$loadDataServic = props.loadDataServiceConfig) === null || _props$loadDataServic === void 0 || (_props$loadDataServic2 = _props$loadDataServic.onRequest) === null || _props$loadDataServic2 === void 0 ? void 0 : _props$loadDataServic2.call(_props$loadDataServic, ((_props$loadDataServic3 = props.loadDataServiceConfig) === null || _props$loadDataServic3 === void 0 || (_props$loadDataServic4 = _props$loadDataServic3.getParams) === null || _props$loadDataServic4 === void 0 ? void 0 : _props$loadDataServic4.call(_props$loadDataServic3, dataItem)) || {})).then(function ($await_6) { try { respData = $await_6; respDataList = (_props$loadDataServic5 = props.loadDataServiceConfig) !== null && _props$loadDataServic5 !== void 0 && _props$loadDataServic5.onRequestResultAdapter ? props.loadDataServiceConfig.onRequestResultAdapter(respData) : respData; void actions.treeListAppendChildren({ value: dataItem[fieldNames.value], appendList: respDataList, childrenName: fieldNames.children, valueName: fieldNames.value }).then(function (allState) { onChangeSelectorList(allState.treeList); resolve(); }); return $Try_3_Post(); } catch ($boundEx) { return $Try_3_Catch($boundEx); } }, $Try_3_Catch); } catch (error) { $Try_3_Catch(error); } }); }); }); var isLeafNode = useMemoizedFn(function (nodeData) { var children = nodeData === null || nodeData === void 0 ? void 0 : nodeData[fieldNames.children]; // 当loadDataFlag=true,考虑叶子节点显示问题 var loadDataFlag = props.loadDataFlag; var loadHasChildren = loadDataFlag ? !nodeData.isLeaf : false; var hasChildren = children && children.length > 0 || loadHasChildren; return !hasChildren; }); var titleRender = useMemoizedFn(function (nodeData) { var stringLabel = nodeData._treeItemName || nodeData[fieldNames.label]; var buttonOperateConfig = menus === null || menus === void 0 ? void 0 : menus(_objectSpread2(_objectSpread2({}, nodeData), {}, _defineProperty({}, fieldNames.label, stringLabel))); if (buttonOperateConfig !== null && buttonOperateConfig !== void 0 && buttonOperateConfig.operateList.length) { return /*#__PURE__*/jsxs(Fragment, { children: [/*#__PURE__*/jsx("span", { className: "tree-item-title", "data-value": nodeData[fieldNames.value], children: (labelRender === null || labelRender === void 0 ? void 0 : labelRender(nodeData)) || (nodeData === null || nodeData === void 0 ? void 0 : nodeData[fieldNames.label]) }), /*#__PURE__*/jsx(ButtonOperate, _objectSpread2(_objectSpread2({ gap: 5 }, buttonOperateConfig), {}, { dropdownMenuProps: _objectSpread2({ placement: 'bottomRight', isFixed: true }, buttonOperateConfig === null || buttonOperateConfig === void 0 ? void 0 : buttonOperateConfig.dropdownMenuProps), className: classNames('tree-item-title-operate', buttonOperateConfig.className) }))] }); } return /*#__PURE__*/jsx(Fragment, { children: /*#__PURE__*/jsx("span", { className: "tree-item-title", "data-value": nodeData[fieldNames.value], children: (labelRender === null || labelRender === void 0 ? void 0 : labelRender(nodeData)) || (nodeData === null || nodeData === void 0 ? void 0 : nodeData[fieldNames.label]) }) }); }); var _useDebounceFn = useDebounceFn(function (e) { var _props$onSearchValueC; var value = e.target.value; setTreeSearchValue(value); (_props$onSearchValueC = props.onSearchValueChange) === null || _props$onSearchValueC === void 0 || _props$onSearchValueC.call(props, value); }, { wait: 300, leading: false, trailing: true }), onSearchChange = _useDebounceFn.run; var iconHandle = useMemoizedFn(function (treeData) { if (!props.icon) return null; if (/*#__PURE__*/isValidElement(props.icon)) return props.icon; var isLeafFlag = isLeafNode(treeData.data); return props.icon(_objectSpread2(_objectSpread2({}, treeData), {}, { isParent: !isLeafFlag, isLeaf: isLeafFlag })); }); var treeFieldNames = useMemo(function () { return { title: fieldNames.label, key: fieldNames.value, children: fieldNames.children }; }, [fieldNames]); var showTree = treeData.length > 0 && state.requestStatus !== 'request-error'; var commonProps = _objectSpread2(_objectSpread2({ showLine: { showLeafIcon: false }, titleRender: titleRender, blockNode: true, switcherIcon: /*#__PURE__*/jsx(_CaretDownFilled, {}), onDrop: function onDrop(info) { if (onDropPrev) { var boo = onDropPrev(info); if (!boo) return; } var _onTreeDrop = onTreeDrop(originalDataList, fieldNames, info), dataList = _onTreeDrop.dataList, dragNodeData = _onTreeDrop.dragNodeData; onDropNodeHandle === null || onDropNodeHandle === void 0 || onDropNodeHandle(dragNodeData); onChangeSelectorList(dataList); }, expandedKeys: treeExpandedKeys }, otherProps), {}, { fieldNames: treeFieldNames, treeData: treeData, onExpand: onExpand, loadData: props.loadDataFlag ? loadData : undefined, style: { width: '100%' }, icon: iconHandle, onClick: function onClick(e) { if (clickParentNodeToggleExpand) { var targetEle = e.target; var _value = targetEle.dataset.value; if (isUndefinedOrNull(_value)) { targetEle = findParentsElement(e.target, function (node) { var _node$classList, _node$classList2; return ((_node$classList = node.classList) === null || _node$classList === void 0 ? void 0 : _node$classList.contains('tree-item-title')) || ((_node$classList2 = node.classList) === null || _node$classList2 === void 0 ? void 0 : _node$classList2.contains('ant-tree-treenode')); }); _value = targetEle.dataset.value; } if (!isUndefinedOrNull(_value)) { var treeExpandedTarget = false; if (props.loadDataFlag) { treeExpandedTarget = treeExpandedKeys.includes(_value); } else { var _target$fieldNames$ch; var target = state.treeTiledArrayMap[_value]; if (!(target !== null && target !== void 0 && (_target$fieldNames$ch = target[fieldNames.children]) !== null && _target$fieldNames$ch !== void 0 && _target$fieldNames$ch.length)) { return; } treeExpandedTarget = treeExpandedKeys.includes(_value); } if (treeExpandedTarget) { var newList = arrayRemove(treeExpandedKeys, _value); setTreeExpandedKeys(_toConsumableArray(newList)); } else { setTreeExpandedKeys([].concat(_toConsumableArray(treeExpandedKeys), [_value])); } } } } }); var checkedProps = { onCheck: onTreeChangeHandle, checkable: checkable, checkedKeys: valueList }; var selectedProps = { onSelect: onTreeChangeHandle, multiple: false, selectedKeys: valueList }; var sceneProps = checkable ? checkedProps : selectedProps; var cName = classNames('v-tree-wrapper', "v-tree-wrapper-menu-".concat(menuTriggerTypeNew), className); var isSearchEmpty = state.treeList.length > 0 && !showTree && treeSearchValue; return /*#__PURE__*/jsxs("div", { className: cName, style: style, children: [!!showSearch && /*#__PURE__*/jsxs("div", { className: "v-tree-wrapper-search-area", style: searchStyle, children: [/*#__PURE__*/jsx(InputSearchWrapper, { className: "v-tree-wrapper-search", placeholder: isUndefinedOrNull(searchPlaceholder) ? '搜索' : searchPlaceholder, onChange: onSearchChange, value: treeSearchValue, allowClear: true }), !!props.searchExtraElement && /*#__PURE__*/jsx("span", { className: "v-tree-wrapper-search-extra", children: props.searchExtraElement })] }), showTree ? /*#__PURE__*/jsxs("div", { className: "v-tree-wrapper-tree-wrapper", children: [/*#__PURE__*/jsx(Spin, { spinning: state.requestStatus === 'request-progress' }), /*#__PURE__*/jsx(Tree, _objectSpread2(_objectSpread2(_objectSpread2({}, sceneProps), commonProps), {}, { className: "v-tree-wrapper-tree" }))] }) : /*#__PURE__*/jsx(RequestStatus, { status: state.requestStatus, loading: loading, messageConfig: _objectSpread2({ 'request-success': isSearchEmpty ? '搜索结果为空' : '暂无数据', 'request-error': state.requestErrorMessage }, requestMessageConfig), errorButton: /*#__PURE__*/jsx(Button, { type: "primary", onClick: startDataSourceRequest, children: "\u91CD\u65B0\u83B7\u53D6\u6570\u636E" }) })] }); }); /** * Tree包装组件,默认返回父节点,可配置不返回 * @param props * @returns * ``` * 1. treeNode内置字段说明(如需要相关功能,可在接口中添加固定字段) * a. disabled 禁掉响应 * b. isLeaf 设置为叶子节点 (设置了 loadData 时有效)。为 false 时会强制将其作为父节点 * c. disableCheckbox checkable模式下,treeNode复选框是否可选 * 2. 当设置selectorTreeList属性后,serviceConfig将失效 * 3. checkable=true,为多选模式 * 4. 设置value后,组件显示受控 * 5. 设置loadDataFlag=true,会动态获取children,当treeNode中包含isLeaf=true字段,表示为叶子节点,没有children了 * 6. 内置 onDrop 事件已处理数组排序,通过 onDropNodeHandle 事件可获取操作节点排序数据;自定义onDrop后,内置onDrop失效 * ``` */ var TreeWrapper = attachPropertiesToComponent(TreeWrapper$1, { /** * 获取树形原数据 * ``` * 参数 modelKey 与 TreeWrapper属性 modelKey相同,才能获取数据 * ``` */ getTreeDataList: getTreeDataList }); export { TreeWrapper }; //# sourceMappingURL=index.js.map