Skip to content

Commit 2c81d42

Browse files
committed
fix: ensure the same key and value in the tree data
1 parent cdf7317 commit 2c81d42

4 files changed

Lines changed: 47 additions & 5 deletions

File tree

.changeset/fair-pianos-rule.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
'@modelscope-studio/antd': patch
3+
'@modelscope-studio/frontend': patch
4+
'modelscope_studio': patch
5+
---
6+
7+
fix: ensure the same key and value in the tree data

frontend/antd/tree-select/tree-select.tsx

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,22 @@ export const TreeSelect = sveltify<
6969
treeData ||
7070
renderItems<NonNullable<TreeSelectProps['treeData']>[number]>(
7171
resolvedSlotItems,
72-
{ clone: true }
72+
{
73+
clone: true,
74+
itemPropsTransformer: (itemProps) => {
75+
if (
76+
itemProps.value &&
77+
itemProps.key &&
78+
itemProps.value !== itemProps.key
79+
) {
80+
return {
81+
...itemProps,
82+
key: undefined,
83+
};
84+
}
85+
return itemProps;
86+
},
87+
}
7388
),
7489
dropdownRender: slots.dropdownRender
7590
? renderParamsSlot({ slots, setSlotParams, key: 'dropdownRender' })
@@ -132,6 +147,7 @@ export const TreeSelect = sveltify<
132147
treeData,
133148
treeTitleRenderFunction,
134149
]);
150+
135151
return (
136152
<>
137153
<div style={{ display: 'none' }}>{children}</div>

frontend/antd/tree/tree.tsx

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,19 @@ export const Tree = sveltify<
6565
resolvedSlotItems,
6666
{
6767
clone: true,
68+
itemPropsTransformer: (itemProps) => {
69+
if (
70+
itemProps.value &&
71+
itemProps.key &&
72+
itemProps.value !== itemProps.key
73+
) {
74+
return {
75+
...itemProps,
76+
key: undefined,
77+
};
78+
}
79+
return itemProps;
80+
},
6881
}
6982
),
7083
showLine: slots['showLine.showLeafIcon']

frontend/utils/renderItems.tsx

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export function renderItems<R>(
1212
fallback?: (item: any) => R;
1313
clone?: boolean;
1414
forceClone?: boolean;
15+
itemPropsTransformer?: (props: Record<string, any>) => Record<string, any>;
1516
},
1617
key?: React.Key
1718
): undefined | R[] {
@@ -26,10 +27,15 @@ export function renderItems<R>(
2627
}
2728
return item;
2829
}
29-
const result = {
30-
...item.props,
31-
key: item.props?.key ?? (key ? `${key}-${i}` : `${i}`),
32-
};
30+
const result = options?.itemPropsTransformer
31+
? options?.itemPropsTransformer({
32+
...item.props,
33+
key: item.props?.key ?? (key ? `${key}-${i}` : `${i}`),
34+
})
35+
: {
36+
...item.props,
37+
key: item.props?.key ?? (key ? `${key}-${i}` : `${i}`),
38+
};
3339

3440
let current = result;
3541
Object.keys(item.slots).forEach((slotKey) => {

0 commit comments

Comments
 (0)