diff --git a/packages/frontend-2/components/viewer/models/Panel.vue b/packages/frontend-2/components/viewer/models/Panel.vue index d247047db..1c31856a3 100644 --- a/packages/frontend-2/components/viewer/models/Panel.vue +++ b/packages/frontend-2/components/viewer/models/Panel.vue @@ -352,12 +352,16 @@ const handleSelectionChange = useDebounceFn( if (containsObject) { expandedModels.value.add(model.id) - expandNodesToShowObject( + + const result = expandNodesToShowObject( modelRootNodes, selectedObj.id, model.id, expandedNodes.value ) + if (result.found && result.nodesToExpand.length > 0) { + result.nodesToExpand.forEach((nodeId) => expandedNodes.value.add(nodeId)) + } scrollToSelectedItem(selectedObj.id) break diff --git a/packages/frontend-2/lib/viewer/composables/tree.ts b/packages/frontend-2/lib/viewer/composables/tree.ts index aa02f8d0a..dbc1cff19 100644 --- a/packages/frontend-2/lib/viewer/composables/tree.ts +++ b/packages/frontend-2/lib/viewer/composables/tree.ts @@ -419,22 +419,26 @@ export function useTreeManagement() { modelId: string, expandedNodes: Set, depth = 0 - ): boolean => { - if (!nodes?.length || depth > MAX_EXPANSION_DEPTH) return false + ): { found: boolean; nodesToExpand: string[] } => { + if (!nodes?.length || depth > MAX_EXPANSION_DEPTH) + return { found: false, nodesToExpand: [] } - return nodes.some((node) => { + const nodesToExpand: string[] = [] + + const found = nodes.some((node) => { if (node.raw?.id === objectId) return true if (node.children?.length) { - const found = expandNodesToShowObject( + const result = expandNodesToShowObject( node.children, objectId, modelId, expandedNodes, depth + 1 ) - if (found) { - if (node.raw?.id) expandedNodes.add(node.raw.id) + if (result.found) { + if (node.raw?.id) nodesToExpand.push(node.raw.id) + nodesToExpand.push(...result.nodesToExpand) // Handle array collections const speckleData = node.raw @@ -449,7 +453,7 @@ export function useTreeManagement() { if (isReferencedIdArray(val)) { const ids = new Set(val.map((ref) => ref.referencedId)) if (node.children?.some((child) => ids.has(child.raw?.id as string))) { - expandedNodes.add(k) + nodesToExpand.push(k) } } }) @@ -459,6 +463,8 @@ export function useTreeManagement() { } return false }) + + return { found, nodesToExpand } } return {