From 0a239bddb2923a71a7d4fa98bc8fec5883474df3 Mon Sep 17 00:00:00 2001 From: Elias <45232878+mapan0424@users.noreply.github.com> Date: Mon, 31 Aug 2026 09:02:29 +0800 Subject: [PATCH] feat(xugu): mark public synonym scope in sidebar --- apps/desktop/src/components/sidebar/TreeItem.vue | 6 +++++- .../sidebar/__tests__/xuguPublicSynonymActions.spec.ts | 6 ++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/apps/desktop/src/components/sidebar/TreeItem.vue b/apps/desktop/src/components/sidebar/TreeItem.vue index 114609a7f..8e84adfcc 100644 --- a/apps/desktop/src/components/sidebar/TreeItem.vue +++ b/apps/desktop/src/components/sidebar/TreeItem.vue @@ -78,6 +78,7 @@ import { focusSidebarRenameInput } from "@/lib/sidebar/sidebarRenameFocus"; import { ensureSqlExtension, stripSqlExtension } from "@/lib/savedSql/savedSqlFileName"; import { savedSqlErrorMessage } from "@/lib/savedSql/savedSqlErrors"; import { useSavedSqlStore } from "@/stores/savedSqlStore"; +import { isXuguPublicSynonymTreeNode } from "@/lib/sidebar/xuguPublicSynonyms"; // --- Drag and Drop --- import { useDragSort } from "@/composables/useDragSort"; import { sidebarTreeRuntimeKey } from "@/lib/sidebar/sidebarTreeRuntime"; @@ -235,8 +236,11 @@ function getIconInfo(node: TreeNode): { icon: any; colorClass: string } | null { return { icon: Database, colorClass: "text-yellow-500" }; case "linked-server-schema": return { icon: FolderOpen, colorClass: "text-sky-400" }; - case "schema": + case "schema": { + const databaseType = node.connectionId ? effectiveDatabaseTypeForConnection(connectionStore.getConfig(node.connectionId)) : undefined; + if (isXuguPublicSynonymTreeNode(databaseType, node.type, node.schema)) return { icon: Link2, colorClass: "text-sky-500" }; return { icon: FolderOpen, colorClass: "text-sky-400" }; + } case "table": return { icon: Table, colorClass: "text-green-500" }; case "view": diff --git a/apps/desktop/src/components/sidebar/__tests__/xuguPublicSynonymActions.spec.ts b/apps/desktop/src/components/sidebar/__tests__/xuguPublicSynonymActions.spec.ts index da44198d7..624cd076a 100644 --- a/apps/desktop/src/components/sidebar/__tests__/xuguPublicSynonymActions.spec.ts +++ b/apps/desktop/src/components/sidebar/__tests__/xuguPublicSynonymActions.spec.ts @@ -3,6 +3,7 @@ import { fileURLToPath } from "node:url"; import { describe, expect, it } from "vitest"; const runtimeSource = readFileSync(fileURLToPath(new URL("../SidebarTreeRuntimeHost.vue", import.meta.url)), "utf8"); +const treeItemSource = readFileSync(fileURLToPath(new URL("../TreeItem.vue", import.meta.url)), "utf8"); function functionSource(name: string): string { const start = runtimeSource.indexOf(`function ${name}(`); @@ -25,4 +26,9 @@ describe("Xugu public synonym actions", () => { expect(functionSource("dropSchema")).toContain("isXuguPublicSynonymTreeNode"); expect(functionSource("confirmDropSchema")).toContain("isXuguPublicSynonymTreeNode"); }); + + it("uses a distinct link icon for the database-global synonym scope", () => { + expect(treeItemSource).toContain("isXuguPublicSynonymTreeNode(databaseType, node.type, node.schema)"); + expect(treeItemSource).toContain('return { icon: Link2, colorClass: "text-sky-500" }'); + }); });