diff --git a/apps/web/src/app/admin-console/organizations/collections/utils/collection-utils.ts b/apps/web/src/app/admin-console/organizations/collections/utils/collection-utils.ts index 67cb4c7cdc8..33325b3a4bd 100644 --- a/apps/web/src/app/admin-console/organizations/collections/utils/collection-utils.ts +++ b/apps/web/src/app/admin-console/organizations/collections/utils/collection-utils.ts @@ -5,6 +5,7 @@ import { CollectionView, NestingDelimiter, } from "@bitwarden/admin-console/common"; +import { OrganizationId } from "@bitwarden/common/types/guid"; import { TreeNode } from "@bitwarden/common/vault/models/domain/tree-node"; import { ServiceUtils } from "@bitwarden/common/vault/service-utils"; @@ -26,15 +27,21 @@ export function getNestedCollectionTree( .sort((a, b) => a.name.localeCompare(b.name)) .map(cloneCollection); - const nodes: TreeNode[] = []; - clonedCollections.forEach((collection) => { - const parts = - collection.name != null - ? collection.name.replace(/^\/+|\/+$/g, "").split(NestingDelimiter) - : []; - ServiceUtils.nestedTraverse(nodes, 0, parts, collection, null, NestingDelimiter); + const all: TreeNode[] = []; + const groupedByOrg = new Map(); + clonedCollections.map((c) => { + const key = c.organizationId; + (groupedByOrg.get(key) ?? groupedByOrg.set(key, []).get(key)!).push(c); }); - return nodes; + for (const group of groupedByOrg.values()) { + const nodes: TreeNode[] = []; + for (const c of group) { + const parts = c.name ? c.name.replace(/^\/+|\/+$/g, "").split(NestingDelimiter) : []; + ServiceUtils.nestedTraverse(nodes, 0, parts, c, undefined, NestingDelimiter); + } + all.push(...nodes); + } + return all; } export function cloneCollection(collection: CollectionView): CollectionView;