From d64074dbc21fc04f6ccb1c2deb0ac1d832b54f77 Mon Sep 17 00:00:00 2001 From: t8y2 <1156263951@qq.com> Date: Wed, 20 May 2026 16:45:35 +0800 Subject: [PATCH] fix(sidebar): preserve searched database children --- apps/desktop/src/lib/sidebarSearchTree.ts | 2 +- packages/app-tests/sidebarSearchTree.test.ts | 30 ++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/apps/desktop/src/lib/sidebarSearchTree.ts b/apps/desktop/src/lib/sidebarSearchTree.ts index a2cba04dd..ed031a4c8 100644 --- a/apps/desktop/src/lib/sidebarSearchTree.ts +++ b/apps/desktop/src/lib/sidebarSearchTree.ts @@ -1,7 +1,7 @@ import type { TreeNode } from "@/types/database"; import { matchSidebarLabel } from "@/lib/sidebarSearch"; -const preserveMatchedSubtreeTypes = new Set(["table", "view"]); +const preserveMatchedSubtreeTypes = new Set(["database", "schema", "table", "view"]); const normalizedLabelCache = new WeakMap(); diff --git a/packages/app-tests/sidebarSearchTree.test.ts b/packages/app-tests/sidebarSearchTree.test.ts index 77fc4d329..dd81d54e0 100644 --- a/packages/app-tests/sidebarSearchTree.test.ts +++ b/packages/app-tests/sidebarSearchTree.test.ts @@ -53,3 +53,33 @@ test("preserves loaded table children when the table itself matches search", () assert.equal(table?.children?.[0]?.label, "tree.columns"); assert.equal(table?.children?.[0]?.children?.[0]?.label, "id"); }); + +test("preserves loaded schema children when the database itself matches search", () => { + const nodes: TreeNode[] = [ + { + id: "conn:hdi", + label: "hdi", + type: "database", + connectionId: "conn", + database: "hdi", + isExpanded: true, + children: [ + { + id: "conn:hdi:public", + label: "public", + type: "schema", + connectionId: "conn", + database: "hdi", + schema: "public", + isExpanded: false, + children: [], + }, + ], + }, + ]; + + const filtered = filterSidebarTree(nodes, "hdi", new Set()); + + assert.equal(filtered[0]?.label, "hdi"); + assert.equal(filtered[0]?.children?.[0]?.label, "public"); +});