Files
dbgate/packages/web/src/utility/changeCurrentDbByTab.ts
2023-03-04 10:39:57 +01:00

52 lines
1.6 KiB
TypeScript

import _ from 'lodash';
import { currentDatabase, getCurrentDatabase, getLockedDatabaseMode, openedTabs } from '../stores';
import { shouldShowTab } from '../tabpanel/TabsPanel.svelte';
import { callWhenAppLoaded, getAppLoaded } from './appLoadManager';
import { getConnectionInfo } from './metadataLoaders';
let lastCurrentTab = null;
openedTabs.subscribe(value => {
const newCurrentTab = (value || []).find(x => x.selected);
if (newCurrentTab == lastCurrentTab) return;
if (getLockedDatabaseMode() && getCurrentDatabase()) return;
const lastTab = lastCurrentTab;
lastCurrentTab = newCurrentTab;
// if (lastTab?.tabComponent == 'ConnectionTab') return;
if (newCurrentTab) {
const { conid, database } = newCurrentTab.props || {};
if (conid && database && (conid != lastTab?.props?.conid || database != lastTab?.props?.database)) {
const doWork = async () => {
const connection = await getConnectionInfo({ conid });
currentDatabase.set({
connection,
name: database,
});
};
callWhenAppLoaded(doWork);
}
}
});
currentDatabase.subscribe(currentDb => {
if (!getLockedDatabaseMode()) return;
if (!currentDb && !getAppLoaded()) return;
openedTabs.update(tabs => {
const newTabs = tabs.map(tab => ({
...tab,
selected: tab.selected && shouldShowTab(tab, true, currentDb),
}));
if (newTabs.find(x => x.selected)) return newTabs;
const selectedIndex = _.findLastIndex(newTabs, x => shouldShowTab(x));
return newTabs.map((x, index) => ({
...x,
selected: index == selectedIndex,
}));
});
});