separate schema selector in frontend

This commit is contained in:
Jan Prochazka
2024-09-19 15:19:16 +02:00
parent cb7224ac94
commit 4431d08a88
14 changed files with 90 additions and 37 deletions

View File

@@ -3,6 +3,7 @@ import { currentDatabase, getCurrentDatabase, getLockedDatabaseMode, openedTabs
import { shouldShowTab } from '../tabpanel/TabsPanel.svelte';
import { callWhenAppLoaded, getAppLoaded } from './appLoadManager';
import { getConnectionInfo } from './metadataLoaders';
import { switchCurrentDatabase } from './common';
let lastCurrentTab = null;
@@ -20,7 +21,7 @@ openedTabs.subscribe(value => {
if (conid && database && (conid != lastTab?.props?.conid || database != lastTab?.props?.database)) {
const doWork = async () => {
const connection = await getConnectionInfo({ conid });
currentDatabase.set({
switchCurrentDatabase({
connection,
name: database,
});

View File

@@ -1,5 +1,7 @@
import { getOpenedTabs, openedTabs } from '../stores';
import { findDefaultSchema, findEngineDriver, isCompositeDbName } from 'dbgate-tools';
import { currentDatabase, getExtensions, getOpenedTabs, openedTabs } from '../stores';
import _ from 'lodash';
import { getSchemaList } from './metadataLoaders';
export class LoadingToken {
isCanceled = false;
@@ -82,3 +84,21 @@ export function isCtrlOrCommandKey(event) {
}
return event.ctrlKey;
}
export async function switchCurrentDatabase(data) {
if (data?.connection?.useSeparateSchemas && !isCompositeDbName(data.name)) {
const conid = data.connection._id;
const database = data.name;
const storageKey = `selected-schema-${conid}-${database}`;
const schemaInStorage = localStorage.getItem(storageKey);
const schemas = await getSchemaList({ conid, database });
const driver = findEngineDriver(data.connection, getExtensions());
const defaultSchema = findDefaultSchema(schemas, driver?.dialect, schemaInStorage);
currentDatabase.set({
...data,
name: `${data.name}::${defaultSchema}`,
});
} else {
currentDatabase.set(data);
}
}

View File

@@ -12,6 +12,7 @@ import { SAVED_FILE_HANDLERS } from '../appobj/SavedFileAppObject.svelte';
import _ from 'lodash';
import ErrorMessageModal from '../modals/ErrorMessageModal.svelte';
import { openImportExportTab } from './importExportTools';
import { switchCurrentDatabase } from './common';
export function canOpenByElectron(file, extensions) {
if (!file) return false;
@@ -38,7 +39,7 @@ export async function openSqliteFile(filePath) {
singleDatabase: true,
defaultDatabase,
});
currentDatabase.set({
switchCurrentDatabase({
connection: resp,
name: getDatabaseFileLabel(filePath),
});