From e7f9b94356c76eeb37608272c6320dde92a396c0 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 18 Mar 2021 10:48:26 +0100 Subject: [PATCH] core-api: remove duplicate element check during traversal Signed-off-by: Patrik Oldsberg --- .changeset/cold-birds-attack.md | 5 +++++ packages/core-api/src/extensions/traversal.ts | 9 --------- .../core-api/src/routing/collectors.test.tsx | 20 ------------------- 3 files changed, 5 insertions(+), 29 deletions(-) create mode 100644 .changeset/cold-birds-attack.md diff --git a/.changeset/cold-birds-attack.md b/.changeset/cold-birds-attack.md new file mode 100644 index 0000000000000..95990c509794f --- /dev/null +++ b/.changeset/cold-birds-attack.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-api': patch +--- + +Allow elements to be used multiple times in the app element tree. diff --git a/packages/core-api/src/extensions/traversal.ts b/packages/core-api/src/extensions/traversal.ts index bdf02d16c8721..4431bbd24c113 100644 --- a/packages/core-api/src/extensions/traversal.ts +++ b/packages/core-api/src/extensions/traversal.ts @@ -37,7 +37,6 @@ export function traverseElementTree(options: { discoverers: Discoverer[]; collectors: { [name in keyof Results]: Collector }; }): Results { - const visited = new Set(); const collectors: { [name in string]: ReturnType>; } = {}; @@ -74,14 +73,6 @@ export function traverseElementTree(options: { if (!isValidElement(element)) { return; } - if (visited.has(element)) { - const anyType = element?.type as - | { displayName?: string; name?: string } - | undefined; - const name = anyType?.displayName || anyType?.name || String(anyType); - throw new Error(`Visited element ${name} twice`); - } - visited.add(element); const nextContexts: QueueItem['contexts'] = {}; diff --git a/packages/core-api/src/routing/collectors.test.tsx b/packages/core-api/src/routing/collectors.test.tsx index 44d53856b4d3f..cd3e378fffafc 100644 --- a/packages/core-api/src/routing/collectors.test.tsx +++ b/packages/core-api/src/routing/collectors.test.tsx @@ -353,24 +353,4 @@ describe('discovery', () => { }); }).toThrow('Mounted routable extension must have a path'); }); - - it('should not visit the same element twice', () => { - const element = ; - - expect(() => - traverseElementTree({ - root: ( - - {element} - {element} - - ), - discoverers: [childDiscoverer, routeElementDiscoverer], - collectors: { - routes: routePathCollector, - routeParents: routeParentCollector, - }, - }), - ).toThrow(`Visited element Extension(Component) twice`); - }); });