diff --git a/.changeset/dull-birds-hang.md b/.changeset/dull-birds-hang.md new file mode 100644 index 000000000..9d2eb1fa0 --- /dev/null +++ b/.changeset/dull-birds-hang.md @@ -0,0 +1,5 @@ +--- +"@hi-ui/tree": patch +--- + +fix: 修复组件指定 fieldNames={{ title: 'name' }} 后,menuOptions 里 type 为 editNode 时会出现改不了节点的情况 diff --git a/.changeset/odd-ladybugs-boil.md b/.changeset/odd-ladybugs-boil.md new file mode 100644 index 000000000..accfb6680 --- /dev/null +++ b/.changeset/odd-ladybugs-boil.md @@ -0,0 +1,5 @@ +--- +"@hi-ui/hiui": patch +--- + +fix(tree): 修复组件指定 fieldNames={{ title: 'name' }} 后,menuOptions 里 type 为 editNode 时会出现改不了节点的情况 diff --git a/packages/ui/tree/src/hooks/use-edit.ts b/packages/ui/tree/src/hooks/use-edit.ts index 7776dcac6..75b5633df 100644 --- a/packages/ui/tree/src/hooks/use-edit.ts +++ b/packages/ui/tree/src/hooks/use-edit.ts @@ -3,6 +3,8 @@ import { TreeDataItem, FlattedTreeNodeData, TreeNodeType, TreeDataStatus } from import { cloneTree } from '@hi-ui/tree-utils' import { addChildNodeById, deleteNodeById, insertNodeById, uuid } from '../utils' import { useLatestRef } from '@hi-ui/use-latest' +import { HiBaseFieldNames } from 'packages/core/core/lib/types' +import { getKey } from '../utils/tree' const genTreeNode = () => ({ id: uuid(), title: '', type: 'add' } as FlattedTreeNodeData) @@ -20,7 +22,8 @@ export const useEdit = ( level: number ) => boolean | Promise, onSave?: (savedNode: FlattedTreeNodeData, data: TreeDataItem[]) => void, - onDelete?: (deletedNode: FlattedTreeNodeData, data: TreeDataItem[]) => void + onDelete?: (deletedNode: FlattedTreeNodeData, data: TreeDataItem[]) => void, + fieldNames?: HiBaseFieldNames ) => { const addSiblingNode = useCallback( (node: FlattedTreeNodeData) => { @@ -101,7 +104,7 @@ export const useEdit = ( } const nextTreeData = cloneTree(treeData) - _saveEdit(targetNode, nextTreeData) + _saveEdit(targetNode, nextTreeData, fieldNames) if (onBeforeSaveRef.current) { const result = await onBeforeSaveRef.current( @@ -131,16 +134,23 @@ export const useEdit = ( } // 修改指定的 id 的 node 内容 -const _saveEdit = (targetNode: TreeDataItem, treeData: TreeDataItem[]) => { +const _saveEdit = ( + targetNode: TreeDataItem, + treeData: TreeDataItem[], + fieldNames?: HiBaseFieldNames +) => { const { id, title } = targetNode - treeData.forEach((node) => { - if (node.id === id) { - node.title = title + if ( + // @ts-ignore + node[getKey(fieldNames, 'id')] === id + ) { + // @ts-ignore + node[getKey(fieldNames, 'title')] = title delete node.type } else { if (node.children) { - _saveEdit(targetNode, node.children) + _saveEdit(targetNode, node.children, fieldNames) } } }) diff --git a/packages/ui/tree/src/use-tree-action.tsx b/packages/ui/tree/src/use-tree-action.tsx index 9c0f0d35e..5863e6200 100644 --- a/packages/ui/tree/src/use-tree-action.tsx +++ b/packages/ui/tree/src/use-tree-action.tsx @@ -100,7 +100,8 @@ export const useTreeEditProps = ( onBeforeSave, onBeforeDelete, onSave, - onDelete + onDelete, + fieldNames ) const [editing, setEditing] = React.useState(false) diff --git a/packages/ui/tree/src/utils/tree.ts b/packages/ui/tree/src/utils/tree.ts index bbb0d77ba..9588a8bfb 100644 --- a/packages/ui/tree/src/utils/tree.ts +++ b/packages/ui/tree/src/utils/tree.ts @@ -3,6 +3,11 @@ import { baseFlattenTree } from '@hi-ui/tree-utils' import { TreeDataItem, FlattedTreeNodeData } from '../types' const EMPTY_FIELD_NAMES = {} as any + +export const getKey = (fieldNames: any, key: string): string => { + return fieldNames[key] || key +} + /** * 扁平化树数据结构,基于前序遍历 *