@flatbiz/antd 4.5.51 → 4.5.52

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/tree-wrapper/model.ts","@flatbiz/antd/src/tree-wrapper/hooks.ts","@flatbiz/antd/src/tree-wrapper/utils.ts","@flatbiz/antd/src/tree-wrapper/tree-wrapper.tsx","@flatbiz/antd/src/tree-wrapper/index.ts"],"sourcesContent":["import { isArray } from '@dimjs/lang';\nimport { type API, type ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport type { TAny } from '@flatbiz/utils';\nimport { arrayToMap, treeToArray, type TPlainObject, type TSetDefaultDefined } from '@flatbiz/utils';\nimport { type TreeProps } from 'antd';\nimport { TRequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeList: TSetDefaultDefined<TreeProps['treeData'], []>;\n treeTiledArray: TPlainObject[];\n treeTiledArrayMap: TPlainObject;\n queryIsEmpty: boolean;\n requestStatus?: TRequestStatus;\n requestErrorMessage?: string;\n};\n\ntype ModelActionParams = {\n setTreeList: {\n treeList: ModelState['treeList'];\n childrenName: string;\n valueName: string;\n };\n resetTreeList: void;\n changeRequestStatus: {\n status: TRequestStatus;\n errorMessage?: string;\n };\n treeListAppendChildren: {\n value: string | number;\n appendList: TPlainObject[];\n childrenName: string;\n valueName: string;\n };\n};\n\nconst defaultState: ModelState = {\n treeList: [],\n treeTiledArray: [],\n treeTiledArrayMap: {},\n queryIsEmpty: false,\n};\n\nconst TreeWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setTreeList: (params) => {\n return (state) => {\n state.treeList = params.treeList || [];\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n state.treeTiledArrayMap = arrayToMap(state.treeTiledArray, params.valueName);\n state.requestStatus = 'request-success';\n };\n },\n resetTreeList: () => {\n return (state) => {\n state.treeList = [];\n state.treeTiledArray = [];\n state.treeTiledArrayMap = {};\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params.status;\n if (params.status === 'request-error') {\n state.treeList = [];\n state.treeTiledArray = [];\n state.treeTiledArrayMap = {};\n state.requestErrorMessage = params.errorMessage || '数据查询异常';\n } else {\n state.requestErrorMessage = undefined;\n }\n };\n },\n treeListAppendChildren: (params) => {\n return (state) => {\n const tiledArray = treeToArray(state.treeList, params.childrenName);\n const treeTiledArrayMap = arrayToMap(tiledArray, params.valueName);\n const target = treeTiledArrayMap[params.value];\n if (target) {\n if (isArray(params.appendList) && params.appendList.length > 0) {\n target[params.childrenName] = params.appendList;\n } else {\n target.isLeaf = true;\n }\n }\n state.treeTiledArray = tiledArray;\n state.treeTiledArrayMap = treeTiledArrayMap;\n };\n },\n },\n state: defaultState,\n};\n\nconst treeWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, TAny>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeWrapperModel('key值').useStore();\n * ```\n */\nexport const treeWrapperModel = (key: string) => {\n if (!treeWrapperModels[key]) {\n treeWrapperModels[key] = Model(TreeWrapperModel);\n }\n return treeWrapperModels[key];\n};\n","import { type TPlainObject } from '@flatbiz/utils';\nimport { treeWrapperModel } from './model';\n\nexport const getTreeDataList = (modelKey: string) => {\n const state = treeWrapperModel(modelKey).getState();\n return state.treeList as TPlainObject[];\n};\n","import { isArray, isObject } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { tree } from '@dimjs/utils';\nimport {\n isNotEmptyArray,\n isUndefinedOrNull,\n treeLeafParentsArray,\n treeToArray,\n treeToTiledArray,\n treeToTiledMap,\n type LabelValueItem,\n type TAny,\n type TPlainObject,\n} from '@flatbiz/utils';\nimport { type DataNode } from 'antd/es/tree';\nimport { dequal } from 'dequal';\n\nexport const getDefaultExpandAllKeys = (\n treeList: TPlainObject[],\n fieldNames: { label: string; value: string; children: string },\n) => {\n const allValues = treeToArray(treeList, fieldNames.children)\n .filter((item) => {\n const childrenValue = item[fieldNames.children] as TAny[] | undefined;\n return childrenValue && childrenValue.length > 0;\n })\n .map((item) => {\n return item[fieldNames.value];\n });\n return allValues as Array<string | number>;\n};\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames: { label: string; value: string; children: string },\n) => {\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, {\n value: 'value',\n parentValue: 'parentValue',\n })\n .filter((item) => {\n const childrenValue = item[fieldNames.children] as TAny[] | undefined;\n return childrenValue && childrenValue.length > 0;\n })\n .map((item) => item.value);\n};\n\nexport const getVauleList = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n let tempList = isUndefinedOrNull(data) ? [] : data;\n tempList = isArray(tempList) ? tempList : [tempList];\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[labelInValueFieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n const list = getVauleList(data, labelInValueFieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括\n * string、number、\n * Array<string | number>、{ label: string, value: string | nuber }、\n * Array<{ label: string, value: string | nuber }>\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeWrapperValueDeepEqual = (\n value1: TAny,\n value2: TAny,\n labelInValueFieldNames: LabelValueItem<string | number>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, labelInValueFieldNames);\n const object2 = array2map(value2, labelInValueFieldNames);\n return dequal(object1, object2);\n};\n\ntype OnTreeDropMethod = (\n dataList: TPlainObject[],\n fieldNames: { value: string; children: string },\n info: TAny,\n) => {\n dataList: TPlainObject[];\n dragNodeData: {\n parentId?: string | number;\n id: string | number;\n index: number;\n };\n};\n\nexport const onTreeDrop: OnTreeDropMethod = (dataList, fieldNames, info) => {\n const dropKey = info.node.key;\n const dragKey = info.dragNode.key;\n const dropPos = info.node.pos.split('-');\n const dropPosition = info.dropPosition - Number(dropPos[dropPos.length - 1]);\n const treeKeyName = fieldNames.value;\n const treeChildrenName = fieldNames.children;\n\n const loop = (\n data: DataNode[],\n key: React.Key,\n callback: (node: DataNode, i: number, data: DataNode[]) => void,\n ) => {\n for (let i = 0; i < data.length; i++) {\n if (data[i][treeKeyName] === key) {\n return callback(data[i], i, data);\n }\n if (data[i][treeChildrenName]) {\n loop(data[i][treeChildrenName]!, key, callback);\n }\n }\n };\n const data = cloneState(dataList) as DataNode[];\n\n // Find dragObject\n let dragObj: DataNode;\n loop(data, dragKey, (item, index, arr) => {\n arr.splice(index, 1);\n dragObj = item;\n });\n\n if (!info.dropToGap) {\n // Drop on the content\n loop(data, dropKey, (item) => {\n item[treeChildrenName] = item[treeChildrenName] || [];\n // where to insert 示例添加到头部,可以是随意位置\n item[treeChildrenName].unshift(dragObj);\n });\n } else if (\n (info.node.props.children || []).length > 0 && // Has children\n info.node.props.expanded && // Is expanded\n dropPosition === 1 // On the bottom gap\n ) {\n loop(data, dropKey, (item) => {\n item[treeChildrenName] = item[treeChildrenName] || [];\n // where to insert 示例添加到头部,可以是随意位置\n item[treeChildrenName].unshift(dragObj);\n // in previous version, we use item.children.push(dragObj) to insert the\n // item to the tail of the children\n });\n } else {\n let ar: DataNode[] = [];\n let i: number;\n loop(data, dropKey, (_item, index, arr) => {\n ar = arr;\n i = index;\n });\n if (dropPosition === -1) {\n ar.splice(i!, 0, dragObj!);\n } else {\n ar.splice(i! + 1, 0, dragObj!);\n }\n }\n return {\n dataList: data,\n dragNodeData: dragNodeData(dragKey, data, fieldNames),\n };\n};\n\nexport const dragNodeData = (\n dorpNodeId: TAny,\n dataList: TAny[],\n fieldNames: { value: string; children: string },\n) => {\n const id = fieldNames.value;\n const children = fieldNames.children;\n tree.walkThroughTree<TPlainObject, TAny>(\n { [id]: undefined, [children]: dataList } as TAny,\n (node, index, _parent) => {\n node['__index'] = index;\n node['__parentId'] = _parent?.[id];\n },\n children,\n );\n const tileList = treeToArray(dataList, children);\n const target = tileList.find((item) => item[id] === dorpNodeId);\n return {\n parentId: target?.['__parentId'],\n id: target?.[id],\n index: target?.['__index'],\n };\n};\n\n/**\n * 由于树节点过滤后,选中了父节点不一定是全部子节点,此处进行筛查\n */\nexport const getActualSelectKeyList = (\n checkedValueList: Array<string | number>,\n treeTiledArrayMap: TPlainObject,\n chidlrenKey: string,\n valueKey: string,\n) => {\n const leafValueDataMap: TPlainObject = {};\n const hasChildrenList: Array<string | number> = [];\n const retainHasChildrenValueList: Array<string | number> = [];\n checkedValueList.forEach((item) => {\n if (isNotEmptyArray(treeTiledArrayMap[item]?.[chidlrenKey])) {\n hasChildrenList.push(item);\n } else {\n leafValueDataMap[item] = item;\n }\n });\n if (hasChildrenList.length > 0) {\n hasChildrenList.forEach((item) => {\n const childrenTiledList = treeToArray(treeTiledArrayMap[item][chidlrenKey], chidlrenKey);\n if (Object.keys(leafValueDataMap).length > childrenTiledList.length) {\n const targetList = childrenTiledList.filter((item) => {\n return checkedValueList.find((temp) => temp === item[valueKey]);\n });\n if (targetList.length === childrenTiledList.length) {\n retainHasChildrenValueList.push(item);\n }\n }\n });\n }\n\n return checkedValueList.filter((item) => {\n return retainHasChildrenValueList.find((temp) => temp == item) || leafValueDataMap[item];\n });\n};\n\n/** 移除指定节点以及所有子节点 */\nexport const removeTargetNodeAndAllChildrenNode = (\n checkedValueList: Array<string | number>,\n awitDeleteNode: TPlainObject,\n chidlrenKey: string,\n valueKey: string,\n) => {\n const awitDeleteTieldDataMap: TPlainObject = treeToTiledMap([awitDeleteNode], {\n value: valueKey,\n children: chidlrenKey,\n });\n return checkedValueList.filter((item) => {\n return !awitDeleteTieldDataMap[item];\n });\n};\n\n/** 移除父节点全选下的叶子节点 */\nexport const removeAllSelectLeafNode = (\n checkedValueList: Array<string | number>,\n treeTiledArrayMap: TPlainObject,\n chidlrenKey: string,\n valueKey: string,\n) => {\n let awitDeleteCheckedValueMap: TPlainObject = {};\n checkedValueList.forEach((item) => {\n const childrenList = treeTiledArrayMap[item]?.[chidlrenKey];\n if (isNotEmptyArray(childrenList)) {\n // hasChildrenList.push(item);\n const targetMap = treeToTiledMap(childrenList, {\n value: valueKey,\n children: chidlrenKey,\n });\n awitDeleteCheckedValueMap = {\n ...awitDeleteCheckedValueMap,\n ...targetMap,\n };\n }\n });\n return checkedValueList.filter((item) => !awitDeleteCheckedValueMap[item]);\n};\n\n/** 移除所有的父节点 */\nexport const removeAllParentNode = (\n checkedValueList: Array<string | number>,\n treeTiledArrayMap: TPlainObject,\n chidlrenKey: string,\n) => {\n return checkedValueList.filter((item) => {\n return !isNotEmptyArray(treeTiledArrayMap[item][chidlrenKey]);\n });\n};\n\n/** values中的数据可能存在缺少父节点下的子节点情况,此处补齐 */\nexport const completionParentChildrenNode = (\n values: Array<string | number>,\n treeTiledArrayMap: TPlainObject,\n chidlrenKey: string,\n valueKey: string,\n) => {\n let allValues = [...values];\n values.forEach((item) => {\n const childrenList = treeTiledArrayMap[item]?.[chidlrenKey];\n if (isNotEmptyArray(childrenList)) {\n const targetList = treeToArray(childrenList, chidlrenKey);\n allValues = allValues.concat(targetList.map((temp) => temp[valueKey]));\n }\n });\n return Array.from(new Set(allValues));\n};\n","import { CaretDownFilled, MoreOutlined } from '@ant-design/icons';\nimport { isArray, isString } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { array, classNames, extend, get } from '@dimjs/utils';\nimport { Button, message, Spin, Tree, type TreeProps } from 'antd';\nimport {\n forwardRef,\n Fragment,\n isValidElement,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type DependencyList,\n type ReactElement,\n} from 'react';\n\nimport { dom, isUndefinedOrNull, toArray, treeFilter, type TAny, type TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { treeWrapperModel } from './model';\n\nimport { ButtonOperate, ButtonOperateItem, ButtonOperateProps } from '../button-operate';\nimport { DropdownMenuItem, DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { fbaHooks } from '../fba-hooks';\nimport { InputSearchWrapper } from '../input-search-wrapper';\nimport { RequestStatus, TRequestStatusProps } from '../request-status';\nimport './style.less';\nimport {\n completionParentChildrenNode,\n getActualSelectKeyList,\n getDefaultExpandAllKeys,\n getExpandedKeys,\n getVauleList,\n onTreeDrop,\n removeAllParentNode,\n removeAllSelectLeafNode,\n removeTargetNodeAndAllChildrenNode,\n} from './utils';\n\ntype TreeWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\nexport type TreeServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\nexport type TreeLoadDataServiceConfig = {\n getParams?: (dataItem: TPlainObject) => TPlainObject;\n onRequest: (params: TPlainObject) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type TreeWrapperMenuItem = {\n title: string;\n onClick: (dataItem: TPlainObject, event) => void;\n icon?: ReactElement;\n};\n\nexport type TreeWrapperProps = Omit<\n TreeProps,\n | 'treeData'\n | 'onExpand'\n | 'selectedKeys'\n | 'checkedKeys'\n | 'onCheck'\n | 'onSelect'\n | 'fieldNames'\n | 'multiple'\n | 'loadData'\n | 'icon'\n | 'defaultCheckedKeys'\n | 'defaultExpandParent'\n | 'defaultSelectedKeys'\n> & {\n /** 唯一值,用于缓存数据 */\n modelKey: string;\n /**\n * 字段映射\n * ```\n * 默认值:\n * label = 'label'\n * value = 'value'\n * children = 'children'\n *\n * 如果未设置list,则说明接口返回数据为数组\n * 如果返回数据存在多级,可通过设置 list='a.b.list'\n * ```\n */\n fieldNames?: {\n label?: string;\n value?: string;\n children?: string;\n list?: string;\n };\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`selectorTreeList`后无效果\n */\n serviceConfig?: TreeServiceConfig;\n /**\n * 是否开启异步加载\n */\n loadDataFlag?: boolean;\n /**\n * 异步加载数据配置\n * ```\n * 1. 会通过fieldNames配置label、value、children进行转义\n * 2. fieldNames.list 配置在此处无效\n * ```\n */\n loadDataServiceConfig?: TreeLoadDataServiceConfig;\n /**\n * 当设置selectorTreeList后,serviceConfig将失效\n * ```\n * 1. 不支持异步数据,异步使用serviceConfig方式\n * ```\n */\n selectorTreeList?: TPlainObject[];\n /**\n * 通过服务获取数据后回调,当设置`selectorList`后无效果\n * ```\n * 相同modelKey,同时发起多个渲染时,只有第一个会执行 onSelectorTreeListChange 回调\n * ```\n */\n onSelectorTreeListChange?: (dataList: TPlainObject[]) => void;\n /** 接口响应数据变更 */\n onRequestResponseChange?: (data: TAny) => void;\n onChange?: (\n selectedKey?: TreeWrapperValue,\n operateNodeData?: TPlainObject[] | TPlainObject,\n operateAllNodeDataList?: TPlainObject[],\n extraData?: TPlainObject,\n ) => void;\n\n /**\n * 搜索关键字,打开tree折叠过滤关键字\n */\n searchValue?: string;\n /**\n * checkable模式下,onChange是否返回父节点,默认值true\n * @description 已过期,请使用 checkableType 配置\n * ```\n * 注意:checkStrictly = true,checkableResponseParentNode配置失效\n * ```\n */\n checkableResponseParentNode?: boolean;\n /**\n * 节点选择类型(默认值:'2'), 多选时有效\n * ```\n * '1' 表示返回所有选中的节点(包含父节点和叶子节点)\n * '2' 表示只返回叶子节点\n * '3' 表示当叶子节点全选时,返回父节点,不返回下面的叶子节点\n *\n * 注意:checkStrictly = true,checkableType配置失效\n * ```\n */\n checkableType?: '1' | '2' | '3';\n /**\n * 菜单结构类型 tile/平铺 fold/折叠;默认:fold\n * @deprecated 已过期 4.3.0版本移除,请使用 menus\n * ```\n * 自定义设置 titleRender 后失效\n * ```\n */\n menuLayoutType?: 'tile' | 'fold';\n /**\n * 获取菜单类别\n * @param dataItem\n * @deprecated 已过期 4.3.0版本移除,请使用 menus\n * @returns\n * ```\n * 1. menuLayoutType = tile 无效\n * 2. 自定义设置 titleRender 后失效\n * ```\n */\n getMenuOptions?: (dataItem: TPlainObject) => DropdownMenuItem[] | ButtonOperateItem[];\n /**\n * 根据 menuLayoutType 类型赋值\n * @deprecated 已过期 4.3.0版本移除,请使用 menuOptions\n */\n menuOptions?: {\n tile?: (dataItem: TPlainObject) => ButtonOperateProps;\n fold?: (dataItem: TPlainObject) => DropdownMenuItem[];\n };\n /**\n * 菜单触发类型,默认:click\n * ```\n * 自定义设置 titleRender 后失效\n * ```\n */\n menuTriggerType?: 'click' | 'hover';\n menus?: (dataItem) => ButtonOperateProps;\n\n showSearch?: boolean;\n onSearchValueChange?: (searchValue?: string) => void;\n searchPlaceholder?: string;\n searchStyle?: CSSProperties;\n icon?: (data: { isParent: boolean; isLeaf: boolean; [key: string]: TAny }) => ReactElement;\n /**\n * 状态文案配置\n */\n requestMessageConfig?: TRequestStatusProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: TreeWrapperValue;\n /**\n * 选择的节点数据,是否包含label信息\n * ```\n * 默认选择的节点只有value数据\n * ```\n */\n labelInValue?: boolean;\n /**\n * ```\n * @deprecated 废弃\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * 禁用状态是否可选,默认值true\n * 当dateItem中包含 disabled 则数据为禁用状态\n */\n disabledCanUse?: boolean;\n\n /** treeItem数据适配器 */\n treeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n /** 搜索位置额外元素 */\n searchExtraElement?: ReactElement;\n /** 有唯一跟节点时,初始化是否展开,默认值:false */\n initRootExpand?: boolean;\n /** 搜素过滤方式,高亮 | 过滤;默认:filter */\n searchResultType?: 'highlight' | 'filter';\n /**\n * 拖拽节点处理,自定义onDrop事件后,失效\n * ```\n * 参数\n * 1. parentId 拖拽结束位置父节点ID\n * 2. id 当前拖拽节点ID\n * 3. index 拖拽结束位置所在数组下标\n * ```\n */\n onDropNodeHandle?: (result: { parentId?: string | number; id: string | number; index: number }) => void;\n /**\n * 拖拽排序前判断,如果返回 true,可排序,其他不可排序\n * ```\n * 可用于需要权限控制判断\n * ```\n */\n onDropPrev?: (info) => boolean;\n /**\n * 标签渲染\n * ```\n * 1. 自定义设置 titleRender 后失效\n * 2. 与titleRender的区别\n * a. 设置 labelRender 后,menuLayout有效\n * b. 设置 titleRender 后,menuLayout失效\n * ```\n */\n labelRender?: (nodeData: TPlainObject) => ReactElement;\n /**\n * 自定义搜索规则\n */\n customSearchRule?: (nodeData: TPlainObject, searchValue?: string) => boolean;\n\n /**\n * 点击父节点 是否切换折叠\n * ```\n * 1. 设置 titleRender 后,此配置失效\n * ```\n */\n clickParentNodeToggleExpand?: boolean;\n /**\n * 禁用节点选中\n * ```\n * 1. checkable = true,此配置失效\n * 2. 在未设置节点 disabled 属性情况下,满足此配置不会触发onChange事件\n * ```\n */\n disableNodeSelect?: (item: TPlainObject) => boolean;\n /**\n * 是否必选,最后一个不能取消\n * ```\n * 1. 设置 checkable = true 时无效\n * ```\n */\n required?: boolean;\n\n /**\n * 在第一次渲染value时,主动执行一次onChange\n * ```\n * 1. 设置labelInValue = true 时有效\n * 2. 不考虑子父节点的关系\n * ```\n */\n executeOnChangeInRenderFirstValue?: boolean;\n};\n\nconst compareArrays = (arr1, arr2) => {\n const sortedArr1 = arr1.slice().sort();\n const sortedArr2 = arr2.slice().sort();\n return JSON.stringify(sortedArr1) === JSON.stringify(sortedArr2);\n};\n\nexport type TreeWrapperRefApi = {\n onClearSelectorList: () => void;\n getTreeDataList: () => TreeProps['treeData'];\n onChangeExpandedKeys: (expandedKeys: Array<string | number>) => void;\n getTreeTiledArray: () => TPlainObject[];\n getTreeTiledArrayMap: () => TPlainObject;\n /** 选择所有 */\n onSelectAll: () => void;\n /** 取消选择所有 */\n onCancelSelectAll: () => void;\n /** 展开所有 */\n onExpandedAll: () => void;\n /** 取消展开所有 */\n onCancelExpandedAll: () => void;\n};\n\n/**\n * Tree包装组件,默认返回父节点,可配置不返回\n * ```\n * 1. treeNode内置字段说明(如需要相关功能,可在接口中添加固定字段)\n * a. disabled 禁掉响应\n * b. isLeaf 设置为叶子节点 (设置了 loadData 时有效)。为 false 时会强制将其作为父节点\n * c. disableCheckbox checkable模式下,treeNode复选框是否可选\n * 2. 当设置selectorTreeList属性后,serviceConfig将失效\n * 3. checkable=true,为多选模式\n * 4. 设置value后,组件显示受控\n * 5. 设置loadDataFlag=true,会动态获取children,当treeNode中包含isLeaf=true字段,表示为叶子节点,没有children了\n * 6. 内置 onDrop 事件已处理数组排序,通过 onDropNodeHandle 事件可获取操作节点排序数据;自定义onDrop后,内置onDrop失效\n * ```\n */\nexport const TreeWrapper = forwardRef<TreeWrapperRefApi, TreeWrapperProps>((props, ref) => {\n const {\n style,\n serviceConfig,\n effectDependencyList,\n selectorTreeList,\n value,\n onChange,\n modelKey,\n checkableResponseParentNode = true,\n checkable,\n onSelectorTreeListChange,\n onRequestResponseChange,\n treeItemDataAdapter,\n searchValue,\n showSearch,\n searchPlaceholder,\n requestMessageConfig,\n labelInValueFieldNames,\n labelInValue,\n disabledCanUse,\n menuLayoutType,\n menuTriggerType,\n initRootExpand,\n searchResultType,\n onDropNodeHandle,\n onDropPrev,\n labelRender,\n searchStyle,\n className,\n defaultExpandAll,\n menus,\n customSearchRule,\n checkableType,\n clickParentNodeToggleExpand,\n disableNodeSelect,\n required,\n executeOnChangeInRenderFirstValue,\n ...otherProps\n } = props;\n // eslint-disable-next-line no-prototype-builtins\n const hasSelectorTreeList = props.hasOwnProperty('selectorTreeList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<Array<string | number>>([]);\n const [state, actions] = treeWrapperModel(modelKey).useStore();\n const [loading, setLoading] = fbaHooks.useSafeState(false);\n const requestPreKey = `request-progress-${props.modelKey}`;\n const searchTypeHighlight = searchResultType === 'highlight';\n const fieldNames = useMemo(() => {\n return {\n label: 'label',\n value: 'value',\n children: 'children',\n ...props.fieldNames,\n };\n }, [props.fieldNames]);\n const menuLayoutTypeNew = menuLayoutType === undefined ? 'fold' : menuLayoutType;\n const menuTriggerTypeNew = menuTriggerType === undefined ? 'click' : menuTriggerType;\n const responseFirstRef = useRef(true);\n const innerValueListRef = useRef<any[] | undefined>(undefined);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n // tree 搜索值\n const [treeSearchValue, setTreeSearchValue] = useState<string | undefined>();\n\n const valueList = useMemo(() => {\n return getVauleList(value, labelInValueFieldNamesMerge);\n }, [labelInValueFieldNamesMerge, value]);\n\n fbaHooks.useEffectCustom(() => {\n if (state.treeList.length > 0) {\n if (\n responseFirstRef.current &&\n labelInValue &&\n executeOnChangeInRenderFirstValue &&\n valueList.length > 0\n ) {\n const dataList: TPlainObject[] = [];\n const originalList: TPlainObject[] = [];\n valueList.forEach((item) => {\n const target = state.treeTiledArrayMap[item];\n if (target) {\n originalList.push(target);\n dataList.push({\n [labelInValueFieldNamesMerge.label]: target[fieldNames.label],\n [labelInValueFieldNamesMerge.value]: target[fieldNames.value],\n });\n }\n });\n if (checkable) {\n props.onChange?.(dataList ? dataList : undefined, originalList);\n } else {\n props.onChange?.(dataList ? dataList[0] : undefined, originalList[0]);\n }\n }\n if (responseFirstRef.current && valueList.length === 0) {\n responseFirstRef.current = false;\n if (defaultExpandAll) {\n setTreeExpandedKeys(getDefaultExpandAllKeys(state.treeList, fieldNames));\n return;\n } else if (initRootExpand && state.treeList.length) {\n setTreeExpandedKeys([state.treeList[0][fieldNames.value]]);\n return;\n }\n }\n if (valueList.length > 0) {\n responseFirstRef.current = false;\n if (innerValueListRef.current) {\n if (!compareArrays(valueList, innerValueListRef.current)) {\n const innerExpandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(treeExpandedKeys?.concat(innerExpandedKeys))));\n }\n } else {\n const innerExpandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(treeExpandedKeys?.concat(innerExpandedKeys))));\n }\n }\n }\n // 当 valueList 为空时,不去清除treeExpandedKeys数据\n }, [state.treeList, JSON.stringify(valueList)]);\n\n const valueIsEmpty = (data: string | number) => {\n return data === '' || isUndefinedOrNull(data);\n };\n\n const serviceResponseHandle = (respData) => {\n let result: TPlainObject[] = respData;\n if (newServiceConfig.onRequestResultAdapter) {\n result = newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject);\n } else if (fieldNames.list) {\n result = get(respData, fieldNames.list, []) || [];\n }\n if (!isArray(result)) {\n console.warn('接口返回数据为非数组结构,确认是否需要配置fieldNames.list进行解析');\n return [];\n }\n return result;\n };\n\n fbaHooks.useEffectCustom(() => {\n setTreeSearchValue(searchValue);\n }, [searchValue]);\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n try {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys;\n const params = extend({}, newServiceConfig.params);\n if (requiredParamsKeys) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n void actions.changeRequestStatus({\n status: 'no-dependencies-params',\n });\n console.warn(`TreeWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n }\n try {\n setLoading(true);\n await actions.changeRequestStatus({\n status: 'request-progress',\n });\n window[requestPreKey] = true;\n const _respData = await newServiceConfig.onRequest?.(params);\n onRequestResponseChange?.(_respData);\n const respDataListNew = serviceResponseHandle(_respData);\n if (respDataListNew.length === 0) {\n responseFirstRef.current = false;\n }\n onChangeSelectorList(respDataListNew);\n setLoading(false);\n\n window[requestPreKey] = false;\n } catch (error: TAny) {\n window[requestPreKey] = false;\n setLoading(false);\n void actions.changeRequestStatus({\n status: 'request-error',\n errorMessage: error.message,\n });\n }\n } catch (error: TAny) {\n responseFirstRef.current = false;\n setLoading(false);\n void message.error((error.message as string) || '数据查询异常...');\n }\n });\n\n fbaHooks.useEffectCustom(() => {\n if (hasSelectorTreeList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (newEffectDependencyList.length) {\n void startDataSourceRequest();\n return;\n }\n const allState = treeWrapperModel(modelKey).getState();\n if (allState.requestStatus === 'request-success') {\n onSelectorTreeListChange?.(allState.treeList);\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n } else {\n onSelectorTreeListChange?.(allState.treeList);\n }\n }, newEffectDependencyList);\n\n fbaHooks.useEffectCustom(() => {\n if (hasSelectorTreeList) {\n onChangeSelectorList(selectorTreeList || []);\n }\n }, [selectorTreeList]);\n\n const onChangeSelectorList = hooks.useCallbackRef((dataList: TAny[]) => {\n if (dataList?.length === 0 && state.treeList.length === 0) {\n void actions.changeRequestStatus({ status: 'request-success' });\n return;\n }\n void actions.setTreeList({\n treeList: dataList || [],\n childrenName: fieldNames.children,\n valueName: fieldNames.value,\n });\n onSelectorTreeListChange?.(dataList);\n });\n\n const getTreeExpandedKeys = (valueList: Array<string | number>, refresh?: boolean) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetKeys = getExpandedKeys(value, state.treeList, fieldNames);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetKeys);\n });\n return newTreeExpandedKeys;\n };\n\n hooks.useUpdateEffect(() => {\n if (treeSearchValue) {\n const targetList = state.treeTiledArray.filter((item) => {\n const labelValue = (item[fieldNames.label] || '') as string;\n if (customSearchRule) {\n return customSearchRule(item, treeSearchValue);\n }\n return String(labelValue).toLowerCase().includes(treeSearchValue.toLowerCase());\n });\n const treeExpandedKeysNew = getTreeExpandedKeys(\n targetList.map((item) => item[fieldNames.value]),\n true,\n );\n setTreeExpandedKeys(Array.from(new Set(treeExpandedKeysNew)));\n } else {\n setTreeExpandedKeys([]);\n }\n }, [treeSearchValue]);\n useImperativeHandle(ref, () => {\n return {\n onClearSelectorList: () => {\n void actions.resetTreeList();\n },\n getTreeDataList: () => {\n return state.treeList;\n },\n getTreeTiledArray: () => state.treeTiledArray,\n getTreeTiledArrayMap: () => state.treeTiledArrayMap,\n onChangeExpandedKeys: (dataList) => {\n setTreeExpandedKeys(dataList);\n },\n onSelectAll: () => {\n const targetList = state.treeTiledArray.map((temp) => temp[fieldNames.value]);\n setTreeExpandedKeys(targetList);\n onChange?.(targetList, undefined, state.treeList, undefined);\n },\n onCancelSelectAll: () => {\n setTreeExpandedKeys([]);\n onChange?.(undefined);\n },\n onExpandedAll: () => {\n const targetList = state.treeTiledArray.map((temp) => temp[fieldNames.value]);\n setTreeExpandedKeys(targetList);\n },\n onCancelExpandedAll: () => {\n setTreeExpandedKeys([]);\n },\n };\n });\n\n const onExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onInnerChange = (\n selectedKey?: TreeWrapperValue,\n operateNodeData?: TPlainObject[] | TPlainObject,\n operateAllNodeDataList?: TPlainObject[],\n operateInfo?: TPlainObject,\n ) => {\n innerValueListRef.current = toArray(selectedKey);\n if (toArray(selectedKey).length === 0) {\n const nodeValue = operateInfo?.node[fieldNames.value];\n const target = state.treeTiledArrayMap[nodeValue];\n props.onChange?.(undefined, target, [target], operateInfo);\n } else {\n props.onChange?.(selectedKey, operateNodeData, operateAllNodeDataList, operateInfo);\n }\n };\n\n const onTreeChangeHandle = hooks.useCallbackRef((checkedData, operateInfo) => {\n // 最终checkValueList\n let finalCheckedValueList: Array<number | string> = [];\n // 完整checkValueList\n let completeCheckedValueList: Array<number | string> = [];\n\n if (checkable) {\n finalCheckedValueList = props.checkStrictly ? checkedData.checked : checkedData;\n } else {\n finalCheckedValueList = checkedData;\n if (required && !toArray(checkedData).length) {\n return;\n }\n if (disableNodeSelect) {\n const target = state.treeTiledArrayMap[checkedData[0]];\n const x = target ? disableNodeSelect(target) : false;\n if (x) {\n return;\n }\n }\n }\n finalCheckedValueList = toArray(finalCheckedValueList);\n\n if (!checkable) {\n completeCheckedValueList = finalCheckedValueList;\n } else {\n if (showSearch && treeSearchValue && !searchTypeHighlight) {\n // 数据源被过滤情况\n const operateNode = operateInfo?.node;\n if (props.checkStrictly) {\n if (operateInfo.checked == false) {\n finalCheckedValueList = valueList.filter((item) => item != operateNode[fieldNames.value]);\n } else {\n finalCheckedValueList = Array.from(new Set([...valueList, ...finalCheckedValueList]));\n }\n completeCheckedValueList = finalCheckedValueList;\n } else {\n // 非checkStrictly=true情况\n const propsCompleteValues =\n checkableType === '2' || checkableType === '3'\n ? completionParentChildrenNode(\n valueList,\n state.treeTiledArrayMap,\n fieldNames.children,\n fieldNames.value,\n )\n : valueList;\n if (operateInfo.checked == false) {\n finalCheckedValueList = removeTargetNodeAndAllChildrenNode(\n [...propsCompleteValues],\n operateNode,\n fieldNames.children,\n fieldNames.value,\n );\n } else {\n finalCheckedValueList = Array.from(new Set([...propsCompleteValues, ...finalCheckedValueList]));\n }\n completeCheckedValueList = getActualSelectKeyList(\n finalCheckedValueList,\n state.treeTiledArrayMap,\n fieldNames.children,\n fieldNames.value,\n );\n }\n } else {\n // 无搜索情况\n completeCheckedValueList = finalCheckedValueList;\n }\n\n if (!props.checkStrictly) {\n if (checkableType === '2') {\n finalCheckedValueList = removeAllParentNode(\n completeCheckedValueList,\n state.treeTiledArrayMap,\n fieldNames.children,\n );\n } else if (checkableType === '3') {\n finalCheckedValueList = removeAllSelectLeafNode(\n completeCheckedValueList,\n state.treeTiledArrayMap,\n fieldNames.children,\n fieldNames.value,\n );\n } else if (checkableResponseParentNode == false) {\n finalCheckedValueList = removeAllParentNode(\n completeCheckedValueList,\n state.treeTiledArrayMap,\n fieldNames.children,\n );\n } else {\n finalCheckedValueList = completeCheckedValueList;\n }\n }\n }\n\n const completeCheckedItemList = completeCheckedValueList.map((item) => {\n return state.treeTiledArrayMap[item];\n });\n if (labelInValue) {\n const lvValue = labelInValueFieldNamesMerge.value;\n const lvLabel = labelInValueFieldNamesMerge.label;\n const finalCheckedList = finalCheckedValueList.map((item) => {\n return {\n [lvLabel]: state.treeTiledArrayMap[item][fieldNames.label],\n [lvValue]: state.treeTiledArrayMap[item][fieldNames.value],\n };\n });\n if (checkable) {\n onInnerChange(\n finalCheckedList,\n finalCheckedValueList.map((item) => {\n return state.treeTiledArrayMap[item];\n }),\n completeCheckedItemList,\n operateInfo,\n );\n } else {\n onInnerChange(\n finalCheckedList[0],\n state.treeTiledArrayMap[finalCheckedValueList[0]],\n completeCheckedItemList,\n operateInfo,\n );\n }\n } else {\n if (checkable) {\n onInnerChange(\n finalCheckedValueList,\n finalCheckedValueList.map((item) => {\n return state.treeTiledArrayMap[item];\n }),\n completeCheckedItemList,\n operateInfo,\n );\n } else {\n onInnerChange(\n finalCheckedValueList[0],\n state.treeTiledArrayMap[finalCheckedValueList[0]],\n completeCheckedItemList,\n operateInfo,\n );\n }\n }\n });\n\n const treeItemDataAdapterHandle = hooks.useCallbackRef((dataItem) => {\n return treeItemDataAdapter?.(dataItem);\n });\n\n const originalDataList = useMemo(() => {\n const list = cloneState(state.treeList || []);\n if (treeSearchValue && searchResultType !== 'highlight') {\n const resultList = treeFilter(\n cloneState(state.treeList || []),\n (node) => {\n if (customSearchRule) {\n return customSearchRule(node, treeSearchValue);\n }\n const value = node[fieldNames.label]?.toLowerCase();\n return value.indexOf(treeSearchValue.toLowerCase()) >= 0;\n },\n { childrenName: fieldNames.children },\n );\n return resultList;\n }\n return list;\n }, [\n customSearchRule,\n fieldNames.children,\n fieldNames.label,\n searchResultType,\n state.treeList,\n treeSearchValue,\n ]);\n\n const treeData = useMemo(() => {\n const loop = (data: TAny[]): TAny[] =>\n data?.map((item) => {\n const adapterItem = treeItemDataAdapterHandle?.(item) || item;\n const disabled = disabledCanUse ? undefined : adapterItem.disabled;\n const strTitle = (adapterItem[fieldNames.label] || '') as string;\n let titleDom;\n if (treeSearchValue && isString(strTitle)) {\n const strTitleNew = strTitle?.toLowerCase();\n const index = strTitleNew.indexOf(treeSearchValue.toLowerCase());\n const beforeStr = strTitle.substring(0, index);\n const afterStr = strTitle.slice(index + treeSearchValue.length);\n const centerStr = strTitle.slice(index, index + treeSearchValue.length);\n titleDom =\n index > -1 ? (\n <span\n className={classNames({\n 'v-tree-item-disabled': adapterItem.disabled,\n })}\n >\n {beforeStr}\n <span className=\"site-tree-search-value\">{centerStr}</span>\n {afterStr}\n </span>\n ) : null;\n }\n if (!titleDom && adapterItem.disabled) {\n titleDom = (\n <span\n className={classNames({\n 'v-tree-item-disabled': adapterItem.disabled,\n })}\n >\n {strTitle}\n </span>\n );\n }\n const children = adapterItem[fieldNames.children];\n return {\n ...adapterItem,\n disabled,\n [fieldNames.label]: titleDom || strTitle,\n _treeItemName: strTitle,\n _disabled: adapterItem.disabled,\n [fieldNames.children]: isArray(children) && children.length > 0 ? loop(children) : undefined,\n };\n });\n return loop(originalDataList);\n }, [\n originalDataList,\n treeItemDataAdapterHandle,\n disabledCanUse,\n fieldNames.label,\n fieldNames.children,\n treeSearchValue,\n ]);\n const loadData = hooks.useCallbackRef((dataItem: TPlainObject) => {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise<void>(async (resolve, reject) => {\n if (dataItem[fieldNames.children]) {\n resolve();\n return;\n }\n try {\n const respData = await props.loadDataServiceConfig?.onRequest?.(\n props.loadDataServiceConfig?.getParams?.(dataItem) || {},\n );\n const respDataList = (\n props.loadDataServiceConfig?.onRequestResultAdapter\n ? props.loadDataServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n\n void actions\n .treeListAppendChildren({\n value: dataItem[fieldNames.value],\n appendList: respDataList,\n childrenName: fieldNames.children,\n valueName: fieldNames.value,\n })\n .then((allState) => {\n onChangeSelectorList(allState.treeList as TPlainObject[]);\n resolve();\n });\n } catch (error: TAny) {\n void message.error(error.message || '数据加载异常...');\n // 此处失败后,会重试“loadData”请求多次\n reject();\n }\n });\n });\n\n const isLeafNode = hooks.useCallbackRef((nodeData) => {\n const children = nodeData?.[fieldNames.children];\n // 当loadDataFlag=true,考虑叶子节点显示问题\n const loadDataFlag = props.loadDataFlag;\n const loadHasChildren = loadDataFlag ? !nodeData.isLeaf : false;\n const hasChildren = (children && children.length > 0) || loadHasChildren;\n return !hasChildren;\n });\n\n const titleRender = hooks.useCallbackRef((nodeData) => {\n const stringLabel = nodeData._treeItemName || nodeData[fieldNames.label];\n const buttonOperateConfig = menus?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n });\n if (buttonOperateConfig?.operateList.length) {\n return (\n <Fragment>\n <span className=\"tree-item-title\" data-value={nodeData[fieldNames.value]}>\n {labelRender?.(nodeData) || nodeData?.[fieldNames.label]}\n </span>\n <ButtonOperate\n gap={5}\n {...buttonOperateConfig}\n dropdownMenuProps={{\n placement: 'bottomRight',\n isFixed: true,\n ...buttonOperateConfig?.dropdownMenuProps,\n }}\n className={classNames('tree-item-title-operate', buttonOperateConfig.className)}\n />\n </Fragment>\n );\n }\n\n if (menuLayoutTypeNew === 'fold') {\n let menuOptions: TAny[] = [];\n if (props.menuOptions?.fold) {\n menuOptions =\n props.menuOptions?.[menuLayoutTypeNew]?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n }) || [];\n } else {\n menuOptions =\n props.getMenuOptions?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n }) || [];\n }\n return (\n <Fragment>\n <span className=\"tree-item-title\" data-value={nodeData[fieldNames.value]}>\n {labelRender?.(nodeData) || nodeData?.[fieldNames.label]}\n </span>\n {menuOptions.length > 0 && (\n <DropdownMenuWrapper menuList={menuOptions} placement=\"bottomRight\">\n <MoreOutlined />\n </DropdownMenuWrapper>\n )}\n </Fragment>\n );\n }\n const menuOptions = props.menuOptions?.tile?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n });\n\n return (\n <Fragment>\n <span className=\"tree-item-title\" data-value={nodeData[fieldNames.value]}>\n {labelRender?.(nodeData) || nodeData?.[fieldNames.label]}\n </span>\n {menuOptions ? (\n <ButtonOperate\n gap={5}\n {...menuOptions}\n className={classNames('tree-item-title-operate', menuOptions.className)}\n />\n ) : null}\n </Fragment>\n );\n });\n\n const onChangeDebounce = hooks.useDebounceCallback((value: string) => {\n setTreeSearchValue(value);\n props.onSearchValueChange?.(value);\n }, 300);\n\n const onSearchChange = hooks.useCallbackRef((e: React.ChangeEvent<HTMLInputElement>) => {\n onChangeDebounce(e.target.value);\n });\n\n const iconHandle = hooks.useCallbackRef((treeData) => {\n if (!props.icon) return null;\n if (isValidElement(props.icon)) return props.icon;\n const isLeafFlag = isLeafNode(treeData.data);\n return props.icon({\n ...treeData,\n isParent: !isLeafFlag,\n isLeaf: isLeafFlag,\n });\n });\n\n const treeFieldNames = useMemo(() => {\n return {\n title: fieldNames.label,\n key: fieldNames.value,\n children: fieldNames.children,\n };\n }, [fieldNames]);\n const showTree = treeData.length > 0 && state.requestStatus !== 'request-error';\n const commonProps = {\n showLine: { showLeafIcon: false },\n titleRender,\n blockNode: true,\n switcherIcon: <CaretDownFilled />,\n onDrop: (info) => {\n if (onDropPrev) {\n const boo = onDropPrev(info);\n if (!boo) return;\n }\n const { dataList, dragNodeData } = onTreeDrop(originalDataList, fieldNames, info);\n onDropNodeHandle?.(dragNodeData);\n onChangeSelectorList(dataList);\n },\n expandedKeys: treeExpandedKeys,\n ...otherProps,\n fieldNames: treeFieldNames,\n treeData,\n onExpand,\n loadData: props.loadDataFlag ? loadData : undefined,\n style: { width: '100%' },\n icon: iconHandle,\n onClick: (e) => {\n if (clickParentNodeToggleExpand) {\n let targetEle = e.target;\n let value = targetEle.dataset.value;\n if (isUndefinedOrNull(value)) {\n targetEle = dom.findParentsElement(e.target, (node: Element) => {\n return (\n node.classList?.contains('tree-item-title') || node.classList?.contains('ant-tree-treenode')\n );\n });\n value = targetEle.dataset.value;\n }\n if (!isUndefinedOrNull(value)) {\n const target = state.treeTiledArrayMap[value];\n if (target?.[fieldNames.children] && target[fieldNames.children].length > 0) {\n const treeExpandedTarget = treeExpandedKeys.includes(value);\n if (treeExpandedTarget) {\n const newList = array.arrayRemove(treeExpandedKeys, value);\n setTreeExpandedKeys([...newList]);\n } else {\n setTreeExpandedKeys([...treeExpandedKeys, value]);\n }\n }\n }\n }\n },\n };\n\n const checkedProps = {\n onCheck: onTreeChangeHandle,\n checkable,\n checkedKeys: valueList,\n };\n\n const selectedProps = {\n onSelect: onTreeChangeHandle,\n multiple: false,\n selectedKeys: valueList,\n };\n const sceneProps = checkable ? checkedProps : selectedProps;\n const cName = classNames('v-tree-wrapper', `v-tree-wrapper-menu-${menuTriggerTypeNew}`, className);\n const isSearchEmpty = state.treeList.length > 0 && !showTree && treeSearchValue;\n return (\n <div className={cName} style={style}>\n {!!showSearch && (\n <div className=\"v-tree-wrapper-search-area\" style={searchStyle}>\n <InputSearchWrapper\n className=\"v-tree-wrapper-search\"\n placeholder={isUndefinedOrNull(searchPlaceholder) ? '搜索' : searchPlaceholder}\n onChange={onSearchChange}\n value={treeSearchValue}\n allowClear\n />\n {!!props.searchExtraElement && (\n <span className=\"v-tree-wrapper-search-extra\">{props.searchExtraElement}</span>\n )}\n </div>\n )}\n\n {showTree ? (\n <div className=\"v-tree-wrapper-tree-wrapper\">\n <Spin spinning={state.requestStatus === 'request-progress'} />\n <Tree {...sceneProps} {...commonProps} className=\"v-tree-wrapper-tree\"></Tree>\n </div>\n ) : (\n <RequestStatus\n status={state.requestStatus}\n loading={loading}\n messageConfig={{\n 'request-success': isSearchEmpty ? '搜索结果为空' : '暂无数据',\n 'request-error': state.requestErrorMessage,\n ...requestMessageConfig,\n }}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n )}\n </div>\n );\n});\n","import type { TPlainObject } from '@flatbiz/utils';\nimport { attachPropertiesToComponent } from '@flatbiz/utils';\nimport type { ForwardRefExoticComponent, RefAttributes } from 'react';\nimport { getTreeDataList } from './hooks';\nimport type { TreeWrapperProps, TreeWrapperRefApi } from './tree-wrapper';\nimport { TreeWrapper as TreeWrapperInner } from './tree-wrapper';\nexport type { TreeServiceConfig, TreeWrapperProps } from './tree-wrapper';\n/**\n * Tree包装组件,默认返回父节点,可配置不返回\n * @param props\n * @returns\n * ```\n * 1. treeNode内置字段说明(如需要相关功能,可在接口中添加固定字段)\n * a. disabled 禁掉响应\n * b. isLeaf 设置为叶子节点 (设置了 loadData 时有效)。为 false 时会强制将其作为父节点\n * c. disableCheckbox checkable模式下,treeNode复选框是否可选\n * 2. 当设置selectorTreeList属性后,serviceConfig将失效\n * 3. checkable=true,为多选模式\n * 4. 设置value后,组件显示受控\n * 5. 设置loadDataFlag=true,会动态获取children,当treeNode中包含isLeaf=true字段,表示为叶子节点,没有children了\n * 6. 内置 onDrop 事件已处理数组排序,通过 onDropNodeHandle 事件可获取操作节点排序数据;自定义onDrop后,内置onDrop失效\n * ```\n */\nexport const TreeWrapper: ForwardRefExoticComponent<TreeWrapperProps & RefAttributes<TreeWrapperRefApi>> & {\n getTreeDataList: (modelKey: string) => TPlainObject[];\n} = attachPropertiesToComponent(TreeWrapperInner, {\n /**\n * 获取树形原数据\n * ```\n * 参数 modelKey 与 TreeWrapper属性 modelKey相同,才能获取数据\n * ```\n */\n getTreeDataList: getTreeDataList,\n});\n"],"names":["defaultState","treeList","treeTiledArray","treeTiledArrayMap","queryIsEmpty","TreeWrapperModel","actions","setTreeList","params","state","treeToArray","childrenName","arrayToMap","valueName","requestStatus","resetTreeList","changeRequestStatus","status","requestErrorMessage","errorMessage","undefined","treeListAppendChildren","tiledArray","target","value","_isArray","appendList","length","isLeaf","treeWrapperModels","treeWrapperModel","key","Model","getTreeDataList","modelKey","getState","getDefaultExpandAllKeys","fieldNames","allValues","children","filter","item","childrenValue","map","getExpandedKeys","treeToTiledArray","treeLeafParentsArray","parentValue","getVauleList","data","labelInValueFieldNames","tempList","isUndefinedOrNull","_isObject","onTreeDrop","dataList","info","dropKey","node","dragKey","dragNode","dropPos","pos","split","dropPosition","Number","treeKeyName","treeChildrenName","loop","callback","i","cloneState","dragObj","index","arr","splice","dropToGap","unshift","props","expanded","ar","_item","dragNodeData","dorpNodeId","_tree$walkThroughTree","id","_tree","walkThroughTree","_parent","tileList","find","parentId","getActualSelectKeyList","checkedValueList","chidlrenKey","valueKey","leafValueDataMap","hasChildrenList","retainHasChildrenValueList","forEach","_treeTiledArrayMap$it","isNotEmptyArray","push","childrenTiledList","Object","keys","targetList","temp","removeTargetNodeAndAllChildrenNode","awitDeleteNode","awitDeleteTieldDataMap","treeToTiledMap","removeAllSelectLeafNode","awitDeleteCheckedValueMap","_treeTiledArrayMap$it2","childrenList","targetMap","_extends","removeAllParentNode","completionParentChildrenNode","values","concat","_treeTiledArrayMap$it3","Array","from","Set","compareArrays","arr1","arr2","sortedArr1","slice","sort","sortedArr2","JSON","stringify","TreeWrapper","forwardRef","ref","style","serviceConfig","effectDependencyList","selectorTreeList","onChange","_props$checkableRespo","checkableResponseParentNode","checkable","onSelectorTreeListChange","onRequestResponseChange","treeItemDataAdapter","searchValue","showSearch","searchPlaceholder","requestMessageConfig","labelInValue","disabledCanUse","menuLayoutType","menuTriggerType","initRootExpand","searchResultType","onDropNodeHandle","onDropPrev","labelRender","searchStyle","className","defaultExpandAll","menus","customSearchRule","checkableType","clickParentNodeToggleExpand","disableNodeSelect","required","executeOnChangeInRenderFirstValue","otherProps","_objectWithoutPropertiesLoose","_excluded","hasSelectorTreeList","hasOwnProperty","newServiceConfig","newEffectDependencyList","_useState","useState","treeExpandedKeys","setTreeExpandedKeys","_treeWrapperModel$use","useStore","_fbaHooks$useSafeStat","fbaHooks","useSafeState","loading","setLoading","requestPreKey","searchTypeHighlight","useMemo","label","menuLayoutTypeNew","menuTriggerTypeNew","responseFirstRef","useRef","innerValueListRef","labelInValueFieldNamesMerge","_useState2","treeSearchValue","setTreeSearchValue","valueList","useEffectCustom","current","originalList","_dataList$push","innerExpandedKeys","getTreeExpandedKeys","valueIsEmpty","serviceResponseHandle","respData","result","onRequestResultAdapter","list","_get","console","warn","startDataSourceRequest","_hooks","useCallbackRef","Promise","$return","$error","requiredParamsKeys","isEmpty","_respData","respDataListNew","$Try_1_Post","$boundEx","$Try_1_Catch","error","message","onRequest","Error","_extend","join","$Try_2_Post","$Try_2_Catch","window","resolve","then","$await_4","$await_5","onChangeSelectorList","allState","refresh","newTreeExpandedKeys","includes","targetKeys","useUpdateEffect","labelValue","String","toLowerCase","treeExpandedKeysNew","useImperativeHandle","onClearSelectorList","getTreeTiledArray","getTreeTiledArrayMap","onChangeExpandedKeys","onSelectAll","onCancelSelectAll","onExpandedAll","onCancelExpandedAll","onExpand","expandedKeys","onInnerChange","selectedKey","operateNodeData","operateAllNodeDataList","operateInfo","toArray","nodeValue","onTreeChangeHandle","checkedData","finalCheckedValueList","completeCheckedValueList","checkStrictly","checked","x","operateNode","propsCompleteValues","completeCheckedItemList","lvValue","lvLabel","finalCheckedList","_ref","treeItemDataAdapterHandle","dataItem","originalDataList","resultList","treeFilter","_node$fieldNames$labe","indexOf","treeData","_extends2","adapterItem","disabled","strTitle","titleDom","_isString","strTitleNew","beforeStr","substring","afterStr","centerStr","_jsxs","_classNames","_jsx","_treeItemName","_disabled","loadData","reject","_props$loadDataServic","_props$loadDataServic2","_props$loadDataServic3","respDataList","$Try_3_Post","$Try_3_Catch","loadDataServiceConfig","getParams","$await_6","isLeafNode","nodeData","loadDataFlag","loadHasChildren","hasChildren","titleRender","_extends3","_props$menuOptions3","_extends6","stringLabel","buttonOperateConfig","operateList","Fragment","ButtonOperate","gap","dropdownMenuProps","placement","isFixed","_props$menuOptions","menuOptions","fold","_props$menuOptions2","_props$menuOptions2$m","_extends4","call","_extends5","getMenuOptions","DropdownMenuWrapper","menuList","_MoreOutlined","tile","onChangeDebounce","useDebounceCallback","onSearchValueChange","onSearchChange","e","iconHandle","icon","isValidElement","isLeafFlag","isParent","treeFieldNames","title","showTree","commonProps","showLine","showLeafIcon","blockNode","switcherIcon","_CaretDownFilled","onDrop","boo","_onTreeDrop","width","onClick","targetEle","dataset","dom","findParentsElement","_node$classList","_node$classList2","classList","contains","treeExpandedTarget","newList","_array","arrayRemove","checkedProps","onCheck","checkedKeys","selectedProps","onSelect","multiple","selectedKeys","sceneProps","cName","isSearchEmpty","InputSearchWrapper","placeholder","allowClear","searchExtraElement","Spin","spinning","Tree","RequestStatus","messageConfig","errorButton","Button","type","attachPropertiesToComponent","TreeWrapperInner"],"mappings":";o4EAoCA,IAAMA,EAA2B,CAC/BC,SAAU,GACVC,eAAgB,GAChBC,kBAAmB,CAAE,EACrBC,aAAc,OAGhB,IAAMC,EAA6D,CACjEC,QAAS,CACPC,YAAa,SAAbA,EAAcC,GACZ,OAAO,SAACC,GACNA,EAAMR,SAAWO,EAAOP,UAAY,GACpCQ,EAAMP,eAAiBQ,EAAYD,EAAMR,SAAUO,EAAOG,cAC1DF,EAAMN,kBAAoBS,EAAWH,EAAMP,eAAgBM,EAAOK,WAClEJ,EAAMK,cAAgB,kBAEzB,EACDC,cAAe,SAAfA,IACE,OAAO,SAACN,GACNA,EAAMR,SAAW,GACjBQ,EAAMP,eAAiB,GACvBO,EAAMN,kBAAoB,GAE7B,EACDa,oBAAqB,SAArBA,EAAsBR,GACpB,OAAO,SAACC,GACNA,EAAMK,cAAgBN,EAAOS,OAC7B,GAAIT,EAAOS,SAAW,gBAAiB,CACrCR,EAAMR,SAAW,GACjBQ,EAAMP,eAAiB,GACvBO,EAAMN,kBAAoB,GAC1BM,EAAMS,oBAAsBV,EAAOW,cAAgB,QACrD,KAAO,CACLV,EAAMS,oBAAsBE,SAC9B,EAEH,EACDC,uBAAwB,SAAxBA,EAAyBb,GACvB,OAAO,SAACC,GACN,IAAMa,EAAaZ,EAAYD,EAAMR,SAAUO,EAAOG,cACtD,IAAMR,EAAoBS,EAAWU,EAAYd,EAAOK,WACxD,IAAMU,EAASpB,EAAkBK,EAAOgB,OACxC,GAAID,EAAQ,CACV,GAAIE,EAAQjB,EAAOkB,aAAelB,EAAOkB,WAAWC,OAAS,EAAG,CAC9DJ,EAAOf,EAAOG,cAAgBH,EAAOkB,UACvC,KAAO,CACLH,EAAOK,OAAS,IAClB,CACF,CACAnB,EAAMP,eAAiBoB,EACvBb,EAAMN,kBAAoBA,EAE9B,GAEFM,MAAOT,GAGT,IAAM6B,EAAyF,CAAA,EAQxF,IAAMC,EAAmB,SAAnBA,EAAoBC,GAC/B,IAAKF,EAAkBE,GAAM,CAC3BF,EAAkBE,GAAOC,EAAM3B,EACjC,CACA,OAAOwB,EAAkBE,EAC3B,ECvGO,IAAME,EAAkB,SAAlBA,EAAmBC,GAC9B,IAAMzB,EAAQqB,EAAiBI,GAAUC,WACzC,OAAO1B,EAAMR,QACf,ECWO,IAAMmC,EAA0B,SAA1BA,EACXnC,EACAoC,GAEA,IAAMC,EAAY5B,EAAYT,EAAUoC,EAAWE,UAChDC,QAAO,SAACC,GACP,IAAMC,EAAgBD,EAAKJ,EAAWE,UACtC,OAAOG,GAAiBA,EAAcf,OAAS,CACjD,IACCgB,KAAI,SAACF,GACJ,OAAOA,EAAKJ,EAAWb,MACzB,IACF,OAAOc,CACT,EAEO,IAAMM,EAAkB,SAAlBA,EACXpB,EACAvB,EACAoC,GAEA,IAAMf,EAAauB,EAAiB5C,EAAUoC,GAC9C,OAAOS,EAAqBtB,EAAOF,EAAY,KAAM,CACnDE,MAAO,QACPuB,YAAa,gBAEZP,QAAO,SAACC,GACP,IAAMC,EAAgBD,EAAKJ,EAAWE,UACtC,OAAOG,GAAiBA,EAAcf,OAAS,CACjD,IACCgB,KAAI,SAACF,GAAI,OAAKA,EAAKjB,QACxB,EAEO,IAAMwB,EAAe,SAAfA,EAAgBC,EAAMC,GACjC,IAAIC,EAAWC,EAAkBH,GAAQ,GAAKA,EAC9CE,EAAW1B,EAAQ0B,GAAYA,EAAW,CAACA,GAC3CA,EAAWA,EAASR,KAAI,SAACF,GACvB,GAAIY,EAASZ,GAAO,OAAOA,EAAKS,EAAuB1B,OACvD,OAAOiB,CACT,IACA,OAAOU,CACT,EA6CO,IAAMG,EAA+B,SAA/BA,EAAgCC,EAAUlB,EAAYmB,GACjE,IAAMC,EAAUD,EAAKE,KAAK3B,IAC1B,IAAM4B,EAAUH,EAAKI,SAAS7B,IAC9B,IAAM8B,EAAUL,EAAKE,KAAKI,IAAIC,MAAM,KACpC,IAAMC,EAAeR,EAAKQ,aAAeC,OAAOJ,EAAQA,EAAQlC,OAAS,IACzE,IAAMuC,EAAc7B,EAAWb,MAC/B,IAAM2C,EAAmB9B,EAAWE,SAEpC,IAAM6B,EAAO,SAAPA,EACJnB,EACAlB,EACAsC,GAEA,IAAK,IAAIC,EAAI,EAAGA,EAAIrB,EAAKtB,OAAQ2C,IAAK,CACpC,GAAIrB,EAAKqB,GAAGJ,KAAiBnC,EAAK,CAChC,OAAOsC,EAASpB,EAAKqB,GAAIA,EAAGrB,EAC9B,CACA,GAAIA,EAAKqB,GAAGH,GAAmB,CAC7BC,EAAKnB,EAAKqB,GAAGH,GAAoBpC,EAAKsC,EACxC,CACF,GAEF,IAAMpB,EAAOsB,EAAWhB,GAGxB,IAAIiB,EACJJ,EAAKnB,EAAMU,GAAS,SAAClB,EAAMgC,EAAOC,GAChCA,EAAIC,OAAOF,EAAO,GAClBD,EAAU/B,CACZ,IAEA,IAAKe,EAAKoB,UAAW,CAEnBR,EAAKnB,EAAMQ,GAAS,SAAChB,GACnBA,EAAK0B,GAAoB1B,EAAK0B,IAAqB,GAEnD1B,EAAK0B,GAAkBU,QAAQL,EACjC,GACF,MAAO,IACJhB,EAAKE,KAAKoB,MAAMvC,UAAY,IAAIZ,OAAS,GAC1C6B,EAAKE,KAAKoB,MAAMC,UAChBf,IAAiB,EACjB,CACAI,EAAKnB,EAAMQ,GAAS,SAAChB,GACnBA,EAAK0B,GAAoB1B,EAAK0B,IAAqB,GAEnD1B,EAAK0B,GAAkBU,QAAQL,EAGjC,GACF,KAAO,CACL,IAAIQ,EAAiB,GACrB,IAAIV,EACJF,EAAKnB,EAAMQ,GAAS,SAACwB,EAAOR,EAAOC,GACjCM,EAAKN,EACLJ,EAAIG,CACN,IACA,GAAIT,KAAkB,EAAG,CACvBgB,EAAGL,OAAOL,EAAI,EAAGE,EACnB,KAAO,CACLQ,EAAGL,OAAOL,EAAK,EAAG,EAAGE,EACvB,CACF,CACA,MAAO,CACLjB,SAAUN,EACViC,aAAcA,EAAavB,EAASV,EAAMZ,GAE9C,EAEO,IAAM6C,EAAe,SAAfA,EACXC,EACA5B,EACAlB,GACG,IAAA+C,EACH,IAAMC,EAAKhD,EAAWb,MACtB,IAAMe,EAAWF,EAAWE,SAC5B+C,EAAKC,iBAAeH,EAAA,CAAA,EAAAA,EACfC,GAAKjE,UAASgE,EAAG7C,GAAWgB,EAAQ6B,IACvC,SAAC1B,EAAMe,EAAOe,GACZ9B,EAAK,WAAae,EAClBf,EAAK,cAAgB8B,GAAAA,UAAAA,EAAAA,EAAUH,EAChC,GACD9C,GAEF,IAAMkD,EAAW/E,EAAY6C,EAAUhB,GACvC,IAAMhB,EAASkE,EAASC,MAAK,SAACjD,GAAI,OAAKA,EAAK4C,KAAQF,KACpD,MAAO,CACLQ,SAAUpE,GAAM,UAAA,EAANA,EAAS,cACnB8D,GAAI9D,GAAM,UAAA,EAANA,EAAS8D,GACbZ,MAAOlD,GAAAA,UAAAA,EAAAA,EAAS,WAEpB,EAKO,IAAMqE,GAAyB,SAAzBA,EACXC,EACA1F,EACA2F,EACAC,GAEA,IAAMC,EAAiC,CAAA,EACvC,IAAMC,EAA0C,GAChD,IAAMC,EAAqD,GAC3DL,EAAiBM,SAAQ,SAAC1D,GAAS,IAAA2D,EACjC,GAAIC,GAAeD,EAACjG,EAAkBsC,KAAK,UAAA,EAAvB2D,EAA0BN,IAAe,CAC3DG,EAAgBK,KAAK7D,EACvB,KAAO,CACLuD,EAAiBvD,GAAQA,CAC3B,CACF,IACA,GAAIwD,EAAgBtE,OAAS,EAAG,CAC9BsE,EAAgBE,SAAQ,SAAC1D,GACvB,IAAM8D,EAAoB7F,EAAYP,EAAkBsC,GAAMqD,GAAcA,GAC5E,GAAIU,OAAOC,KAAKT,GAAkBrE,OAAS4E,EAAkB5E,OAAQ,CACnE,IAAM+E,EAAaH,EAAkB/D,QAAO,SAACC,GAC3C,OAAOoD,EAAiBH,MAAK,SAACiB,GAAI,OAAKA,IAASlE,EAAKsD,KACvD,IACA,GAAIW,EAAW/E,SAAW4E,EAAkB5E,OAAQ,CAClDuE,EAA2BI,KAAK7D,EAClC,CACF,CACF,GACF,CAEA,OAAOoD,EAAiBrD,QAAO,SAACC,GAC9B,OAAOyD,EAA2BR,MAAK,SAACiB,GAAI,OAAKA,GAAQlE,CAAI,KAAKuD,EAAiBvD,EACrF,GACF,EAGO,IAAMmE,GAAqC,SAArCA,EACXf,EACAgB,EACAf,EACAC,GAEA,IAAMe,EAAuCC,EAAe,CAACF,GAAiB,CAC5ErF,MAAOuE,EACPxD,SAAUuD,IAEZ,OAAOD,EAAiBrD,QAAO,SAACC,GAC9B,OAAQqE,EAAuBrE,EACjC,GACF,EAGO,IAAMuE,GAA0B,SAA1BA,EACXnB,EACA1F,EACA2F,EACAC,GAEA,IAAIkB,EAA0C,CAAA,EAC9CpB,EAAiBM,SAAQ,SAAC1D,GAAS,IAAAyE,EACjC,IAAMC,GAAYD,EAAG/G,EAAkBsC,KAAlByE,UAAAA,EAAAA,EAA0BpB,GAC/C,GAAIO,EAAgBc,GAAe,CAEjC,IAAMC,EAAYL,EAAeI,EAAc,CAC7C3F,MAAOuE,EACPxD,SAAUuD,IAEZmB,EAAyBI,EAAA,CAAA,EACpBJ,EACAG,EAEP,CACF,IACA,OAAOvB,EAAiBrD,QAAO,SAACC,GAAI,OAAMwE,EAA0BxE,KACtE,EAGO,IAAM6E,GAAsB,SAAtBA,EACXzB,EACA1F,EACA2F,GAEA,OAAOD,EAAiBrD,QAAO,SAACC,GAC9B,OAAQ4D,EAAgBlG,EAAkBsC,GAAMqD,GAClD,GACF,EAGO,IAAMyB,GAA+B,SAA/BA,EACXC,EACArH,EACA2F,EACAC,GAEA,IAAIzD,EAAS,GAAAmF,OAAOD,GACpBA,EAAOrB,SAAQ,SAAC1D,GAAS,IAAAiF,EACvB,IAAMP,GAAYO,EAAGvH,EAAkBsC,KAAlBiF,UAAAA,EAAAA,EAA0B5B,GAC/C,GAAIO,EAAgBc,GAAe,CACjC,IAAMT,EAAahG,EAAYyG,EAAcrB,GAC7CxD,EAAYA,EAAUmF,OAAOf,EAAW/D,KAAI,SAACgE,GAAI,OAAKA,EAAKZ,EAAS,IACtE,CACF,IACA,OAAO4B,MAAMC,KAAK,IAAIC,IAAIvF,GAC5B,6oBCoBA,IAAMwF,GAAgB,SAAhBA,EAAiBC,EAAMC,GAC3B,IAAMC,EAAaF,EAAKG,QAAQC,OAChC,IAAMC,EAAaJ,EAAKE,QAAQC,OAChC,OAAOE,KAAKC,UAAUL,KAAgBI,KAAKC,UAAUF,EACvD,EAgCO,IAAMG,GAAcC,GAAgD,SAAC1D,EAAO2D,GACjF,IACEC,EAqCE5D,EArCF4D,MACAC,EAoCE7D,EApCF6D,cACAC,EAmCE9D,EAnCF8D,qBACAC,EAkCE/D,EAlCF+D,iBACArH,EAiCEsD,EAjCFtD,MACAsH,EAgCEhE,EAhCFgE,SACA5G,EA+BE4C,EA/BF5C,SAAQ6G,EA+BNjE,EA9BFkE,4BAAAA,EAA2BD,SAAG,EAAA,KAAIA,EAClCE,EA6BEnE,EA7BFmE,UACAC,EA4BEpE,EA5BFoE,yBACAC,EA2BErE,EA3BFqE,wBACAC,EA0BEtE,EA1BFsE,oBACAC,EAyBEvE,EAzBFuE,YACAC,GAwBExE,EAxBFwE,WACAC,GAuBEzE,EAvBFyE,kBACAC,GAsBE1E,EAtBF0E,qBACAtG,GAqBE4B,EArBF5B,uBACAuG,GAoBE3E,EApBF2E,aACAC,GAmBE5E,EAnBF4E,eACAC,GAkBE7E,EAlBF6E,eACAC,GAiBE9E,EAjBF8E,gBACAC,GAgBE/E,EAhBF+E,eACAC,GAeEhF,EAfFgF,iBACAC,GAcEjF,EAdFiF,iBACAC,GAaElF,EAbFkF,WACAC,GAYEnF,EAZFmF,YACAC,GAWEpF,EAXFoF,YACAC,GAUErF,EAVFqF,UACAC,GASEtF,EATFsF,iBACAC,GAQEvF,EARFuF,MACAC,GAOExF,EAPFwF,iBACAC,GAMEzF,EANFyF,cACAC,GAKE1F,EALF0F,4BACAC,GAIE3F,EAJF2F,kBACAC,GAGE5F,EAHF4F,SACAC,GAEE7F,EAFF6F,kCACGC,GAAUC,EACX/F,EAAKgG,IAET,IAAMC,GAAsBjG,EAAMkG,eAAe,oBACjD,IAAMC,GAAmBtC,GAAiB,GAC1C,IAAMuC,GAA0BtC,GAAwB,GACxD,IAAAuC,GAAgDC,EAAiC,IAA1EC,GAAgBF,GAAA,GAAEG,GAAmBH,GAAA,GAC5C,IAAAI,GAAyBzJ,EAAiBI,GAAUsJ,WAA7C/K,GAAK8K,GAAA,GAAEjL,GAAOiL,GAAA,GACrB,IAAAE,GAA8BC,EAASC,aAAa,OAA7CC,GAAOH,GAAA,GAAEI,GAAUJ,GAAA,GAC1B,IAAMK,GAAa,oBAAuBhH,EAAM5C,SAChD,IAAM6J,GAAsBjC,KAAqB,YACjD,IAAMzH,GAAa2J,GAAQ,WACzB,OAAA3E,EAAA,CACE4E,MAAO,QACPzK,MAAO,QACPe,SAAU,YACPuC,EAAMzC,WAEb,GAAG,CAACyC,EAAMzC,aACV,IAAM6J,GAAoBvC,KAAmBvI,UAAY,OAASuI,GAClE,IAAMwC,GAAqBvC,KAAoBxI,UAAY,QAAUwI,GACrE,IAAMwC,GAAmBC,EAAO,MAChC,IAAMC,GAAoBD,EAA0BjL,WAEpD,IAAMmL,GAA8BP,GAAQ,WAC1C,OAAA3E,EAAA,CAAS4E,MAAO,QAASzK,MAAO,SAAY0B,GAC9C,GAAG,CAACA,KAEJ,IAAAsJ,GAA8CpB,IAAvCqB,GAAeD,GAAA,GAAEE,GAAkBF,GAAA,GAE1C,IAAMG,GAAYX,GAAQ,WACxB,OAAOhJ,EAAaxB,EAAO+K,GAC7B,GAAG,CAACA,GAA6B/K,IAEjCkK,EAASkB,iBAAgB,WACvB,GAAInM,GAAMR,SAAS0B,OAAS,EAAG,CAC7B,GACEyK,GAAiBS,SACjBpD,IACAkB,IACAgC,GAAUhL,OAAS,EACnB,CACA,IAAM4B,EAA2B,GACjC,IAAMuJ,EAA+B,GACrCH,GAAUxG,SAAQ,SAAC1D,GACjB,IAAMlB,EAASd,GAAMN,kBAAkBsC,GACvC,GAAIlB,EAAQ,CAAA,IAAAwL,EACVD,EAAaxG,KAAK/E,GAClBgC,EAAS+C,MAAIyG,KAAAA,EACVR,GAA4BN,OAAQ1K,EAAOc,GAAW4J,OAAMc,EAC5DR,GAA4B/K,OAAQD,EAAOc,GAAWb,OAAMuL,GAEjE,CACF,IACA,GAAI9D,EAAW,CACbnE,EAAMgE,UAANhE,MAAAA,EAAMgE,SAAWvF,EAAWA,EAAWnC,UAAW0L,EACpD,KAAO,CACLhI,EAAMgE,UAANhE,MAAAA,EAAMgE,SAAWvF,EAAWA,EAAS,GAAKnC,UAAW0L,EAAa,GACpE,CACF,CACA,GAAIV,GAAiBS,SAAWF,GAAUhL,SAAW,EAAG,CACtDyK,GAAiBS,QAAU,MAC3B,GAAIzC,GAAkB,CACpBkB,GAAoBlJ,EAAwB3B,GAAMR,SAAUoC,KAC5D,MACD,MAAM,GAAIwH,IAAkBpJ,GAAMR,SAAS0B,OAAQ,CAClD2J,GAAoB,CAAC7K,GAAMR,SAAS,GAAGoC,GAAWb,SAClD,MACF,CACF,CACA,GAAImL,GAAUhL,OAAS,EAAG,CACxByK,GAAiBS,QAAU,MAC3B,GAAIP,GAAkBO,QAAS,CAC7B,IAAK/E,GAAc6E,GAAWL,GAAkBO,SAAU,CACxD,IAAMG,EAAoBC,GAAoBN,GAAW,MACzDrB,GAAoB3D,MAAMC,KAAK,IAAIC,IAAIwD,IAAAA,UAAAA,EAAAA,GAAkB5D,OAAOuF,KAClE,CACF,KAAO,CACL,IAAMA,EAAoBC,GAAoBN,GAAW,MACzDrB,GAAoB3D,MAAMC,KAAK,IAAIC,IAAIwD,IAAAA,UAAAA,EAAAA,GAAkB5D,OAAOuF,KAClE,CACF,CACF,CAEF,GAAG,CAACvM,GAAMR,SAAUoI,KAAKC,UAAUqE,MAEnC,IAAMO,GAAe,SAAfA,EAAgBjK,GACpB,OAAOA,IAAS,IAAMG,EAAkBH,IAG1C,IAAMkK,GAAwB,SAAxBA,EAAyBC,GAC7B,IAAIC,EAAyBD,EAC7B,GAAInC,GAAiBqC,uBAAwB,CAC3CD,EAASpC,GAAiBqC,uBAAuBF,EACnD,MAAO,GAAI/K,GAAWkL,KAAM,CAC1BF,EAASG,EAAIJ,EAAU/K,GAAWkL,KAAM,KAAO,EACjD,CACA,IAAK9L,EAAQ4L,GAAS,CACpBI,QAAQC,KAAK,4CACb,MAAO,EACT,CACA,OAAOL,GAGT3B,EAASkB,iBAAgB,WACvBF,GAAmBrD,EACrB,GAAG,CAACA,IAEJ,IAAMsE,GAAyBC,EAAMC,gBAAe,WAAA,OAAA,IAAAC,SAAA,SAAAC,EAAAC,GAAA,IAK1CC,EACAzN,EAEE0N,EAiBAC,EAEAC,EAlhBd,IAAIC,aAAJ,IAAI,OAAAN,GAAK,CAAC,MAAAO,GAAW,OAAON,EAAAM,EAAM,GAAlC,IAAIC,EAAA,SAkiBSC,GAliBb,IAmiBMpC,GAAiBS,QAAU,MAC3BhB,GAAW,YACN4C,EAAQD,MAAOA,EAAMC,SAAsB,aAriBtD,OAAOJ,GAAE,CAAC,MAAAC,GAAW,OAAON,EAAAM,EAAM,GAwf9B,IACE,IAAKrD,GAAiByD,UAAW,CAC/B,MAAM,IAAIC,MAAM,uBAClB,CACMV,EAAqBhD,GAAiBgD,mBACtCzN,EAASoO,EAAO,CAAA,EAAI3D,GAAiBzK,QAC3C,GAAIyN,EAAoB,CAChBC,EAAUD,EAAmBvI,MAAK,SAAC3D,GACvC,OAAOmL,GAAa1M,EAAOuB,GAC7B,IACA,GAAImM,EAAS,MACN5N,GAAQU,oBAAoB,CAC/BC,OAAQ,2BAEVwM,QAAQC,KAAI,oBAAqBO,EAAmBY,KAAK,KAAI,QAC7D,OAAAd,GACF,CACF,CAzgBN,IAAIe,aAAJ,IAAA,OAAOT,GAAE,CAAC,MAAAC,GAAW,OAAOC,EAAAD,EAAM,GAAlC,IAAIS,EAAA,SA0hBWP,GA1hBf,IA2hBQQ,OAAOlD,IAAiB,MACxBD,GAAW,YACNvL,GAAQU,oBAAoB,CAC/BC,OAAQ,gBACRE,aAAcqN,EAAMC,UA/hB9B,OAAOK,GAAE,CAAC,MAAAR,GAAW,OAAOC,EAAAD,EAAM,GA0gB5B,IACEzC,GAAW,MACX,OAAAiC,QAAAmB,QAAM3O,GAAQU,oBAAoB,CAChCC,OAAQ,sBADViO,MAEE,SAAAC,GA9gBV,IA+gBQH,OAAOlD,IAAiB,KACN,OAAAgC,QAAAmB,QAAMhE,GAAiByD,WAAS,UAAA,EAA1BzD,GAAiByD,UAAYlO,IAAnC0O,eAA0CE,GAhhBpE,IAghBcjB,EAAYiB,EAClBjG,GAAAA,MAAAA,EAA0BgF,GACpBC,EAAkBjB,GAAsBgB,GAC9C,GAAIC,EAAgBzM,SAAW,EAAG,CAChCyK,GAAiBS,QAAU,KAC7B,CACAwC,GAAqBjB,GACrBvC,GAAW,OAEXmD,OAAOlD,IAAiB,MAzhBhC,OAAOgD,GAAE,CAAC,MAAAR,GAAW,OAAOS,EAAAT,EAAM,CAAC,GAAAS,EAA1B,CAAC,MAAAT,GAAW,OAAOS,EAAAT,EAAM,CAAC,GAAAS,EA0hB5B,CAAC,MAAOP,GAAaO,EAAbP,EAOT,CACD,CAAC,MAAOA,GAAaD,EAAbC,EAIT,CAAC,OAGH9C,EAASkB,iBAAgB,WACvB,GAAI7B,GAAqB,OAEzB,GAAIG,GAAwBvJ,OAAQ,MAC7BgM,KACL,MACF,CACA,IAAM2B,EAAWxN,EAAiBI,GAAUC,WAC5C,GAAImN,EAASxO,gBAAkB,kBAAmB,CAChDoI,SAAAA,EAA2BoG,EAASrP,UACpC,MACF,CAEA,IAAK+O,OAAOlD,IAAgB,MACrB6B,IACP,KAAO,CACLzE,SAAAA,EAA2BoG,EAASrP,SACtC,CACD,GAAEiL,IAEHQ,EAASkB,iBAAgB,WACvB,GAAI7B,GAAqB,CACvBsE,GAAqBxG,GAAoB,GAC3C,CACF,GAAG,CAACA,IAEJ,IAAMwG,GAAuBzB,EAAMC,gBAAe,SAACtK,GACjD,IAAIA,GAAQ,UAAA,EAARA,EAAU5B,UAAW,GAAKlB,GAAMR,SAAS0B,SAAW,EAAG,MACpDrB,GAAQU,oBAAoB,CAAEC,OAAQ,oBAC3C,MACF,MACKX,GAAQC,YAAY,CACvBN,SAAUsD,GAAY,GACtB5C,aAAc0B,GAAWE,SACzB1B,UAAWwB,GAAWb,QAExB0H,GAAAA,MAAAA,EAA2B3F,EAC7B,IAEA,IAAM0J,GAAsB,SAAtBA,EAAuBN,EAAmC4C,GAC9D,IAAIC,EAAsB,GAC1B7C,EAAUxG,SAAQ,SAAC3E,GACjB,IAAK+N,GAAWlE,IAAgB,MAAhBA,GAAkBoE,SAASjO,GAAQ,OACnD,IAAMkO,EAAa9M,EAAgBpB,EAAOf,GAAMR,SAAUoC,IAC1DmN,EAAsBA,EAAoB/H,OAAOiI,EACnD,IACA,OAAOF,GAGT5B,EAAM+B,iBAAgB,WACpB,GAAIlD,GAAiB,CACnB,IAAM/F,EAAajG,GAAMP,eAAesC,QAAO,SAACC,GAC9C,IAAMmN,EAAcnN,EAAKJ,GAAW4J,QAAU,GAC9C,GAAI3B,GAAkB,CACpB,OAAOA,GAAiB7H,EAAMgK,GAChC,CACA,OAAOoD,OAAOD,GAAYE,cAAcL,SAAShD,GAAgBqD,cACnE,IACA,IAAMC,EAAsB9C,GAC1BvG,EAAW/D,KAAI,SAACF,GAAI,OAAKA,EAAKJ,GAAWb,UACzC,MAEF8J,GAAoB3D,MAAMC,KAAK,IAAIC,IAAIkI,IACzC,KAAO,CACLzE,GAAoB,GACtB,CACF,GAAG,CAACmB,KACJuD,EAAoBvH,GAAK,WACvB,MAAO,CACLwH,oBAAqB,SAArBA,SACO3P,GAAQS,eACd,EACDkB,gBAAiB,SAAjBA,IACE,OAAOxB,GAAMR,QACd,EACDiQ,kBAAmB,SAAnBA,IAAiB,OAAQzP,GAAMP,cAAc,EAC7CiQ,qBAAsB,SAAtBA,IAAoB,OAAQ1P,GAAMN,iBAAiB,EACnDiQ,qBAAsB,SAAtBA,EAAuB7M,GACrB+H,GAAoB/H,EACrB,EACD8M,YAAa,SAAbA,IACE,IAAM3J,EAAajG,GAAMP,eAAeyC,KAAI,SAACgE,GAAI,OAAKA,EAAKtE,GAAWb,UACtE8J,GAAoB5E,GACpBoC,GAAAA,MAAAA,EAAWpC,EAAYtF,UAAWX,GAAMR,SAAUmB,UACnD,EACDkP,kBAAmB,SAAnBA,IACEhF,GAAoB,IACpBxC,GAAAA,MAAAA,EAAW1H,UACZ,EACDmP,cAAe,SAAfA,IACE,IAAM7J,EAAajG,GAAMP,eAAeyC,KAAI,SAACgE,GAAI,OAAKA,EAAKtE,GAAWb,UACtE8J,GAAoB5E,EACrB,EACD8J,oBAAqB,SAArBA,IACElF,GAAoB,GACtB,EAEJ,IAEA,IAAMmF,GAAW7C,EAAMC,gBAAe,SAAC6C,GACrCpF,GAAoBoF,EACtB,IAEA,IAAMC,GAAgB,SAAhBA,EACJC,EACAC,EACAC,EACAC,GAEAzE,GAAkBO,QAAUmE,EAAQJ,GACpC,GAAII,EAAQJ,GAAajP,SAAW,EAAG,CACrC,IAAMsP,EAAYF,GAAAA,UAAAA,EAAAA,EAAarN,KAAKrB,GAAWb,OAC/C,IAAMD,EAASd,GAAMN,kBAAkB8Q,GACvCnM,EAAMgE,UAAQ,MAAdhE,EAAMgE,SAAW1H,UAAWG,EAAQ,CAACA,GAASwP,EAChD,KAAO,CACLjM,EAAMgE,UAANhE,MAAAA,EAAMgE,SAAW8H,EAAaC,EAAiBC,EAAwBC,EACzE,GAGF,IAAMG,GAAqBtD,EAAMC,gBAAe,SAACsD,EAAaJ,GAE5D,IAAIK,EAAgD,GAEpD,IAAIC,EAAmD,GAEvD,GAAIpI,EAAW,CACbmI,EAAwBtM,EAAMwM,cAAgBH,EAAYI,QAAUJ,CACtE,KAAO,CACLC,EAAwBD,EACxB,GAAIzG,KAAasG,EAAQG,GAAaxP,OAAQ,CAC5C,MACF,CACA,GAAI8I,GAAmB,CACrB,IAAMlJ,EAASd,GAAMN,kBAAkBgR,EAAY,IACnD,IAAMK,EAAIjQ,EAASkJ,GAAkBlJ,GAAU,MAC/C,GAAIiQ,EAAG,CACL,MACF,CACF,CACF,CACAJ,EAAwBJ,EAAQI,GAEhC,IAAKnI,EAAW,CACdoI,EAA2BD,CAC7B,KAAO,CACL,GAAI9H,IAAcmD,KAAoBV,GAAqB,CAEzD,IAAM0F,EAAcV,GAAAA,UAAAA,EAAAA,EAAarN,KACjC,GAAIoB,EAAMwM,cAAe,CACvB,GAAIP,EAAYQ,SAAW,MAAO,CAChCH,EAAwBzE,GAAUnK,QAAO,SAACC,GAAI,OAAKA,GAAQgP,EAAYpP,GAAWb,SACpF,KAAO,CACL4P,EAAwBzJ,MAAMC,KAAK,IAAIC,IAAGJ,GAAAA,OAAKkF,GAAcyE,IAC/D,CACAC,EAA2BD,CAC7B,KAAO,CAEL,IAAMM,EACJnH,KAAkB,KAAOA,KAAkB,IACvChD,GACEoF,GACAlM,GAAMN,kBACNkC,GAAWE,SACXF,GAAWb,OAEbmL,GACN,GAAIoE,EAAYQ,SAAW,MAAO,CAChCH,EAAwBxK,GAAkC,GAAAa,OACpDiK,GACJD,EACApP,GAAWE,SACXF,GAAWb,MAEf,KAAO,CACL4P,EAAwBzJ,MAAMC,KAAK,IAAIC,IAAGJ,GAAAA,OAAKiK,EAAwBN,IACzE,CACAC,EAA2BzL,GACzBwL,EACA3Q,GAAMN,kBACNkC,GAAWE,SACXF,GAAWb,MAEf,CACF,KAAO,CAEL6P,EAA2BD,CAC7B,CAEA,IAAKtM,EAAMwM,cAAe,CACxB,GAAI/G,KAAkB,IAAK,CACzB6G,EAAwB9J,GACtB+J,EACA5Q,GAAMN,kBACNkC,GAAWE,SAEf,MAAO,GAAIgI,KAAkB,IAAK,CAChC6G,EAAwBpK,GACtBqK,EACA5Q,GAAMN,kBACNkC,GAAWE,SACXF,GAAWb,MAEf,MAAO,GAAIwH,GAA+B,MAAO,CAC/CoI,EAAwB9J,GACtB+J,EACA5Q,GAAMN,kBACNkC,GAAWE,SAEf,KAAO,CACL6O,EAAwBC,CAC1B,CACF,CACF,CAEA,IAAMM,EAA0BN,EAAyB1O,KAAI,SAACF,GAC5D,OAAOhC,GAAMN,kBAAkBsC,EACjC,IACA,GAAIgH,GAAc,CAChB,IAAMmI,EAAUrF,GAA4B/K,MAC5C,IAAMqQ,EAAUtF,GAA4BN,MAC5C,IAAM6F,EAAmBV,EAAsBzO,KAAI,SAACF,GAAS,IAAAsP,EAC3D,OAAAA,EAAA,GAAAA,EACGF,GAAUpR,GAAMN,kBAAkBsC,GAAMJ,GAAW4J,OAAM8F,EACzDH,GAAUnR,GAAMN,kBAAkBsC,GAAMJ,GAAWb,OAAMuQ,CAE9D,IACA,GAAI9I,EAAW,CACb0H,GACEmB,EACAV,EAAsBzO,KAAI,SAACF,GACzB,OAAOhC,GAAMN,kBAAkBsC,EACjC,IACAkP,EACAZ,EAEJ,KAAO,CACLJ,GACEmB,EAAiB,GACjBrR,GAAMN,kBAAkBiR,EAAsB,IAC9CO,EACAZ,EAEJ,CACF,KAAO,CACL,GAAI9H,EAAW,CACb0H,GACES,EACAA,EAAsBzO,KAAI,SAACF,GACzB,OAAOhC,GAAMN,kBAAkBsC,EACjC,IACAkP,EACAZ,EAEJ,KAAO,CACLJ,GACES,EAAsB,GACtB3Q,GAAMN,kBAAkBiR,EAAsB,IAC9CO,EACAZ,EAEJ,CACF,CACF,IAEA,IAAMiB,GAA4BpE,EAAMC,gBAAe,SAACoE,GACtD,OAAO7I,GAAmB,UAAA,EAAnBA,EAAsB6I,EAC/B,IAEA,IAAMC,GAAmBlG,GAAQ,WAC/B,IAAMuB,EAAOhJ,EAAW9D,GAAMR,UAAY,IAC1C,GAAIwM,IAAmB3C,KAAqB,YAAa,CACvD,IAAMqI,EAAaC,EACjB7N,EAAW9D,GAAMR,UAAY,KAC7B,SAACyD,GAAS,IAAA2O,EACR,GAAI/H,GAAkB,CACpB,OAAOA,GAAiB5G,EAAM+I,GAChC,CACA,IAAMjL,GAAK6Q,EAAG3O,EAAKrB,GAAW4J,SAAhBoG,UAAAA,EAAAA,EAAwBvC,cACtC,OAAOtO,EAAM8Q,QAAQ7F,GAAgBqD,gBAAkB,CACzD,GACA,CAAEnP,aAAc0B,GAAWE,WAE7B,OAAO4P,CACT,CACA,OAAO5E,CACR,GAAE,CACDjD,GACAjI,GAAWE,SACXF,GAAW4J,MACXnC,GACArJ,GAAMR,SACNwM,KAGF,IAAM8F,GAAWvG,GAAQ,WACvB,IAAM5H,EAAO,SAAPA,EAAQnB,GAAY,OACxBA,eAAAA,EAAMN,KAAI,SAACF,GAAS,IAAA+P,EAClB,IAAMC,GAAcT,IAAyB,UAAA,EAAzBA,GAA4BvP,KAASA,EACzD,IAAMiQ,EAAWhJ,GAAiBtI,UAAYqR,EAAYC,SAC1D,IAAMC,EAAYF,EAAYpQ,GAAW4J,QAAU,GACnD,IAAI2G,EACJ,GAAInG,IAAmBoG,EAASF,GAAW,CACzC,IAAMG,EAAcH,GAAQ,UAAA,EAARA,EAAU7C,cAC9B,IAAMrL,EAAQqO,EAAYR,QAAQ7F,GAAgBqD,eAClD,IAAMiD,EAAYJ,EAASK,UAAU,EAAGvO,GACxC,IAAMwO,EAAWN,EAASzK,MAAMzD,EAAQgI,GAAgB9K,QACxD,IAAMuR,EAAYP,EAASzK,MAAMzD,EAAOA,EAAQgI,GAAgB9K,QAChEiR,EACEnO,GAAS,EACP0O,EAAA,OAAA,CACEhJ,UAAWiJ,EAAW,CACpB,uBAAwBX,EAAYC,WACnCnQ,SAAA,CAEFwQ,EACDM,EAAA,OAAA,CAAMlJ,UAAU,yBAAwB5H,SAAE2Q,IACzCD,KAED,IACR,CACA,IAAKL,GAAYH,EAAYC,SAAU,CACrCE,EACES,EAAA,OAAA,CACElJ,UAAWiJ,EAAW,CACpB,uBAAwBX,EAAYC,WACnCnQ,SAEFoQ,GAGP,CACA,IAAMpQ,EAAWkQ,EAAYpQ,GAAWE,UACxC,OAAA8E,EAAA,CAAA,EACKoL,GAAWD,EAAA,CACdE,SAAAA,GAAQF,EACPnQ,GAAW4J,OAAQ2G,GAAYD,EAAQH,EACxCc,cAAeX,EAAQH,EACvBe,UAAWd,EAAYC,SAAQF,EAC9BnQ,GAAWE,UAAWd,EAAQc,IAAaA,EAASZ,OAAS,EAAIyC,EAAK7B,GAAYnB,UAASoR,GAEhG,GAAE,EACJ,OAAOpO,EAAK8N,GACd,GAAG,CACDA,GACAF,GACAtI,GACArH,GAAW4J,MACX5J,GAAWE,SACXkK,KAEF,IAAM+G,GAAW5F,EAAMC,gBAAe,SAACoE,GAErC,OAAO,IAAInE,SAAc,SAAOmB,EAASwE,GAAhB,OAAA,IAAA3F,SAAA,SAAAC,EAAAC,GAAA,IAAA0F,EAAAC,EAAAC,EAMfxG,EAGAyG,EARR,GAAI5B,EAAS5P,GAAWE,UAAW,CACjC0M,IACA,OAAAlB,GACF,CA74BN,IAAI+F,aAAJ,IAAI,OAAA/F,GAAK,CAAC,MAAAO,GAAW,OAAON,EAAAM,EAAM,GAAlC,IAAIyF,EAAA,SAm6BWvF,GAn6Bf,SAo6BaC,EAAQD,MAAMA,EAAMC,SAAW,aAEpCgF,IAt6BR,OAAOK,GAAE,CAAC,MAAAxF,GAAW,OAAON,EAAAM,EAAM,GA84B5B,IACmB,OAAAR,QAAAmB,SAAAyE,EAAM5O,EAAMkP,8BAANN,EAA6BhF,WAA7BgF,UAAAA,EAAAA,EAA6BhF,YAClDiF,EAAA7O,EAAMkP,wBAANL,MAAAA,EAA6BM,WAAS,UAAA,EAAtCN,EAA6BM,UAAYhC,KAAa,CAAA,IADvC/C,eAEhBgF,GAj5BT,IA+4Bc9G,EAAW8G,EAGXL,GACJD,EAAA9O,EAAMkP,8BAANJ,EAA6BtG,uBACzBxI,EAAMkP,sBAAsB1G,uBAAuBF,GACnDA,OAGD9M,GACFe,uBAAuB,CACtBG,MAAOyQ,EAAS5P,GAAWb,OAC3BE,WAAYmS,EACZlT,aAAc0B,GAAWE,SACzB1B,UAAWwB,GAAWb,QAEvB0N,MAAK,SAACI,GACLD,GAAqBC,EAASrP,UAC9BgP,GACF,IAl6BV,OAAO6E,GAAE,CAAC,MAAAxF,GAAW,OAAOyF,EAAAzF,EAAM,CAAC,GAAAyF,EAm6B5B,CAAC,MAAOvF,GAAauF,EAAbvF,EAIT,CAAC,MAEL,IAEA,IAAM2F,GAAavG,EAAMC,gBAAe,SAACuG,GACvC,IAAM7R,EAAW6R,GAAQ,UAAA,EAARA,EAAW/R,GAAWE,UAEvC,IAAM8R,EAAevP,EAAMuP,aAC3B,IAAMC,EAAkBD,GAAgBD,EAASxS,OAAS,MAC1D,IAAM2S,EAAehS,GAAYA,EAASZ,OAAS,GAAM2S,EACzD,OAAQC,CACV,IAEA,IAAMC,GAAc5G,EAAMC,gBAAe,SAACuG,GAAa,IAAAK,EAAAC,EAAAC,EACrD,IAAMC,EAAcR,EAASd,eAAiBc,EAAS/R,GAAW4J,OAClE,IAAM4I,EAAsBxK,IAAK,UAAA,EAALA,GAAKhD,EAC5B+M,GAAAA,GAAQK,KAAAA,EACVpS,GAAW4J,OAAQ2I,EAAWH,KAEjC,GAAII,GAAAA,MAAAA,EAAqBC,YAAYnT,OAAQ,CAC3C,OACEwR,EAAC4B,EAAQ,CAAAxS,UACP8Q,EAAA,OAAA,CAAMlJ,UAAU,kBAAkB,aAAYiK,EAAS/R,GAAWb,OAAOe,UACtE0H,IAAAA,UAAAA,EAAAA,GAAcmK,MAAaA,eAAAA,EAAW/R,GAAW4J,UAEpDoH,EAAC2B,EAAa3N,EAAA,CACZ4N,IAAK,GACDJ,EAAmB,CACvBK,kBAAiB7N,EAAA,CACf8N,UAAW,cACXC,QAAS,MACNP,GAAmB,UAAA,EAAnBA,EAAqBK,mBAE1B/K,UAAWiJ,EAAW,0BAA2ByB,EAAoB1K,gBAI7E,CAEA,GAAI+B,KAAsB,OAAQ,CAAA,IAAAmJ,EAChC,IAAIC,EAAsB,GAC1B,IAAAD,EAAIvQ,EAAMwQ,cAAND,MAAAA,EAAmBE,KAAM,CAAA,IAAAC,EAAAC,EAAAC,EAC3BJ,IACEE,EAAA1Q,EAAMwQ,cAAW,OAAAG,EAAjBD,EAAoBtJ,MAApBuJ,UAAAA,EAAAA,EAAAE,KAAAH,EAAAnO,EACK+M,CAAAA,EAAAA,GAAQsB,EAAA,CAAA,EAAAA,EACVrT,GAAW4J,OAAQ2I,EAAWc,OAC3B,EACV,KAAO,CAAA,IAAAE,EACLN,GACExQ,EAAM+Q,gBAAc,UAAA,EAApB/Q,EAAM+Q,eAAcxO,EAAA,CAAA,EACf+M,GAAQwB,EAAA,CAAA,EAAAA,EACVvT,GAAW4J,OAAQ2I,EAAWgB,OAC3B,EACV,CACA,OACEzC,EAAC4B,EAAQ,CAAAxS,UACP8Q,EAAA,OAAA,CAAMlJ,UAAU,kBAAkB,aAAYiK,EAAS/R,GAAWb,OAAOe,UACtE0H,IAAAA,UAAAA,EAAAA,GAAcmK,MAAaA,eAAAA,EAAW/R,GAAW4J,UAEnDqJ,EAAY3T,OAAS,GACpB0R,EAACyC,EAAmB,CAACC,SAAUT,EAAaH,UAAU,cAAa5S,SACjE8Q,EAAA2C,EAAe,QAKzB,CACA,IAAMV,GAAWZ,EAAG5P,EAAMwQ,cAANZ,MAAAA,EAAmBuB,MAAnBvB,UAAAA,EAAAA,EAAmBuB,KAAI5O,EAAA,CAAA,EACtC+M,GAAQO,EAAA,CAAA,EAAAA,EACVtS,GAAW4J,OAAQ2I,EAAWD,KAGjC,OACExB,EAAC4B,EAAQ,CAAAxS,UACP8Q,EAAA,OAAA,CAAMlJ,UAAU,kBAAkB,aAAYiK,EAAS/R,GAAWb,OAAOe,UACtE0H,IAAAA,UAAAA,EAAAA,GAAcmK,MAAaA,eAAAA,EAAW/R,GAAW4J,UAEnDqJ,EACCjC,EAAC2B,EAAa3N,EAAA,CACZ4N,IAAK,GACDK,EAAW,CACfnL,UAAWiJ,EAAW,0BAA2BkC,EAAYnL,cAE7D,OAGV,IAEA,IAAM+L,GAAmBtI,EAAMuI,qBAAoB,SAAC3U,GAClDkL,GAAmBlL,GACnBsD,EAAMsR,qBAANtR,MAAAA,EAAMsR,oBAAsB5U,EAC7B,GAAE,KAEH,IAAM6U,GAAiBzI,EAAMC,gBAAe,SAACyI,GAC3CJ,GAAiBI,EAAE/U,OAAOC,MAC5B,IAEA,IAAM+U,GAAa3I,EAAMC,gBAAe,SAAC0E,GACvC,IAAKzN,EAAM0R,KAAM,OAAO,KACxB,GAAIC,EAAe3R,EAAM0R,MAAO,OAAO1R,EAAM0R,KAC7C,IAAME,EAAavC,GAAW5B,EAAStP,MACvC,OAAO6B,EAAM0R,KAAInP,KACZkL,EAAQ,CACXoE,UAAWD,EACX9U,OAAQ8U,IAEZ,IAEA,IAAME,GAAiB5K,GAAQ,WAC7B,MAAO,CACL6K,MAAOxU,GAAW4J,MAClBlK,IAAKM,GAAWb,MAChBe,SAAUF,GAAWE,SAEzB,GAAG,CAACF,KACJ,IAAMyU,GAAWvE,GAAS5Q,OAAS,GAAKlB,GAAMK,gBAAkB,gBAChE,IAAMiW,GAAW1P,EAAA,CACf2P,SAAU,CAAEC,aAAc,OAC1BzC,YAAAA,GACA0C,UAAW,KACXC,aAAc9D,EAAA+D,MACdC,OAAQ,SAARA,EAAS7T,GACP,GAAIwG,GAAY,CACd,IAAMsN,EAAMtN,GAAWxG,GACvB,IAAK8T,EAAK,MACZ,CACA,IAAAC,EAAmCjU,EAAW4O,GAAkB7P,GAAYmB,GAApED,EAAQgU,EAARhU,SAAU2B,EAAYqS,EAAZrS,aAClB6E,IAAAA,MAAAA,GAAmB7E,GACnBmK,GAAqB9L,EACtB,EACDmN,aAAcrF,IACXT,GAAU,CACbvI,WAAYuU,GACZrE,SAAAA,GACA9B,SAAAA,GACA+C,SAAU1O,EAAMuP,aAAeb,GAAWpS,UAC1CsH,MAAO,CAAE8O,MAAO,QAChBhB,KAAMD,GACNkB,QAAS,SAATA,EAAUnB,GACR,GAAI9L,GAA6B,CAC/B,IAAIkN,EAAYpB,EAAE/U,OAClB,IAAIC,EAAQkW,EAAUC,QAAQnW,MAC9B,GAAI4B,EAAkB5B,GAAQ,CAC5BkW,EAAYE,EAAIC,mBAAmBvB,EAAE/U,QAAQ,SAACmC,GAAkB,IAAAoU,EAAAC,EAC9D,QACED,EAAApU,EAAKsU,YAALF,UAAAA,EAAAA,EAAgBG,SAAS,uBAAkBF,EAAIrU,EAAKsU,YAALD,UAAAA,EAAAA,EAAgBE,SAAS,qBAE5E,IACAzW,EAAQkW,EAAUC,QAAQnW,KAC5B,CACA,IAAK4B,EAAkB5B,GAAQ,CAC7B,IAAMD,EAASd,GAAMN,kBAAkBqB,GACvC,GAAID,GAAAA,MAAAA,EAASc,GAAWE,WAAahB,EAAOc,GAAWE,UAAUZ,OAAS,EAAG,CAC3E,IAAMuW,EAAqB7M,GAAiBoE,SAASjO,GACrD,GAAI0W,EAAoB,CACtB,IAAMC,EAAUC,EAAMC,YAAYhN,GAAkB7J,GACpD8J,GAAmB7D,GAAAA,OAAK0Q,GAC1B,KAAO,CACL7M,MAAmB7D,OAAK4D,GAAkB7J,CAAAA,IAC5C,CACF,CACF,CACF,CACF,IAGF,IAAM8W,GAAe,CACnBC,QAASrH,GACTjI,UAAAA,EACAuP,YAAa7L,IAGf,IAAM8L,GAAgB,CACpBC,SAAUxH,GACVyH,SAAU,MACVC,aAAcjM,IAEhB,IAAMkM,GAAa5P,EAAYqP,GAAeG,GAC9C,IAAMK,GAAQ1F,EAAW,iBAAyCjH,uBAAAA,GAAsBhC,IACxF,IAAM4O,GAAgBtY,GAAMR,SAAS0B,OAAS,IAAMmV,IAAYrK,GAChE,OACE0G,EAAA,MAAA,CAAKhJ,UAAW2O,GAAOpQ,MAAOA,EAAMnG,SACjC,GAAE+G,IACD6J,EAAA,MAAA,CAAKhJ,UAAU,6BAA6BzB,MAAOwB,GAAY3H,SAAA,CAC7D8Q,EAAC2F,EAAkB,CACjB7O,UAAU,wBACV8O,YAAa7V,EAAkBmG,IAAqB,KAAOA,GAC3DT,SAAUuN,GACV7U,MAAOiL,GACPyM,WAAU,SAETpU,EAAMqU,oBACP9F,EAAA,OAAA,CAAMlJ,UAAU,8BAA6B5H,SAAEuC,EAAMqU,wBAK1DrC,GACC3D,EAAA,MAAA,CAAKhJ,UAAU,8BAA6B5H,SAAA,CAC1C8Q,EAAC+F,EAAI,CAACC,SAAU5Y,GAAMK,gBAAkB,qBACxCuS,EAACiG,EAAIjS,EAAA,CAAA,EAAKwR,GAAgB9B,GAAW,CAAE5M,UAAU,4BAGnDkJ,EAACkG,EAAa,CACZtY,OAAQR,GAAMK,cACd8K,QAASA,GACT4N,cAAanS,EAAA,CACX,kBAAmB0R,GAAgB,SAAW,OAC9C,gBAAiBtY,GAAMS,qBACpBsI,IAELiQ,YACEpG,EAACqG,EAAM,CAACC,KAAK,UAAUlC,QAAS9J,GAAuBpL,SAAC,eAQpE,QC5mCagG,GAETqR,EAA4BC,GAAkB,CAOhD5X,gBAAiBA"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/tree-wrapper/model.ts","@flatbiz/antd/src/tree-wrapper/hooks.ts","@flatbiz/antd/src/tree-wrapper/utils.ts","@flatbiz/antd/src/tree-wrapper/tree-wrapper.tsx","@flatbiz/antd/src/tree-wrapper/index.ts"],"sourcesContent":["import { isArray } from '@dimjs/lang';\nimport { type API, type ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport type { TAny } from '@flatbiz/utils';\nimport { arrayToMap, treeToArray, type TPlainObject, type TSetDefaultDefined } from '@flatbiz/utils';\nimport { type TreeProps } from 'antd';\nimport { TRequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeList: TSetDefaultDefined<TreeProps['treeData'], []>;\n treeTiledArray: TPlainObject[];\n treeTiledArrayMap: TPlainObject;\n queryIsEmpty: boolean;\n requestStatus?: TRequestStatus;\n requestErrorMessage?: string;\n};\n\ntype ModelActionParams = {\n setTreeList: {\n treeList: ModelState['treeList'];\n childrenName: string;\n valueName: string;\n };\n resetTreeList: void;\n changeRequestStatus: {\n status: TRequestStatus;\n errorMessage?: string;\n };\n treeListAppendChildren: {\n value: string | number;\n appendList: TPlainObject[];\n childrenName: string;\n valueName: string;\n };\n};\n\nconst defaultState: ModelState = {\n treeList: [],\n treeTiledArray: [],\n treeTiledArrayMap: {},\n queryIsEmpty: false,\n};\n\nconst TreeWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setTreeList: (params) => {\n return (state) => {\n state.treeList = params.treeList || [];\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n state.treeTiledArrayMap = arrayToMap(state.treeTiledArray, params.valueName);\n state.requestStatus = 'request-success';\n };\n },\n resetTreeList: () => {\n return (state) => {\n state.treeList = [];\n state.treeTiledArray = [];\n state.treeTiledArrayMap = {};\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params.status;\n if (params.status === 'request-error') {\n state.treeList = [];\n state.treeTiledArray = [];\n state.treeTiledArrayMap = {};\n state.requestErrorMessage = params.errorMessage || '数据查询异常';\n } else {\n state.requestErrorMessage = undefined;\n }\n };\n },\n treeListAppendChildren: (params) => {\n return (state) => {\n const tiledArray = treeToArray(state.treeList, params.childrenName);\n const treeTiledArrayMap = arrayToMap(tiledArray, params.valueName);\n const target = treeTiledArrayMap[params.value];\n if (target) {\n if (isArray(params.appendList) && params.appendList.length > 0) {\n target[params.childrenName] = params.appendList;\n } else {\n target.isLeaf = true;\n }\n }\n state.treeTiledArray = tiledArray;\n state.treeTiledArrayMap = treeTiledArrayMap;\n };\n },\n },\n state: defaultState,\n};\n\nconst treeWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, TAny>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeWrapperModel('key值').useStore();\n * ```\n */\nexport const treeWrapperModel = (key: string) => {\n if (!treeWrapperModels[key]) {\n treeWrapperModels[key] = Model(TreeWrapperModel);\n }\n return treeWrapperModels[key];\n};\n","import { type TPlainObject } from '@flatbiz/utils';\nimport { treeWrapperModel } from './model';\n\nexport const getTreeDataList = (modelKey: string) => {\n const state = treeWrapperModel(modelKey).getState();\n return state.treeList as TPlainObject[];\n};\n","import { isArray, isObject } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { tree } from '@dimjs/utils';\nimport {\n isNotEmptyArray,\n isUndefinedOrNull,\n treeLeafParentsArray,\n treeToArray,\n treeToTiledArray,\n treeToTiledMap,\n type LabelValueItem,\n type TAny,\n type TPlainObject,\n} from '@flatbiz/utils';\nimport { type DataNode } from 'antd/es/tree';\nimport { dequal } from 'dequal';\n\nexport const getDefaultExpandAllKeys = (\n treeList: TPlainObject[],\n fieldNames: { label: string; value: string; children: string },\n) => {\n const allValues = treeToArray(treeList, fieldNames.children)\n .filter((item) => {\n const childrenValue = item[fieldNames.children] as TAny[] | undefined;\n return childrenValue && childrenValue.length > 0;\n })\n .map((item) => {\n return item[fieldNames.value];\n });\n return allValues as Array<string | number>;\n};\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames: { label: string; value: string; children: string },\n) => {\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, {\n value: 'value',\n parentValue: 'parentValue',\n })\n .filter((item) => {\n const childrenValue = item[fieldNames.children] as TAny[] | undefined;\n return childrenValue && childrenValue.length > 0;\n })\n .map((item) => item.value);\n};\n\nexport const getVauleList = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n let tempList = isUndefinedOrNull(data) ? [] : data;\n tempList = isArray(tempList) ? tempList : [tempList];\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[labelInValueFieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n const list = getVauleList(data, labelInValueFieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括\n * string、number、\n * Array<string | number>、{ label: string, value: string | nuber }、\n * Array<{ label: string, value: string | nuber }>\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeWrapperValueDeepEqual = (\n value1: TAny,\n value2: TAny,\n labelInValueFieldNames: LabelValueItem<string | number>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, labelInValueFieldNames);\n const object2 = array2map(value2, labelInValueFieldNames);\n return dequal(object1, object2);\n};\n\ntype OnTreeDropMethod = (\n dataList: TPlainObject[],\n fieldNames: { value: string; children: string },\n info: TAny,\n) => {\n dataList: TPlainObject[];\n dragNodeData: {\n parentId?: string | number;\n id: string | number;\n index: number;\n };\n};\n\nexport const onTreeDrop: OnTreeDropMethod = (dataList, fieldNames, info) => {\n const dropKey = info.node.key;\n const dragKey = info.dragNode.key;\n const dropPos = info.node.pos.split('-');\n const dropPosition = info.dropPosition - Number(dropPos[dropPos.length - 1]);\n const treeKeyName = fieldNames.value;\n const treeChildrenName = fieldNames.children;\n\n const loop = (\n data: DataNode[],\n key: React.Key,\n callback: (node: DataNode, i: number, data: DataNode[]) => void,\n ) => {\n for (let i = 0; i < data.length; i++) {\n if (data[i][treeKeyName] === key) {\n return callback(data[i], i, data);\n }\n if (data[i][treeChildrenName]) {\n loop(data[i][treeChildrenName]!, key, callback);\n }\n }\n };\n const data = cloneState(dataList) as DataNode[];\n\n // Find dragObject\n let dragObj: DataNode;\n loop(data, dragKey, (item, index, arr) => {\n arr.splice(index, 1);\n dragObj = item;\n });\n\n if (!info.dropToGap) {\n // Drop on the content\n loop(data, dropKey, (item) => {\n item[treeChildrenName] = item[treeChildrenName] || [];\n // where to insert 示例添加到头部,可以是随意位置\n item[treeChildrenName].unshift(dragObj);\n });\n } else if (\n (info.node.props.children || []).length > 0 && // Has children\n info.node.props.expanded && // Is expanded\n dropPosition === 1 // On the bottom gap\n ) {\n loop(data, dropKey, (item) => {\n item[treeChildrenName] = item[treeChildrenName] || [];\n // where to insert 示例添加到头部,可以是随意位置\n item[treeChildrenName].unshift(dragObj);\n // in previous version, we use item.children.push(dragObj) to insert the\n // item to the tail of the children\n });\n } else {\n let ar: DataNode[] = [];\n let i: number;\n loop(data, dropKey, (_item, index, arr) => {\n ar = arr;\n i = index;\n });\n if (dropPosition === -1) {\n ar.splice(i!, 0, dragObj!);\n } else {\n ar.splice(i! + 1, 0, dragObj!);\n }\n }\n return {\n dataList: data,\n dragNodeData: dragNodeData(dragKey, data, fieldNames),\n };\n};\n\nexport const dragNodeData = (\n dorpNodeId: TAny,\n dataList: TAny[],\n fieldNames: { value: string; children: string },\n) => {\n const id = fieldNames.value;\n const children = fieldNames.children;\n tree.walkThroughTree<TPlainObject, TAny>(\n { [id]: undefined, [children]: dataList } as TAny,\n (node, index, _parent) => {\n node['__index'] = index;\n node['__parentId'] = _parent?.[id];\n },\n children,\n );\n const tileList = treeToArray(dataList, children);\n const target = tileList.find((item) => item[id] === dorpNodeId);\n return {\n parentId: target?.['__parentId'],\n id: target?.[id],\n index: target?.['__index'],\n };\n};\n\n/**\n * 由于树节点过滤后,选中了父节点不一定是全部子节点,此处进行筛查\n */\nexport const getActualSelectKeyList = (\n checkedValueList: Array<string | number>,\n treeTiledArrayMap: TPlainObject,\n chidlrenKey: string,\n valueKey: string,\n) => {\n const leafValueDataMap: TPlainObject = {};\n const hasChildrenList: Array<string | number> = [];\n const retainHasChildrenValueList: Array<string | number> = [];\n checkedValueList.forEach((item) => {\n if (isNotEmptyArray(treeTiledArrayMap[item]?.[chidlrenKey])) {\n hasChildrenList.push(item);\n } else {\n leafValueDataMap[item] = item;\n }\n });\n if (hasChildrenList.length > 0) {\n hasChildrenList.forEach((item) => {\n const childrenTiledList = treeToArray(treeTiledArrayMap[item][chidlrenKey], chidlrenKey);\n if (Object.keys(leafValueDataMap).length > childrenTiledList.length) {\n const targetList = childrenTiledList.filter((item) => {\n return checkedValueList.find((temp) => temp === item[valueKey]);\n });\n if (targetList.length === childrenTiledList.length) {\n retainHasChildrenValueList.push(item);\n }\n }\n });\n }\n\n return checkedValueList.filter((item) => {\n return retainHasChildrenValueList.find((temp) => temp == item) || leafValueDataMap[item];\n });\n};\n\n/** 移除指定节点以及所有子节点 */\nexport const removeTargetNodeAndAllChildrenNode = (\n checkedValueList: Array<string | number>,\n awitDeleteNode: TPlainObject,\n chidlrenKey: string,\n valueKey: string,\n) => {\n const awitDeleteTieldDataMap: TPlainObject = treeToTiledMap([awitDeleteNode], {\n value: valueKey,\n children: chidlrenKey,\n });\n return checkedValueList.filter((item) => {\n return !awitDeleteTieldDataMap[item];\n });\n};\n\n/** 移除父节点全选下的叶子节点 */\nexport const removeAllSelectLeafNode = (\n checkedValueList: Array<string | number>,\n treeTiledArrayMap: TPlainObject,\n chidlrenKey: string,\n valueKey: string,\n) => {\n let awitDeleteCheckedValueMap: TPlainObject = {};\n checkedValueList.forEach((item) => {\n const childrenList = treeTiledArrayMap[item]?.[chidlrenKey];\n if (isNotEmptyArray(childrenList)) {\n // hasChildrenList.push(item);\n const targetMap = treeToTiledMap(childrenList, {\n value: valueKey,\n children: chidlrenKey,\n });\n awitDeleteCheckedValueMap = {\n ...awitDeleteCheckedValueMap,\n ...targetMap,\n };\n }\n });\n return checkedValueList.filter((item) => !awitDeleteCheckedValueMap[item]);\n};\n\n/** 移除所有的父节点 */\nexport const removeAllParentNode = (\n checkedValueList: Array<string | number>,\n treeTiledArrayMap: TPlainObject,\n chidlrenKey: string,\n) => {\n return checkedValueList.filter((item) => {\n return !isNotEmptyArray(treeTiledArrayMap[item][chidlrenKey]);\n });\n};\n\n/** values中的数据可能存在缺少父节点下的子节点情况,此处补齐 */\nexport const completionParentChildrenNode = (\n values: Array<string | number>,\n treeTiledArrayMap: TPlainObject,\n chidlrenKey: string,\n valueKey: string,\n) => {\n let allValues = [...values];\n values.forEach((item) => {\n const childrenList = treeTiledArrayMap[item]?.[chidlrenKey];\n if (isNotEmptyArray(childrenList)) {\n const targetList = treeToArray(childrenList, chidlrenKey);\n allValues = allValues.concat(targetList.map((temp) => temp[valueKey]));\n }\n });\n return Array.from(new Set(allValues));\n};\n","import { CaretDownFilled, MoreOutlined } from '@ant-design/icons';\nimport { isArray, isString } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { array, classNames, extend, get } from '@dimjs/utils';\nimport { Button, message, Spin, Tree, type TreeProps } from 'antd';\nimport {\n forwardRef,\n Fragment,\n isValidElement,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type DependencyList,\n type ReactElement,\n} from 'react';\n\nimport {\n dom,\n getUuid,\n isUndefinedOrNull,\n toArray,\n treeFilter,\n type TAny,\n type TPlainObject,\n} from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { treeWrapperModel } from './model';\n\nimport { ButtonOperate, ButtonOperateItem, ButtonOperateProps } from '../button-operate';\nimport { DropdownMenuItem, DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { fbaHooks } from '../fba-hooks';\nimport { InputSearchWrapper } from '../input-search-wrapper';\nimport { RequestStatus, TRequestStatusProps } from '../request-status';\nimport './style.less';\nimport {\n completionParentChildrenNode,\n getActualSelectKeyList,\n getDefaultExpandAllKeys,\n getExpandedKeys,\n getVauleList,\n onTreeDrop,\n removeAllParentNode,\n removeAllSelectLeafNode,\n removeTargetNodeAndAllChildrenNode,\n} from './utils';\n\ntype TreeWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\nexport type TreeServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\nexport type TreeLoadDataServiceConfig = {\n getParams?: (dataItem: TPlainObject) => TPlainObject;\n onRequest: (params: TPlainObject) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type TreeWrapperMenuItem = {\n title: string;\n onClick: (dataItem: TPlainObject, event) => void;\n icon?: ReactElement;\n};\n\nexport type TreeWrapperProps = Omit<\n TreeProps,\n | 'treeData'\n | 'onExpand'\n | 'selectedKeys'\n | 'checkedKeys'\n | 'onCheck'\n | 'onSelect'\n | 'fieldNames'\n | 'multiple'\n | 'loadData'\n | 'icon'\n | 'defaultCheckedKeys'\n | 'defaultExpandParent'\n | 'defaultSelectedKeys'\n> & {\n /**\n * 设置请求唯一值\n * ```\n * 1. 设置后,如果请求入参不变,不会重复请求接口,直接使用上次缓存数据\n * ```\n */\n modelKey?: string;\n /**\n * 字段映射\n * ```\n * 默认值:\n * label = 'label'\n * value = 'value'\n * children = 'children'\n *\n * 如果未设置list,则说明接口返回数据为数组\n * 如果返回数据存在多级,可通过设置 list='a.b.list'\n * ```\n */\n fieldNames?: {\n label?: string;\n value?: string;\n children?: string;\n list?: string;\n };\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`selectorTreeList`后无效果\n */\n serviceConfig?: TreeServiceConfig;\n /**\n * 是否开启异步加载\n */\n loadDataFlag?: boolean;\n /**\n * 异步加载数据配置\n * ```\n * 1. 会通过fieldNames配置label、value、children进行转义\n * 2. fieldNames.list 配置在此处无效\n * ```\n */\n loadDataServiceConfig?: TreeLoadDataServiceConfig;\n /**\n * 当设置selectorTreeList后,serviceConfig将失效\n * ```\n * 1. 不支持异步数据,异步使用serviceConfig方式\n * ```\n */\n selectorTreeList?: TPlainObject[];\n /**\n * 通过服务获取数据后回调,当设置`selectorList`后无效果\n * ```\n * 相同modelKey,同时发起多个渲染时,只有第一个会执行 onSelectorTreeListChange 回调\n * ```\n */\n onSelectorTreeListChange?: (dataList: TPlainObject[]) => void;\n /** 接口响应数据变更 */\n onRequestResponseChange?: (data: TAny) => void;\n onChange?: (\n selectedKey?: TreeWrapperValue,\n operateNodeData?: TPlainObject[] | TPlainObject,\n operateAllNodeDataList?: TPlainObject[],\n extraData?: TPlainObject,\n ) => void;\n\n /**\n * 搜索关键字,打开tree折叠过滤关键字\n */\n searchValue?: string;\n /**\n * checkable模式下,onChange是否返回父节点,默认值true\n * @description 已过期,请使用 checkableType 配置\n * ```\n * 注意:checkStrictly = true,checkableResponseParentNode配置失效\n * ```\n */\n checkableResponseParentNode?: boolean;\n /**\n * 节点选择类型(默认值:'2'), 多选时有效\n * ```\n * '1' 表示返回所有选中的节点(包含父节点和叶子节点)\n * '2' 表示只返回叶子节点\n * '3' 表示当叶子节点全选时,返回父节点,不返回下面的叶子节点\n *\n * 注意:checkStrictly = true,checkableType配置失效\n * ```\n */\n checkableType?: '1' | '2' | '3';\n /**\n * 菜单结构类型 tile/平铺 fold/折叠;默认:fold\n * @deprecated 已过期 4.3.0版本移除,请使用 menus\n * ```\n * 自定义设置 titleRender 后失效\n * ```\n */\n menuLayoutType?: 'tile' | 'fold';\n /**\n * 获取菜单类别\n * @param dataItem\n * @deprecated 已过期 4.3.0版本移除,请使用 menus\n * @returns\n * ```\n * 1. menuLayoutType = tile 无效\n * 2. 自定义设置 titleRender 后失效\n * ```\n */\n getMenuOptions?: (dataItem: TPlainObject) => DropdownMenuItem[] | ButtonOperateItem[];\n /**\n * 根据 menuLayoutType 类型赋值\n * @deprecated 已过期 4.3.0版本移除,请使用 menuOptions\n */\n menuOptions?: {\n tile?: (dataItem: TPlainObject) => ButtonOperateProps;\n fold?: (dataItem: TPlainObject) => DropdownMenuItem[];\n };\n /**\n * 菜单触发类型,默认:click\n * ```\n * 自定义设置 titleRender 后失效\n * ```\n */\n menuTriggerType?: 'click' | 'hover';\n menus?: (dataItem) => ButtonOperateProps;\n\n showSearch?: boolean;\n onSearchValueChange?: (searchValue?: string) => void;\n searchPlaceholder?: string;\n searchStyle?: CSSProperties;\n icon?: (data: { isParent: boolean; isLeaf: boolean; [key: string]: TAny }) => ReactElement;\n /**\n * 状态文案配置\n */\n requestMessageConfig?: TRequestStatusProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: TreeWrapperValue;\n /**\n * 选择的节点数据,是否包含label信息\n * ```\n * 默认选择的节点只有value数据\n * ```\n */\n labelInValue?: boolean;\n /**\n * ```\n * @deprecated 废弃\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * 禁用状态是否可选,默认值true\n * 当dateItem中包含 disabled 则数据为禁用状态\n */\n disabledCanUse?: boolean;\n\n /** treeItem数据适配器 */\n treeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n /** 搜索位置额外元素 */\n searchExtraElement?: ReactElement;\n /** 有唯一跟节点时,初始化是否展开,默认值:false */\n initRootExpand?: boolean;\n /** 搜素过滤方式,高亮 | 过滤;默认:filter */\n searchResultType?: 'highlight' | 'filter';\n /**\n * 拖拽节点处理,自定义onDrop事件后,失效\n * ```\n * 参数\n * 1. parentId 拖拽结束位置父节点ID\n * 2. id 当前拖拽节点ID\n * 3. index 拖拽结束位置所在数组下标\n * ```\n */\n onDropNodeHandle?: (result: { parentId?: string | number; id: string | number; index: number }) => void;\n /**\n * 拖拽排序前判断,如果返回 true,可排序,其他不可排序\n * ```\n * 可用于需要权限控制判断\n * ```\n */\n onDropPrev?: (info) => boolean;\n /**\n * 标签渲染\n * ```\n * 1. 自定义设置 titleRender 后失效\n * 2. 与titleRender的区别\n * a. 设置 labelRender 后,menuLayout有效\n * b. 设置 titleRender 后,menuLayout失效\n * ```\n */\n labelRender?: (nodeData: TPlainObject) => ReactElement;\n /**\n * 自定义搜索规则\n */\n customSearchRule?: (nodeData: TPlainObject, searchValue?: string) => boolean;\n\n /**\n * 点击父节点 是否切换折叠\n * ```\n * 1. 设置 titleRender 后,此配置失效\n * ```\n */\n clickParentNodeToggleExpand?: boolean;\n /**\n * 禁用节点选中\n * ```\n * 1. checkable = true,此配置失效\n * 2. 在未设置节点 disabled 属性情况下,满足此配置不会触发onChange事件\n * ```\n */\n disableNodeSelect?: (item: TPlainObject) => boolean;\n /**\n * 是否必选,最后一个不能取消\n * ```\n * 1. 设置 checkable = true 时无效\n * ```\n */\n required?: boolean;\n\n /**\n * 在第一次渲染value时,主动执行一次onChange\n * ```\n * 1. 设置labelInValue = true 时有效\n * 2. 不考虑子父节点的关系\n * ```\n */\n executeOnChangeInRenderFirstValue?: boolean;\n};\n\nconst compareArrays = (arr1, arr2) => {\n const sortedArr1 = arr1.slice().sort();\n const sortedArr2 = arr2.slice().sort();\n return JSON.stringify(sortedArr1) === JSON.stringify(sortedArr2);\n};\n\nexport type TreeWrapperRefApi = {\n onClearSelectorList: () => void;\n getTreeDataList: () => TreeProps['treeData'];\n onChangeExpandedKeys: (expandedKeys: Array<string | number>) => void;\n getTreeTiledArray: () => TPlainObject[];\n getTreeTiledArrayMap: () => TPlainObject;\n /** 选择所有 */\n onSelectAll: () => void;\n /** 取消选择所有 */\n onCancelSelectAll: () => void;\n /** 展开所有 */\n onExpandedAll: () => void;\n /** 取消展开所有 */\n onCancelExpandedAll: () => void;\n onRefresh: () => void;\n};\n\n/**\n * Tree包装组件,默认返回父节点,可配置不返回\n * ```\n * 1. treeNode内置字段说明(如需要相关功能,可在接口中添加固定字段)\n * a. disabled 禁掉响应\n * b. isLeaf 设置为叶子节点 (设置了 loadData 时有效)。为 false 时会强制将其作为父节点\n * c. disableCheckbox checkable模式下,treeNode复选框是否可选\n * 2. 当设置selectorTreeList属性后,serviceConfig将失效\n * 3. checkable=true,为多选模式\n * 4. 设置value后,组件显示受控\n * 5. 设置loadDataFlag=true,会动态获取children,当treeNode中包含isLeaf=true字段,表示为叶子节点,没有children了\n * 6. 内置 onDrop 事件已处理数组排序,通过 onDropNodeHandle 事件可获取操作节点排序数据;自定义onDrop后,内置onDrop失效\n * ```\n */\nexport const TreeWrapper = forwardRef<TreeWrapperRefApi, TreeWrapperProps>((props, ref) => {\n const {\n style,\n serviceConfig,\n effectDependencyList,\n selectorTreeList,\n value,\n onChange,\n modelKey,\n checkableResponseParentNode = true,\n checkable,\n onSelectorTreeListChange,\n onRequestResponseChange,\n treeItemDataAdapter,\n searchValue,\n showSearch,\n searchPlaceholder,\n requestMessageConfig,\n labelInValueFieldNames,\n labelInValue,\n disabledCanUse,\n menuLayoutType,\n menuTriggerType,\n initRootExpand,\n searchResultType,\n onDropNodeHandle,\n onDropPrev,\n labelRender,\n searchStyle,\n className,\n defaultExpandAll,\n menus,\n customSearchRule,\n checkableType,\n clickParentNodeToggleExpand,\n disableNodeSelect,\n required,\n executeOnChangeInRenderFirstValue,\n ...otherProps\n } = props;\n\n const forceUpdate = hooks.useForceUpdate();\n\n const modelKeyInner = useMemo(() => {\n return modelKey || getUuid();\n }, [modelKey]);\n\n // eslint-disable-next-line no-prototype-builtins\n const hasSelectorTreeList = props.hasOwnProperty('selectorTreeList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<Array<string | number>>([]);\n const [state, actions] = treeWrapperModel(modelKeyInner).useStore();\n const [loading, setLoading] = fbaHooks.useSafeState(false);\n const requestPreKey = `request-progress-${modelKeyInner}`;\n const searchTypeHighlight = searchResultType === 'highlight';\n const fieldNames = useMemo(() => {\n return {\n label: 'label',\n value: 'value',\n children: 'children',\n ...props.fieldNames,\n };\n }, [props.fieldNames]);\n const menuLayoutTypeNew = menuLayoutType === undefined ? 'fold' : menuLayoutType;\n const menuTriggerTypeNew = menuTriggerType === undefined ? 'click' : menuTriggerType;\n const responseFirstRef = useRef(true);\n const innerValueListRef = useRef<any[] | undefined>(undefined);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n // tree 搜索值\n const [treeSearchValue, setTreeSearchValue] = useState<string | undefined>();\n\n const valueList = useMemo(() => {\n return getVauleList(value, labelInValueFieldNamesMerge);\n }, [labelInValueFieldNamesMerge, value]);\n\n fbaHooks.useEffectCustom(() => {\n if (state.treeList.length > 0) {\n if (\n responseFirstRef.current &&\n labelInValue &&\n executeOnChangeInRenderFirstValue &&\n valueList.length > 0\n ) {\n const dataList: TPlainObject[] = [];\n const originalList: TPlainObject[] = [];\n valueList.forEach((item) => {\n const target = state.treeTiledArrayMap[item];\n if (target) {\n originalList.push(target);\n dataList.push({\n [labelInValueFieldNamesMerge.label]: target[fieldNames.label],\n [labelInValueFieldNamesMerge.value]: target[fieldNames.value],\n });\n }\n });\n if (checkable) {\n props.onChange?.(dataList ? dataList : undefined, originalList);\n } else {\n props.onChange?.(dataList ? dataList[0] : undefined, originalList[0]);\n }\n }\n if (responseFirstRef.current && valueList.length === 0) {\n responseFirstRef.current = false;\n if (defaultExpandAll) {\n setTreeExpandedKeys(getDefaultExpandAllKeys(state.treeList, fieldNames));\n return;\n } else if (initRootExpand && state.treeList.length) {\n setTreeExpandedKeys([state.treeList[0][fieldNames.value]]);\n return;\n }\n }\n if (valueList.length > 0) {\n responseFirstRef.current = false;\n if (innerValueListRef.current) {\n if (!compareArrays(valueList, innerValueListRef.current)) {\n const innerExpandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(treeExpandedKeys?.concat(innerExpandedKeys))));\n }\n } else {\n const innerExpandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(treeExpandedKeys?.concat(innerExpandedKeys))));\n }\n }\n }\n // 当 valueList 为空时,不去清除treeExpandedKeys数据\n }, [state.treeList, JSON.stringify(valueList)]);\n\n const valueIsEmpty = (data: string | number) => {\n return data === '' || isUndefinedOrNull(data);\n };\n\n const serviceResponseHandle = (respData) => {\n let result: TPlainObject[] = respData;\n if (newServiceConfig.onRequestResultAdapter) {\n result = newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject);\n } else if (fieldNames.list) {\n result = get(respData, fieldNames.list, []) || [];\n }\n if (!isArray(result)) {\n console.warn('接口返回数据为非数组结构,确认是否需要配置fieldNames.list进行解析');\n return [];\n }\n return result;\n };\n\n fbaHooks.useEffectCustom(() => {\n setTreeSearchValue(searchValue);\n }, [searchValue]);\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n try {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys;\n const params = extend({}, newServiceConfig.params);\n if (requiredParamsKeys) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n void actions.changeRequestStatus({\n status: 'no-dependencies-params',\n });\n console.warn(`TreeWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n }\n try {\n setLoading(true);\n await actions.changeRequestStatus({\n status: 'request-progress',\n });\n window[requestPreKey] = true;\n const _respData = await newServiceConfig.onRequest?.(params);\n onRequestResponseChange?.(_respData);\n const respDataListNew = serviceResponseHandle(_respData);\n if (respDataListNew.length === 0) {\n responseFirstRef.current = false;\n }\n onChangeSelectorList(respDataListNew);\n setLoading(false);\n\n window[requestPreKey] = false;\n } catch (error: TAny) {\n window[requestPreKey] = false;\n setLoading(false);\n void actions.changeRequestStatus({\n status: 'request-error',\n errorMessage: error.message,\n });\n }\n } catch (error: TAny) {\n responseFirstRef.current = false;\n setLoading(false);\n void message.error((error.message as string) || '数据查询异常...');\n }\n });\n\n fbaHooks.useEffectCustom(() => {\n if (hasSelectorTreeList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (newEffectDependencyList.length) {\n void startDataSourceRequest();\n return;\n }\n const allState = treeWrapperModel(modelKeyInner).getState();\n if (allState.requestStatus === 'request-success') {\n onSelectorTreeListChange?.(allState.treeList);\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n } else {\n onSelectorTreeListChange?.(allState.treeList);\n }\n }, newEffectDependencyList);\n\n fbaHooks.useEffectCustom(() => {\n if (hasSelectorTreeList) {\n onChangeSelectorList(selectorTreeList || []);\n }\n }, [selectorTreeList]);\n\n const onChangeSelectorList = hooks.useCallbackRef((dataList: TAny[]) => {\n if (dataList?.length === 0 && state.treeList.length === 0) {\n void actions.changeRequestStatus({ status: 'request-success' });\n return;\n }\n void actions.setTreeList({\n treeList: dataList || [],\n childrenName: fieldNames.children,\n valueName: fieldNames.value,\n });\n onSelectorTreeListChange?.(dataList);\n });\n\n const getTreeExpandedKeys = (valueList: Array<string | number>, refresh?: boolean) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetKeys = getExpandedKeys(value, state.treeList, fieldNames);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetKeys);\n });\n return newTreeExpandedKeys;\n };\n\n hooks.useUpdateEffect(() => {\n if (treeSearchValue) {\n const targetList = state.treeTiledArray.filter((item) => {\n const labelValue = (item[fieldNames.label] || '') as string;\n if (customSearchRule) {\n return customSearchRule(item, treeSearchValue);\n }\n return String(labelValue).toLowerCase().includes(treeSearchValue.toLowerCase());\n });\n const treeExpandedKeysNew = getTreeExpandedKeys(\n targetList.map((item) => item[fieldNames.value]),\n true,\n );\n setTreeExpandedKeys(Array.from(new Set(treeExpandedKeysNew)));\n } else {\n setTreeExpandedKeys([]);\n }\n }, [treeSearchValue]);\n useImperativeHandle(ref, () => {\n return {\n onClearSelectorList: () => {\n void actions.resetTreeList();\n },\n getTreeDataList: () => {\n return state.treeList;\n },\n getTreeTiledArray: () => state.treeTiledArray,\n getTreeTiledArrayMap: () => state.treeTiledArrayMap,\n onChangeExpandedKeys: (dataList) => {\n setTreeExpandedKeys(dataList);\n },\n onSelectAll: () => {\n const targetList = state.treeTiledArray.map((temp) => temp[fieldNames.value]);\n setTreeExpandedKeys(targetList);\n onChange?.(targetList, undefined, state.treeList, undefined);\n },\n onCancelSelectAll: () => {\n setTreeExpandedKeys([]);\n onChange?.(undefined);\n },\n onExpandedAll: () => {\n const targetList = state.treeTiledArray.map((temp) => temp[fieldNames.value]);\n setTreeExpandedKeys(targetList);\n },\n onCancelExpandedAll: () => {\n setTreeExpandedKeys([]);\n },\n onRefresh: () => {\n forceUpdate();\n },\n };\n });\n\n const onExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onInnerChange = (\n selectedKey?: TreeWrapperValue,\n operateNodeData?: TPlainObject[] | TPlainObject,\n operateAllNodeDataList?: TPlainObject[],\n operateInfo?: TPlainObject,\n ) => {\n innerValueListRef.current = toArray(selectedKey);\n if (toArray(selectedKey).length === 0) {\n const nodeValue = operateInfo?.node[fieldNames.value];\n const target = state.treeTiledArrayMap[nodeValue];\n props.onChange?.(undefined, target, [target], operateInfo);\n } else {\n props.onChange?.(selectedKey, operateNodeData, operateAllNodeDataList, operateInfo);\n }\n };\n\n const onTreeChangeHandle = hooks.useCallbackRef((checkedData, operateInfo) => {\n // 最终checkValueList\n let finalCheckedValueList: Array<number | string> = [];\n // 完整checkValueList\n let completeCheckedValueList: Array<number | string> = [];\n\n if (checkable) {\n finalCheckedValueList = props.checkStrictly ? checkedData.checked : checkedData;\n } else {\n finalCheckedValueList = checkedData;\n if (required && !toArray(checkedData).length) {\n return;\n }\n if (disableNodeSelect) {\n const target = state.treeTiledArrayMap[checkedData[0]];\n const x = target ? disableNodeSelect(target) : false;\n if (x) {\n return;\n }\n }\n }\n finalCheckedValueList = toArray(finalCheckedValueList);\n\n if (!checkable) {\n completeCheckedValueList = finalCheckedValueList;\n } else {\n if (showSearch && treeSearchValue && !searchTypeHighlight) {\n // 数据源被过滤情况\n const operateNode = operateInfo?.node;\n if (props.checkStrictly) {\n if (operateInfo.checked == false) {\n finalCheckedValueList = valueList.filter((item) => item != operateNode[fieldNames.value]);\n } else {\n finalCheckedValueList = Array.from(new Set([...valueList, ...finalCheckedValueList]));\n }\n completeCheckedValueList = finalCheckedValueList;\n } else {\n // 非checkStrictly=true情况\n const propsCompleteValues =\n checkableType === '2' || checkableType === '3'\n ? completionParentChildrenNode(\n valueList,\n state.treeTiledArrayMap,\n fieldNames.children,\n fieldNames.value,\n )\n : valueList;\n if (operateInfo.checked == false) {\n finalCheckedValueList = removeTargetNodeAndAllChildrenNode(\n [...propsCompleteValues],\n operateNode,\n fieldNames.children,\n fieldNames.value,\n );\n } else {\n finalCheckedValueList = Array.from(new Set([...propsCompleteValues, ...finalCheckedValueList]));\n }\n completeCheckedValueList = getActualSelectKeyList(\n finalCheckedValueList,\n state.treeTiledArrayMap,\n fieldNames.children,\n fieldNames.value,\n );\n }\n } else {\n // 无搜索情况\n completeCheckedValueList = finalCheckedValueList;\n }\n\n if (!props.checkStrictly) {\n if (checkableType === '2') {\n finalCheckedValueList = removeAllParentNode(\n completeCheckedValueList,\n state.treeTiledArrayMap,\n fieldNames.children,\n );\n } else if (checkableType === '3') {\n finalCheckedValueList = removeAllSelectLeafNode(\n completeCheckedValueList,\n state.treeTiledArrayMap,\n fieldNames.children,\n fieldNames.value,\n );\n } else if (checkableResponseParentNode == false) {\n finalCheckedValueList = removeAllParentNode(\n completeCheckedValueList,\n state.treeTiledArrayMap,\n fieldNames.children,\n );\n } else {\n finalCheckedValueList = completeCheckedValueList;\n }\n }\n }\n\n const completeCheckedItemList = completeCheckedValueList.map((item) => {\n return state.treeTiledArrayMap[item];\n });\n if (labelInValue) {\n const lvValue = labelInValueFieldNamesMerge.value;\n const lvLabel = labelInValueFieldNamesMerge.label;\n const finalCheckedList = finalCheckedValueList.map((item) => {\n return {\n [lvLabel]: state.treeTiledArrayMap[item][fieldNames.label],\n [lvValue]: state.treeTiledArrayMap[item][fieldNames.value],\n };\n });\n if (checkable) {\n onInnerChange(\n finalCheckedList,\n finalCheckedValueList.map((item) => {\n return state.treeTiledArrayMap[item];\n }),\n completeCheckedItemList,\n operateInfo,\n );\n } else {\n onInnerChange(\n finalCheckedList[0],\n state.treeTiledArrayMap[finalCheckedValueList[0]],\n completeCheckedItemList,\n operateInfo,\n );\n }\n } else {\n if (checkable) {\n onInnerChange(\n finalCheckedValueList,\n finalCheckedValueList.map((item) => {\n return state.treeTiledArrayMap[item];\n }),\n completeCheckedItemList,\n operateInfo,\n );\n } else {\n onInnerChange(\n finalCheckedValueList[0],\n state.treeTiledArrayMap[finalCheckedValueList[0]],\n completeCheckedItemList,\n operateInfo,\n );\n }\n }\n });\n\n const treeItemDataAdapterHandle = hooks.useCallbackRef((dataItem) => {\n return treeItemDataAdapter?.(dataItem);\n });\n\n const originalDataList = useMemo(() => {\n const list = cloneState(state.treeList || []);\n if (treeSearchValue && searchResultType !== 'highlight') {\n const resultList = treeFilter(\n cloneState(state.treeList || []),\n (node) => {\n if (customSearchRule) {\n return customSearchRule(node, treeSearchValue);\n }\n const value = node[fieldNames.label]?.toLowerCase();\n return value.indexOf(treeSearchValue.toLowerCase()) >= 0;\n },\n { childrenName: fieldNames.children },\n );\n return resultList;\n }\n return list;\n }, [\n customSearchRule,\n fieldNames.children,\n fieldNames.label,\n searchResultType,\n state.treeList,\n treeSearchValue,\n ]);\n\n const treeData = useMemo(() => {\n const loop = (data: TAny[]): TAny[] =>\n data?.map((item) => {\n const adapterItem = treeItemDataAdapterHandle?.(item) || item;\n const disabled = disabledCanUse ? undefined : adapterItem.disabled;\n const strTitle = (adapterItem[fieldNames.label] || '') as string;\n let titleDom;\n if (treeSearchValue && isString(strTitle)) {\n const strTitleNew = strTitle?.toLowerCase();\n const index = strTitleNew.indexOf(treeSearchValue.toLowerCase());\n const beforeStr = strTitle.substring(0, index);\n const afterStr = strTitle.slice(index + treeSearchValue.length);\n const centerStr = strTitle.slice(index, index + treeSearchValue.length);\n titleDom =\n index > -1 ? (\n <span\n className={classNames({\n 'v-tree-item-disabled': adapterItem.disabled,\n })}\n >\n {beforeStr}\n <span className=\"site-tree-search-value\">{centerStr}</span>\n {afterStr}\n </span>\n ) : null;\n }\n if (!titleDom && adapterItem.disabled) {\n titleDom = (\n <span\n className={classNames({\n 'v-tree-item-disabled': adapterItem.disabled,\n })}\n >\n {strTitle}\n </span>\n );\n }\n const children = adapterItem[fieldNames.children];\n return {\n ...adapterItem,\n disabled,\n [fieldNames.label]: titleDom || strTitle,\n _treeItemName: strTitle,\n _disabled: adapterItem.disabled,\n [fieldNames.children]: isArray(children) && children.length > 0 ? loop(children) : undefined,\n };\n });\n return loop(originalDataList);\n }, [\n originalDataList,\n treeItemDataAdapterHandle,\n disabledCanUse,\n fieldNames.label,\n fieldNames.children,\n treeSearchValue,\n ]);\n const loadData = hooks.useCallbackRef((dataItem: TPlainObject) => {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise<void>(async (resolve, reject) => {\n if (dataItem[fieldNames.children]) {\n resolve();\n return;\n }\n try {\n const respData = await props.loadDataServiceConfig?.onRequest?.(\n props.loadDataServiceConfig?.getParams?.(dataItem) || {},\n );\n const respDataList = (\n props.loadDataServiceConfig?.onRequestResultAdapter\n ? props.loadDataServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n\n void actions\n .treeListAppendChildren({\n value: dataItem[fieldNames.value],\n appendList: respDataList,\n childrenName: fieldNames.children,\n valueName: fieldNames.value,\n })\n .then((allState) => {\n onChangeSelectorList(allState.treeList as TPlainObject[]);\n resolve();\n });\n } catch (error: TAny) {\n void message.error(error.message || '数据加载异常...');\n // 此处失败后,会重试“loadData”请求多次\n reject();\n }\n });\n });\n\n const isLeafNode = hooks.useCallbackRef((nodeData) => {\n const children = nodeData?.[fieldNames.children];\n // 当loadDataFlag=true,考虑叶子节点显示问题\n const loadDataFlag = props.loadDataFlag;\n const loadHasChildren = loadDataFlag ? !nodeData.isLeaf : false;\n const hasChildren = (children && children.length > 0) || loadHasChildren;\n return !hasChildren;\n });\n\n const titleRender = hooks.useCallbackRef((nodeData) => {\n const stringLabel = nodeData._treeItemName || nodeData[fieldNames.label];\n const buttonOperateConfig = menus?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n });\n if (buttonOperateConfig?.operateList.length) {\n return (\n <Fragment>\n <span className=\"tree-item-title\" data-value={nodeData[fieldNames.value]}>\n {labelRender?.(nodeData) || nodeData?.[fieldNames.label]}\n </span>\n <ButtonOperate\n gap={5}\n {...buttonOperateConfig}\n dropdownMenuProps={{\n placement: 'bottomRight',\n isFixed: true,\n ...buttonOperateConfig?.dropdownMenuProps,\n }}\n className={classNames('tree-item-title-operate', buttonOperateConfig.className)}\n />\n </Fragment>\n );\n }\n\n if (menuLayoutTypeNew === 'fold') {\n let menuOptions: TAny[] = [];\n if (props.menuOptions?.fold) {\n menuOptions =\n props.menuOptions?.[menuLayoutTypeNew]?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n }) || [];\n } else {\n menuOptions =\n props.getMenuOptions?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n }) || [];\n }\n return (\n <Fragment>\n <span className=\"tree-item-title\" data-value={nodeData[fieldNames.value]}>\n {labelRender?.(nodeData) || nodeData?.[fieldNames.label]}\n </span>\n {menuOptions.length > 0 && (\n <DropdownMenuWrapper menuList={menuOptions} placement=\"bottomRight\">\n <MoreOutlined />\n </DropdownMenuWrapper>\n )}\n </Fragment>\n );\n }\n const menuOptions = props.menuOptions?.tile?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n });\n\n return (\n <Fragment>\n <span className=\"tree-item-title\" data-value={nodeData[fieldNames.value]}>\n {labelRender?.(nodeData) || nodeData?.[fieldNames.label]}\n </span>\n {menuOptions ? (\n <ButtonOperate\n gap={5}\n {...menuOptions}\n className={classNames('tree-item-title-operate', menuOptions.className)}\n />\n ) : null}\n </Fragment>\n );\n });\n\n const onChangeDebounce = hooks.useDebounceCallback((value: string) => {\n setTreeSearchValue(value);\n props.onSearchValueChange?.(value);\n }, 300);\n\n const onSearchChange = hooks.useCallbackRef((e: React.ChangeEvent<HTMLInputElement>) => {\n onChangeDebounce(e.target.value);\n });\n\n const iconHandle = hooks.useCallbackRef((treeData) => {\n if (!props.icon) return null;\n if (isValidElement(props.icon)) return props.icon;\n const isLeafFlag = isLeafNode(treeData.data);\n return props.icon({\n ...treeData,\n isParent: !isLeafFlag,\n isLeaf: isLeafFlag,\n });\n });\n\n const treeFieldNames = useMemo(() => {\n return {\n title: fieldNames.label,\n key: fieldNames.value,\n children: fieldNames.children,\n };\n }, [fieldNames]);\n const showTree = treeData.length > 0 && state.requestStatus !== 'request-error';\n const commonProps = {\n showLine: { showLeafIcon: false },\n titleRender,\n blockNode: true,\n switcherIcon: <CaretDownFilled />,\n onDrop: (info) => {\n if (onDropPrev) {\n const boo = onDropPrev(info);\n if (!boo) return;\n }\n const { dataList, dragNodeData } = onTreeDrop(originalDataList, fieldNames, info);\n onDropNodeHandle?.(dragNodeData);\n onChangeSelectorList(dataList);\n },\n expandedKeys: treeExpandedKeys,\n ...otherProps,\n fieldNames: treeFieldNames,\n treeData,\n onExpand,\n loadData: props.loadDataFlag ? loadData : undefined,\n style: { width: '100%' },\n icon: iconHandle,\n onClick: (e) => {\n if (clickParentNodeToggleExpand) {\n let targetEle = e.target;\n let value = targetEle.dataset.value;\n if (isUndefinedOrNull(value)) {\n targetEle = dom.findParentsElement(e.target, (node: Element) => {\n return (\n node.classList?.contains('tree-item-title') || node.classList?.contains('ant-tree-treenode')\n );\n });\n value = targetEle.dataset.value;\n }\n if (!isUndefinedOrNull(value)) {\n let treeExpandedTarget = false;\n\n if (props.loadDataFlag) {\n treeExpandedTarget = treeExpandedKeys.includes(value);\n } else {\n const target = state.treeTiledArrayMap[value];\n if (!target?.[fieldNames.children]?.length) {\n return;\n }\n treeExpandedTarget = treeExpandedKeys.includes(value);\n }\n\n if (treeExpandedTarget) {\n const newList = array.arrayRemove(treeExpandedKeys, value);\n setTreeExpandedKeys([...newList]);\n } else {\n setTreeExpandedKeys([...treeExpandedKeys, value]);\n }\n }\n }\n },\n };\n\n const checkedProps = {\n onCheck: onTreeChangeHandle,\n checkable,\n checkedKeys: valueList,\n };\n\n const selectedProps = {\n onSelect: onTreeChangeHandle,\n multiple: false,\n selectedKeys: valueList,\n };\n const sceneProps = checkable ? checkedProps : selectedProps;\n const cName = classNames('v-tree-wrapper', `v-tree-wrapper-menu-${menuTriggerTypeNew}`, className);\n const isSearchEmpty = state.treeList.length > 0 && !showTree && treeSearchValue;\n return (\n <div className={cName} style={style}>\n {!!showSearch && (\n <div className=\"v-tree-wrapper-search-area\" style={searchStyle}>\n <InputSearchWrapper\n className=\"v-tree-wrapper-search\"\n placeholder={isUndefinedOrNull(searchPlaceholder) ? '搜索' : searchPlaceholder}\n onChange={onSearchChange}\n value={treeSearchValue}\n allowClear\n />\n {!!props.searchExtraElement && (\n <span className=\"v-tree-wrapper-search-extra\">{props.searchExtraElement}</span>\n )}\n </div>\n )}\n\n {showTree ? (\n <div className=\"v-tree-wrapper-tree-wrapper\">\n <Spin spinning={state.requestStatus === 'request-progress'} />\n <Tree {...sceneProps} {...commonProps} className=\"v-tree-wrapper-tree\"></Tree>\n </div>\n ) : (\n <RequestStatus\n status={state.requestStatus}\n loading={loading}\n messageConfig={{\n 'request-success': isSearchEmpty ? '搜索结果为空' : '暂无数据',\n 'request-error': state.requestErrorMessage,\n ...requestMessageConfig,\n }}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n )}\n </div>\n );\n});\n","import type { TPlainObject } from '@flatbiz/utils';\nimport { attachPropertiesToComponent } from '@flatbiz/utils';\nimport type { ForwardRefExoticComponent, RefAttributes } from 'react';\nimport { getTreeDataList } from './hooks';\nimport type { TreeWrapperProps, TreeWrapperRefApi } from './tree-wrapper';\nimport { TreeWrapper as TreeWrapperInner } from './tree-wrapper';\nexport type { TreeServiceConfig, TreeWrapperProps } from './tree-wrapper';\n/**\n * Tree包装组件,默认返回父节点,可配置不返回\n * @param props\n * @returns\n * ```\n * 1. treeNode内置字段说明(如需要相关功能,可在接口中添加固定字段)\n * a. disabled 禁掉响应\n * b. isLeaf 设置为叶子节点 (设置了 loadData 时有效)。为 false 时会强制将其作为父节点\n * c. disableCheckbox checkable模式下,treeNode复选框是否可选\n * 2. 当设置selectorTreeList属性后,serviceConfig将失效\n * 3. checkable=true,为多选模式\n * 4. 设置value后,组件显示受控\n * 5. 设置loadDataFlag=true,会动态获取children,当treeNode中包含isLeaf=true字段,表示为叶子节点,没有children了\n * 6. 内置 onDrop 事件已处理数组排序,通过 onDropNodeHandle 事件可获取操作节点排序数据;自定义onDrop后,内置onDrop失效\n * ```\n */\nexport const TreeWrapper: ForwardRefExoticComponent<TreeWrapperProps & RefAttributes<TreeWrapperRefApi>> & {\n getTreeDataList: (modelKey: string) => TPlainObject[];\n} = attachPropertiesToComponent(TreeWrapperInner, {\n /**\n * 获取树形原数据\n * ```\n * 参数 modelKey 与 TreeWrapper属性 modelKey相同,才能获取数据\n * ```\n */\n getTreeDataList: getTreeDataList,\n});\n"],"names":["defaultState","treeList","treeTiledArray","treeTiledArrayMap","queryIsEmpty","TreeWrapperModel","actions","setTreeList","params","state","treeToArray","childrenName","arrayToMap","valueName","requestStatus","resetTreeList","changeRequestStatus","status","requestErrorMessage","errorMessage","undefined","treeListAppendChildren","tiledArray","target","value","_isArray","appendList","length","isLeaf","treeWrapperModels","treeWrapperModel","key","Model","getTreeDataList","modelKey","getState","getDefaultExpandAllKeys","fieldNames","allValues","children","filter","item","childrenValue","map","getExpandedKeys","treeToTiledArray","treeLeafParentsArray","parentValue","getVauleList","data","labelInValueFieldNames","tempList","isUndefinedOrNull","_isObject","onTreeDrop","dataList","info","dropKey","node","dragKey","dragNode","dropPos","pos","split","dropPosition","Number","treeKeyName","treeChildrenName","loop","callback","i","cloneState","dragObj","index","arr","splice","dropToGap","unshift","props","expanded","ar","_item","dragNodeData","dorpNodeId","_tree$walkThroughTree","id","_tree","walkThroughTree","_parent","tileList","find","parentId","getActualSelectKeyList","checkedValueList","chidlrenKey","valueKey","leafValueDataMap","hasChildrenList","retainHasChildrenValueList","forEach","_treeTiledArrayMap$it","isNotEmptyArray","push","childrenTiledList","Object","keys","targetList","temp","removeTargetNodeAndAllChildrenNode","awitDeleteNode","awitDeleteTieldDataMap","treeToTiledMap","removeAllSelectLeafNode","awitDeleteCheckedValueMap","_treeTiledArrayMap$it2","childrenList","targetMap","_extends","removeAllParentNode","completionParentChildrenNode","values","concat","_treeTiledArrayMap$it3","Array","from","Set","compareArrays","arr1","arr2","sortedArr1","slice","sort","sortedArr2","JSON","stringify","TreeWrapper","forwardRef","ref","style","serviceConfig","effectDependencyList","selectorTreeList","onChange","_props$checkableRespo","checkableResponseParentNode","checkable","onSelectorTreeListChange","onRequestResponseChange","treeItemDataAdapter","searchValue","showSearch","searchPlaceholder","requestMessageConfig","labelInValue","disabledCanUse","menuLayoutType","menuTriggerType","initRootExpand","searchResultType","onDropNodeHandle","onDropPrev","labelRender","searchStyle","className","defaultExpandAll","menus","customSearchRule","checkableType","clickParentNodeToggleExpand","disableNodeSelect","required","executeOnChangeInRenderFirstValue","otherProps","_objectWithoutPropertiesLoose","_excluded","forceUpdate","_hooks","useForceUpdate","modelKeyInner","useMemo","getUuid","hasSelectorTreeList","hasOwnProperty","newServiceConfig","newEffectDependencyList","_useState","useState","treeExpandedKeys","setTreeExpandedKeys","_treeWrapperModel$use","useStore","_fbaHooks$useSafeStat","fbaHooks","useSafeState","loading","setLoading","requestPreKey","searchTypeHighlight","label","menuLayoutTypeNew","menuTriggerTypeNew","responseFirstRef","useRef","innerValueListRef","labelInValueFieldNamesMerge","_useState2","treeSearchValue","setTreeSearchValue","valueList","useEffectCustom","current","originalList","_dataList$push","innerExpandedKeys","getTreeExpandedKeys","valueIsEmpty","serviceResponseHandle","respData","result","onRequestResultAdapter","list","_get","console","warn","startDataSourceRequest","useCallbackRef","Promise","$return","$error","requiredParamsKeys","isEmpty","_respData","respDataListNew","$Try_1_Post","$boundEx","$Try_1_Catch","error","message","onRequest","Error","_extend","join","$Try_2_Post","$Try_2_Catch","window","resolve","then","$await_4","$await_5","onChangeSelectorList","allState","refresh","newTreeExpandedKeys","includes","targetKeys","useUpdateEffect","labelValue","String","toLowerCase","treeExpandedKeysNew","useImperativeHandle","onClearSelectorList","getTreeTiledArray","getTreeTiledArrayMap","onChangeExpandedKeys","onSelectAll","onCancelSelectAll","onExpandedAll","onCancelExpandedAll","onRefresh","onExpand","expandedKeys","onInnerChange","selectedKey","operateNodeData","operateAllNodeDataList","operateInfo","toArray","nodeValue","onTreeChangeHandle","checkedData","finalCheckedValueList","completeCheckedValueList","checkStrictly","checked","x","operateNode","propsCompleteValues","completeCheckedItemList","lvValue","lvLabel","finalCheckedList","_ref","treeItemDataAdapterHandle","dataItem","originalDataList","resultList","treeFilter","_node$fieldNames$labe","indexOf","treeData","_extends2","adapterItem","disabled","strTitle","titleDom","_isString","strTitleNew","beforeStr","substring","afterStr","centerStr","_jsxs","_classNames","_jsx","_treeItemName","_disabled","loadData","reject","_props$loadDataServic","_props$loadDataServic2","_props$loadDataServic3","respDataList","$Try_3_Post","$Try_3_Catch","loadDataServiceConfig","getParams","$await_6","isLeafNode","nodeData","loadDataFlag","loadHasChildren","hasChildren","titleRender","_extends3","_props$menuOptions3","_extends6","stringLabel","buttonOperateConfig","operateList","Fragment","ButtonOperate","gap","dropdownMenuProps","placement","isFixed","_props$menuOptions","menuOptions","fold","_props$menuOptions2","_props$menuOptions2$m","_extends4","call","_extends5","getMenuOptions","DropdownMenuWrapper","menuList","_MoreOutlined","tile","onChangeDebounce","useDebounceCallback","onSearchValueChange","onSearchChange","e","iconHandle","icon","isValidElement","isLeafFlag","isParent","treeFieldNames","title","showTree","commonProps","showLine","showLeafIcon","blockNode","switcherIcon","_CaretDownFilled","onDrop","boo","_onTreeDrop","width","onClick","targetEle","dataset","dom","findParentsElement","_node$classList","_node$classList2","classList","contains","treeExpandedTarget","_target$fieldNames$ch","newList","_array","arrayRemove","checkedProps","onCheck","checkedKeys","selectedProps","onSelect","multiple","selectedKeys","sceneProps","cName","isSearchEmpty","InputSearchWrapper","placeholder","allowClear","searchExtraElement","Spin","spinning","Tree","RequestStatus","messageConfig","errorButton","Button","type","attachPropertiesToComponent","TreeWrapperInner"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -474,6 +474,9 @@ export type DialogModalProps = Omit<ModalProps, "onOk" | "onCancel" | "getContai
474
474
  size?: "small" | "middle" | "large" | null;
475
475
  onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;
476
476
  onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;
477
+ /**
478
+ * content只在第一次弹起时,执行一次
479
+ */
477
480
  content: string | ReactElement | ((form: FormInstance, operate: {
478
481
  onClose: TNoopDefine;
479
482
  }) => ReactElement);
@@ -605,6 +608,13 @@ export interface ButtonOperateProps {
605
608
  gap?: number;
606
609
  /** 折叠合拢属性 */
607
610
  dropdownMenuProps?: Omit<DropdownMenuWrapperProps, "menuList">;
611
+ /**
612
+ * 按钮布局尺寸
613
+ * ```
614
+ * 1. 设置为small后,gap、split 配置失效
615
+ * ```
616
+ */
617
+ size?: "small" | "default";
608
618
  }
609
619
  export declare const ButtonOperateItemContent: (props: Pick<ButtonOperateItem, "hoverTips" | "tipsType"> & {
610
620
  content: ReactNode;
@@ -868,6 +878,15 @@ export type ColorPickerWrapperProps = Omit<ColorPickerProps, "value" | "onChange
868
878
  viewMinWidth?: number;
869
879
  };
870
880
  export declare const ColorPickerWrapper: (props: ColorPickerWrapperProps) => import("react/jsx-runtime").JSX.Element;
881
+ export type CopyWrapperProps = {
882
+ copyText: string | (() => string);
883
+ /** 复制后提示消息 */
884
+ copyAfterMsg?: string;
885
+ /** 复制鼠标悬浮提示 */
886
+ hoverTips?: string | ((trigger: any) => string);
887
+ iconStyle?: CSSProperties;
888
+ };
889
+ export declare const CopyWrapper: (props: CopyWrapperProps) => import("react/jsx-runtime").JSX.Element;
871
890
  export interface DrawerStateType {
872
891
  title: string;
873
892
  /**
@@ -1324,6 +1343,9 @@ export type DialogDrawerProps = Omit<DrawerProps, "onOk" | "onCancel" | "getCont
1324
1343
  cancelText?: string | ReactElement;
1325
1344
  onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;
1326
1345
  onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;
1346
+ /**
1347
+ * content只在第一次弹起时,执行一次
1348
+ */
1327
1349
  content: string | ReactElement | ((form: FormInstance, operate: {
1328
1350
  onClose: TNoopDefine;
1329
1351
  }) => ReactElement);
@@ -1959,8 +1981,13 @@ export type SelectorServiceConfig = {
1959
1981
  export type SelectorWrapperProps = Omit<SelectProps, "onSearch" | "notFoundContent" | "options" | "fieldNames" | "onChange" | "value" | "loading" | "mode"> & {
1960
1982
  /** 不支持 tags 模式,tags模式请使用 SelectorWrapperSimple 组件 */
1961
1983
  mode?: "multiple";
1962
- /** key值,相同的key 同页面可共用缓存数据 */
1963
- modelKey: string;
1984
+ /**
1985
+ * 设置请求唯一值
1986
+ * ```
1987
+ * 1. 设置后,如果请求入参不变,不会重复请求接口,直接使用上次缓存数据
1988
+ * ```
1989
+ */
1990
+ modelKey?: string;
1964
1991
  /**
1965
1992
  * 参数Key映射
1966
1993
  * ```
@@ -2038,6 +2065,11 @@ export type SelectorWrapperProps = Omit<SelectProps, "onSearch" | "notFoundConte
2038
2065
  * 1. true: 在 modelKey下使用请求参数缓存数据,如果相同modelKey、相同请求参数直接使用缓存数据
2039
2066
  * 2. false: 每次都调用接口,不参与缓存数据、不使用缓存数据
2040
2067
  * 3. useCache=false 在 serviceConfig.requiredParamsKeys.length > 0 有效
2068
+ *
2069
+ * @deprecated 已废弃
2070
+ *
2071
+ * ```
2072
+ * 1. 需要缓存设置 modelKey,不需要不设置
2041
2073
  * ```
2042
2074
  */
2043
2075
  useCache?: boolean;
@@ -3217,7 +3249,7 @@ export type EasyTableFilterProps = {
3217
3249
  defaultResetButtonTriggerRequest?: boolean;
3218
3250
  easyFormProps?: Omit<EasyFormProps, "isPure" | "column" | "forceColumn" | "width" | "gridGutter" | "children">;
3219
3251
  };
3220
- export type EasyTableTableProps<T> = Omit<TableProps<TAny>, "dataSource" | "loading" | "rowKey" | "columns"> & {
3252
+ export type EasyTableTableProps<T> = Omit<TableProps<TAny>, "dataSource" | "loading" | "rowKey" | "columns" | "title"> & {
3221
3253
  children?: ReactElement | ReactElement[];
3222
3254
  /**
3223
3255
  * 表格行 key 的取值,
@@ -3253,6 +3285,10 @@ export type EasyTableTableProps<T> = Omit<TableProps<TAny>, "dataSource" | "load
3253
3285
  * @version 4.4.6
3254
3286
  */
3255
3287
  emptyShowSize?: "small" | "large";
3288
+ /** 标题 */
3289
+ title?: ReactNode;
3290
+ /** 动作 */
3291
+ actions?: ReactElement[];
3256
3292
  };
3257
3293
  /**
3258
3294
  * 对 查询条件+表格数据 进行深度封装,内置数据交互处理
@@ -3464,6 +3500,9 @@ export type FbaAppDrawerProps = Omit<DrawerProps, "onOk" | "onCancel" | "getCont
3464
3500
  cancelText?: string | ReactElement;
3465
3501
  onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;
3466
3502
  onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;
3503
+ /**
3504
+ * content只在第一次弹起时,执行一次
3505
+ */
3467
3506
  content: string | ReactElement | ((form: FormInstance, operate: {
3468
3507
  onClose: DrawerProps["onClose"];
3469
3508
  }) => ReactElement);
@@ -3495,6 +3534,9 @@ export type FbaAppModalProps = Omit<ModalProps, "onOk" | "onCancel" | "getContai
3495
3534
  onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;
3496
3535
  onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;
3497
3536
  onClose?: () => void;
3537
+ /**
3538
+ * content只在第一次弹起时,执行一次
3539
+ */
3498
3540
  content: string | ReactElement | ((form: FormInstance, operate: {
3499
3541
  onClose: TNoopDefine;
3500
3542
  }) => ReactElement);
@@ -4122,6 +4164,31 @@ export type FormListWrapperProps = {
4122
4164
  * ```
4123
4165
  */
4124
4166
  export declare const FormListWrapper: (props: FormListWrapperProps) => import("react/jsx-runtime").JSX.Element;
4167
+ export interface FullScreenHandleProps {
4168
+ active: boolean;
4169
+ toggle: () => void;
4170
+ }
4171
+ export type FullScreenProps = {
4172
+ children: ReactElement;
4173
+ handle: FullScreenHandleProps;
4174
+ className?: string;
4175
+ style?: CSSProperties;
4176
+ };
4177
+ /**
4178
+ * 全屏显示(点击键盘ESC可关闭全屏显示)
4179
+ *
4180
+ * ```
4181
+ * const handle = FullScreen.useFullScreenHandle();
4182
+ *
4183
+ * <FullScreen handle={handle}>
4184
+ * 包裹需要全屏的元素
4185
+ * <Button onClick={handle.toggle}>全屏</Button>
4186
+ * </FullScreen>
4187
+ * ```
4188
+ */
4189
+ export declare const FullScreen: ((props: FullScreenProps) => import("react/jsx-runtime").JSX.Element) & {
4190
+ useFullScreenHandle: () => FullScreenHandleProps;
4191
+ };
4125
4192
  export type GapProps = {
4126
4193
  height?: number;
4127
4194
  width?: number;
@@ -6122,8 +6189,13 @@ export type TreeLoadDataServiceConfig = {
6122
6189
  onRequestResultAdapter?: (respData: TAny) => TPlainObject[];
6123
6190
  };
6124
6191
  export type TreeWrapperProps = Omit<TreeProps, "treeData" | "onExpand" | "selectedKeys" | "checkedKeys" | "onCheck" | "onSelect" | "fieldNames" | "multiple" | "loadData" | "icon" | "defaultCheckedKeys" | "defaultExpandParent" | "defaultSelectedKeys"> & {
6125
- /** 唯一值,用于缓存数据 */
6126
- modelKey: string;
6192
+ /**
6193
+ * 设置请求唯一值
6194
+ * ```
6195
+ * 1. 设置后,如果请求入参不变,不会重复请求接口,直接使用上次缓存数据
6196
+ * ```
6197
+ */
6198
+ modelKey?: string;
6127
6199
  /**
6128
6200
  * 字段映射
6129
6201
  * ```
@@ -6370,6 +6442,7 @@ export type TreeWrapperRefApi = {
6370
6442
  onExpandedAll: () => void;
6371
6443
  /** 取消展开所有 */
6372
6444
  onCancelExpandedAll: () => void;
6445
+ onRefresh: () => void;
6373
6446
  };
6374
6447
  /**
6375
6448
  * Tree包装组件,默认返回父节点,可配置不返回
@@ -6501,7 +6574,13 @@ export type TreeSelectorServiceConfig = {
6501
6574
  onRequestResultAdapter?: (respData: TAny) => TPlainObject[];
6502
6575
  };
6503
6576
  export type TreeSelectorWrapperProps = Omit<TreeSelectProps, "treeExpandedKeys" | "treeData" | "loading" | "onTreeExpand" | "onChange" | "value" | "fieldNames" | "defaultValue" | "treeDataSimpleMode" | "onSearch"> & {
6504
- modelKey: string;
6577
+ /**
6578
+ * 设置请求唯一值
6579
+ * ```
6580
+ * 1. 设置后,如果请求入参不变,不会重复请求接口,直接使用上次缓存数据
6581
+ * ```
6582
+ */
6583
+ modelKey?: string;
6505
6584
  fieldNames?: {
6506
6585
  /**
6507
6586
  * 1. list 为 onRequest 返回数据中列表key值,可多级取值,例如: 'a.b.c'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flatbiz/antd",
3
- "version": "4.5.51",
3
+ "version": "4.5.52",
4
4
  "description": "flat-biz ui components",
5
5
  "main": "index.js",
6
6
  "typings": "index.d.ts",
@@ -77,7 +77,8 @@
77
77
  "simple-mind-map": "^0.10.6",
78
78
  "sql-formatter": "^15.0.2",
79
79
  "use-intl": "3.0.0-rc.6",
80
- "xml-formatter": "^3.6.2"
80
+ "xml-formatter": "^3.6.2",
81
+ "copy-to-clipboard": "^3.3.3"
81
82
  },
82
83
  "gitHead": "4378d433b73ee28fd7cb4c64bed8571f993eb5a9"
83
84
  }