diff --git a/packages/api/env/singledb/.env b/packages/api/env/singledb/.env index a119453b4..a48964741 100644 --- a/packages/api/env/singledb/.env +++ b/packages/api/env/singledb/.env @@ -12,6 +12,6 @@ DBCONFIG_mysql=[{"name":"Chinook","connectionColor":"cyan"}] SINGLE_CONNECTION=mysql -SINGLE_DATABASE=Chinook +# SINGLE_DATABASE=Chinook PERMISSIONS=files/charts/read diff --git a/packages/web/src/widgets/SingleConnectionDatabaseList.svelte b/packages/web/src/widgets/SingleConnectionDatabaseList.svelte index 106e661f2..2123719ad 100644 --- a/packages/web/src/widgets/SingleConnectionDatabaseList.svelte +++ b/packages/web/src/widgets/SingleConnectionDatabaseList.svelte @@ -5,28 +5,90 @@ import WidgetsInnerContainer from './WidgetsInnerContainer.svelte'; import SearchBoxWrapper from '../elements/SearchBoxWrapper.svelte'; import SubDatabaseList from '../appobj/SubDatabaseList.svelte'; - import { openedConnections } from '../stores'; - import { useConnectionColorFactory } from '../utility/useConnectionColor'; import FontIcon from '../icons/FontIcon.svelte'; import CloseSearchButton from '../buttons/CloseSearchButton.svelte'; import { apiCall } from '../utility/api'; + import AppObjectListHandler from './AppObjectListHandler.svelte'; + import { useDatabaseList } from '../utility/metadataLoaders'; + import { filterName } from 'dbgate-tools'; + import { currentDatabase, focusedConnectionOrDatabase, getFocusedConnectionOrDatabase } from '../stores'; + import { switchCurrentDatabase } from '../utility/common'; export let connection; let filter = ''; + let domListHandler; + let domContainer = null; + let domFilter = null; + + $: databases = useDatabaseList({ conid: connection?._id }); + const handleRefreshDatabases = () => { apiCall('server-connections/refresh', { conid: connection._id }); }; + + function getFocusFlatList() { + const res = []; + for (const db of $databases) { + if (!filterName(filter, db.name)) { + continue; + } + + res.push({ + connection, + conid: connection._id, + database: db.name, + }); + } + + return res; + } - + { + domListHandler?.focusFirst(); + }} + /> - + o1?.conid == o2?.conid && o1?.database == o2?.database} + getDefaultFocusedItem={() => + $currentDatabase + ? { + conid: $currentDatabase?.connection?._id, + database: $currentDatabase?.name, + connection: $currentDatabase?.connection, + } + : null} + onScrollTop={() => { + domContainer?.scrollTop(); + }} + onFocusFilterBox={text => { + domFilter?.focus(text); + }} + handleObjectClick={(data, options) => { + if (data.database) { + if (options.focusTab) { + switchCurrentDatabase({ connection: data.connection, name: data.database }); + } + } + }} + > + +