From 39b5953eedd15164a94967c58fc4db6c5ac54ce8 Mon Sep 17 00:00:00 2001 From: Preston Ford Date: Sun, 23 Nov 2025 19:36:59 -0700 Subject: [PATCH 1/2] fix(VTreeview): automatically expand filtered items' ancestors fixes #22035 --- .../src/components/VTreeview/VTreeview.tsx | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/packages/vuetify/src/components/VTreeview/VTreeview.tsx b/packages/vuetify/src/components/VTreeview/VTreeview.tsx index d9d5c42f193..aef72a79d73 100644 --- a/packages/vuetify/src/components/VTreeview/VTreeview.tsx +++ b/packages/vuetify/src/components/VTreeview/VTreeview.tsx @@ -8,7 +8,7 @@ import { makeFilterProps, useFilter } from '@/composables/filter' import { useProxiedModel } from '@/composables/proxiedModel' // Utilities -import { computed, provide, ref, toRaw, toRef } from 'vue' +import { computed, provide, ref, toRaw, toRef, watch } from 'vue' import { genericComponent, omit, propsFactory, useRender } from '@/util' // Types @@ -103,6 +103,23 @@ export const VTreeview = genericComponent( })) }) + watch(filteredItems, val => { + if (!search.value) return + const getPath = vListRef.value?.getPath + if (!getPath) return + const filteredItemsAncestors = val.flatMap(item => { + const itemVal = props.returnObject ? item.raw : item.props.value + return getPath(itemVal).slice(0, -1) + }) + const newOpened = new Set([ + ...opened.value, + ...filteredItemsAncestors + ]) + if (opened.value.length !== newOpened.size) { + emit('update:opened', [...newOpened]) + } + }) + function getChildren (id: unknown) { const arr: unknown[] = [] const queue = ((vListRef.value?.children.get(id) ?? []).slice()) From 5c2ee6ec7c47128b27849bbe06b13f3e9e8a1162 Mon Sep 17 00:00:00 2001 From: Preston Ford Date: Tue, 25 Nov 2025 14:18:11 -0700 Subject: [PATCH 2/2] style(VTreeview): add missing trailing comma --- packages/vuetify/src/components/VTreeview/VTreeview.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vuetify/src/components/VTreeview/VTreeview.tsx b/packages/vuetify/src/components/VTreeview/VTreeview.tsx index aef72a79d73..8606c0d2c72 100644 --- a/packages/vuetify/src/components/VTreeview/VTreeview.tsx +++ b/packages/vuetify/src/components/VTreeview/VTreeview.tsx @@ -113,7 +113,7 @@ export const VTreeview = genericComponent( }) const newOpened = new Set([ ...opened.value, - ...filteredItemsAncestors + ...filteredItemsAncestors, ]) if (opened.value.length !== newOpened.size) { emit('update:opened', [...newOpened])