feat(connection): select new databases when visible

This commit is contained in:
二丫讲梵 authored and GitHub committed 2026-07-08 22:51:45 +08:00
1 parent 08067320f8
commit 843babf522
4 files changed
+32 -1

No files matched your search

@@ -2989,6 +2989,7 @@ async function createDuckDbAttachedDatabaseFile() {
attached_databases: [...(config.attached_databases ?? []), { name, path }],
});
}
await connectionStore.ensureVisibleDatabase(node.connectionId, name);
await connectionStore.loadDatabases(node.connectionId, { force: true });
connectionStore.selectedTreeNodeId = `${node.connectionId}:${name}`;
toast(t("contextMenu.createDuckDbFileSuccess", { name }), 3000);
@@ -3008,6 +3009,7 @@ async function confirmCreateDatabase() {
if (config?.db_type === "mongodb") {
await api.mongoCreateDatabase(node.connectionId, name);
toast(t("contextMenu.createDatabaseSuccess", { name }), 3000);
await connectionStore.ensureVisibleDatabase(node.connectionId, name);
await connectionStore.loadMongoDatabases(node.connectionId);
return;
}
@@ -3021,6 +3023,7 @@ async function confirmCreateDatabase() {
});
await api.executeQuery(node.connectionId, "", sql);
toast(t("contextMenu.createDatabaseSuccess", { name }), 3000);
await connectionStore.ensureVisibleDatabase(node.connectionId, name);
await connectionStore.loadDatabases(node.connectionId, { force: true });
} catch (e: any) {
toast(t("contextMenu.tableOperationFailed", { message: e?.message || String(e) }), 5000);
@@ -25,6 +25,13 @@ export function initialVisibleDatabaseSelection(databaseNames: string[], visible
return filterDatabaseNamesForVisiblePicker(databaseNames, connection);
}
export function appendVisibleDatabaseSelection(visibleDatabases: string[] | undefined, databaseName: string): string[] | undefined {
if (!Array.isArray(visibleDatabases)) return undefined;
const name = databaseName.trim();
if (!name || visibleDatabases.includes(name)) return visibleDatabases;
return [...visibleDatabases, name];
}
export function visibleDatabaseSelectionIsStale(previous: VisibleDatabaseConnectionFields, current: VisibleDatabaseConnectionFields): boolean {
return visibleDatabaseFingerprint(previous) !== visibleDatabaseFingerprint(current);
}
@@ -61,6 +61,7 @@ import { kvRootNodeLabel } from "@/lib/kv/kvRootPresentation";
import { REDIS_SCAN_PAGE_SIZE_DEFAULT } from "@/lib/redis/redisKeyPattern";
import { appendAgentDriverUpdateHint, hasAgentDriverUpdate, type AgentDriverInstallState } from "@/lib/connection/agentDriverInstallHint";
import { appendConnectionErrorHints } from "@/lib/connection/connectionErrorHints";
import { appendVisibleDatabaseSelection } from "@/lib/connection/connectionVisibleDatabases";
import { createMetadataLoadTrace, logMetadataLoadTrace, MetadataLoadCoordinator, type MetadataLoadTraceLogger } from "@/lib/metadata/metadataLoadCoordinator";
import type { MetadataScopeInput } from "@/lib/metadata/metadataLoadScope";
import { MetadataResultCache, type MetadataCacheInvalidation } from "@/lib/metadata/metadataResultCache";
@@ -1637,6 +1638,14 @@ export const useConnectionStore = defineStore("connection", () => {
await reloadConnectionDatabaseChildren(connectionId);
}
async function ensureVisibleDatabase(connectionId: string, databaseName: string) {
const config = getConfig(connectionId);
if (!config) return;
const visibleDatabases = appendVisibleDatabaseSelection(config.visible_databases, databaseName);
if (visibleDatabases === config.visible_databases) return;
await updateVisibleDatabasesConfig(connectionId, visibleDatabases);
}
async function updateVisibleDatabasesConfig(connectionId: string, visibleDatabases: string[] | undefined) {
const idx = connections.value.findIndex((connection) => connection.id === connectionId);
if (idx < 0) return;
@@ -4776,6 +4785,7 @@ export const useConnectionStore = defineStore("connection", () => {
isDefaultDatabase,
setVisibleDatabases,
clearVisibleDatabases,
ensureVisibleDatabase,
setVisibleSchemas,
clearVisibleSchemas,
removeConnection,