diff --git a/packages/editor-ui/src/composables/useDataSchema.test.ts b/packages/editor-ui/src/composables/useDataSchema.test.ts index 212f767675..b98290e135 100644 --- a/packages/editor-ui/src/composables/useDataSchema.test.ts +++ b/packages/editor-ui/src/composables/useDataSchema.test.ts @@ -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); + }); }); diff --git a/packages/editor-ui/src/composables/useDataSchema.ts b/packages/editor-ui/src/composables/useDataSchema.ts index 8896f8dd7e..9b06485713 100644 --- a/packages/editor-ui/src/composables/useDataSchema.ts +++ b/packages/editor-ui/src/composables/useDataSchema.ts @@ -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,