fix(editor): SchemaView renders duplicate structures properly (#12943)

This commit is contained in:
Raúl Gómez Morales 2025-01-30 15:15:03 +01:00 committed by GitHub
parent 6258f0c9dd
commit 0d8a544975
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 28 additions and 3 deletions

View file

@ -684,4 +684,27 @@ describe('useFlattenSchema', () => {
}).length,
).toBe(3);
});
it('items ids should be unique', () => {
const { flattenSchema } = useFlattenSchema();
const schema: Schema = {
path: '',
type: 'object',
value: [
{
key: 'index',
type: 'number',
value: '0',
path: '.index',
},
],
};
const node1 = { name: 'First Node', type: 'any' };
const node2 = { name: 'Second Node', type: 'any' };
const node1Schema = flattenSchema({ schema, node: node1, depth: 1 });
const node2Schema = flattenSchema({ schema, node: node2, depth: 1 });
expect(node1Schema[0].id).not.toBe(node2Schema[0].id);
});
});

View file

@ -282,6 +282,8 @@ export const useFlattenSchema = () => {
path: schema.path,
});
const id = `${node.name}-${expression}`;
if (Array.isArray(schema.value)) {
const items: RenderItem[] = [];
@ -293,14 +295,14 @@ export const useFlattenSchema = () => {
depth,
level,
icon: getIconBySchemaType(schema.type),
id: expression,
id,
collapsable: true,
nodeType: node.type,
type: 'item',
});
}
if (closedNodes.value.has(expression)) {
if (closedNodes.value.has(id)) {
return items;
}
@ -327,7 +329,7 @@ export const useFlattenSchema = () => {
level,
depth,
value: shorten(schema.value, 600, 0),
id: expression,
id,
icon: getIconBySchemaType(schema.type),
collapsable: false,
nodeType: node.type,