From 9b086ed349f1bf0c77cfaaa4718ab7f9516c641e Mon Sep 17 00:00:00 2001 From: Ryan Willis Date: Fri, 26 Jun 2026 17:36:05 -0700 Subject: [PATCH] fix(sidebar): deduplicate repeated workspace IDs --- .../project-navigation-sidebar-utils.test.ts | 11 +++++++++++ .../project-navigation-sidebar-utils.ts | 11 ++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/packages/insomnia/src/ui/components/sidebar/project-navigation-sidebar/project-navigation-sidebar-utils.test.ts b/packages/insomnia/src/ui/components/sidebar/project-navigation-sidebar/project-navigation-sidebar-utils.test.ts index aa63c2995287..dcaa761a4a7a 100644 --- a/packages/insomnia/src/ui/components/sidebar/project-navigation-sidebar/project-navigation-sidebar-utils.test.ts +++ b/packages/insomnia/src/ui/components/sidebar/project-navigation-sidebar/project-navigation-sidebar-utils.test.ts @@ -410,6 +410,17 @@ describe('flattenCollectionChildren', () => { expect(childIds).toEqual(['req_first', 'req_mid', 'req_last']); }); + + it('de-duplicates documents sharing the same _id', () => { + const data: AllRequestsAndMetaInWorkspace = { + allRequests: [mkReq('req_dup', WS), mkReq('req_dup', WS), mkReq('req_unique', WS)], + allRequestMetas: [], + requestGroupMetas: [], + }; + const ids = flattenCollectionChildren(WS, false, data).map(c => c.doc._id); + + expect(ids.sort()).toEqual(['req_dup', 'req_unique']); + }); }); // ── filterCollection ─────────────────────────────────────────────────────── diff --git a/packages/insomnia/src/ui/components/sidebar/project-navigation-sidebar/project-navigation-sidebar-utils.ts b/packages/insomnia/src/ui/components/sidebar/project-navigation-sidebar/project-navigation-sidebar-utils.ts index 528e475ad8d8..3410ce4beb5e 100644 --- a/packages/insomnia/src/ui/components/sidebar/project-navigation-sidebar/project-navigation-sidebar-utils.ts +++ b/packages/insomnia/src/ui/components/sidebar/project-navigation-sidebar/project-navigation-sidebar-utils.ts @@ -212,9 +212,18 @@ export function flattenCollectionChildren( const { isRequestGroup } = models.requestGroup; const collection: Child[] = []; + const seenIds = new Set(); + const uniqueRequests = allRequests.filter(doc => { + if (seenIds.has(doc._id)) { + return false; + } + seenIds.add(doc._id); + return true; + }); + // map of parentId to its direct children requests and request groups const requestsByParentId = new Map(); - for (const req of allRequests) { + for (const req of uniqueRequests) { const allRequestsByParentId = requestsByParentId.get(req.parentId); if (allRequestsByParentId) { allRequestsByParentId.push(req);