From 1cd358f3c1b771edad1f2d11618919532d48a4cf Mon Sep 17 00:00:00 2001 From: t8y2 <1156263951@qq.com> Date: Sun, 10 May 2026 14:43:49 +0800 Subject: [PATCH] fix(sidebar): allow collapsing search results --- src/components/sidebar/ConnectionTree.vue | 17 ++++++++++++++++- src/components/sidebar/TreeItem.vue | 3 +++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/components/sidebar/ConnectionTree.vue b/src/components/sidebar/ConnectionTree.vue index 128657d7b4..dfd32f3e39 100644 --- a/src/components/sidebar/ConnectionTree.vue +++ b/src/components/sidebar/ConnectionTree.vue @@ -21,6 +21,7 @@ const store = useConnectionStore(); const searchQuery = ref(""); const deferredSearchQuery = ref(""); const selectedTypes = ref([]); +const searchCollapsedIds = ref>(new Set()); let searchTimer: number | undefined; watch( @@ -41,6 +42,7 @@ watch( { flush: "sync" }, ); +const isSearching = computed(() => !!deferredSearchQuery.value); const isFiltering = computed(() => !!searchQuery.value.trim() || hasTypeFilter.value); const typeStats = computed(() => { @@ -100,7 +102,11 @@ function filterTree(nodes: TreeNode[], q: string): TreeNode[] { filteredNodes.push(node); } else { const children = filteredChildren ?? []; - filteredNodes.push({ ...node, children, isExpanded: children.length > 0 }); + filteredNodes.push({ + ...node, + children, + isExpanded: children.length > 0 && !searchCollapsedIds.value.has(node.id), + }); } } } @@ -145,6 +151,14 @@ function createNewGroup() { const groupId = store.createConnectionGroup(t("connectionGroup.newGroupDefault")); pendingRenameGroupId.value = groupId; } + +function onSearchToggle(node: TreeNode) { + if (!isSearching.value || !node.children) return; + const next = new Set(searchCollapsedIds.value); + if (node.isExpanded) next.add(node.id); + else next.delete(node.id); + searchCollapsedIds.value = next; +}