mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-24 06:06:00 +00:00
single connection mode list handler
This commit is contained in:
2
packages/api/env/singledb/.env
vendored
2
packages/api/env/singledb/.env
vendored
@@ -12,6 +12,6 @@ DBCONFIG_mysql=[{"name":"Chinook","connectionColor":"cyan"}]
|
|||||||
|
|
||||||
|
|
||||||
SINGLE_CONNECTION=mysql
|
SINGLE_CONNECTION=mysql
|
||||||
SINGLE_DATABASE=Chinook
|
# SINGLE_DATABASE=Chinook
|
||||||
|
|
||||||
PERMISSIONS=files/charts/read
|
PERMISSIONS=files/charts/read
|
||||||
|
|||||||
@@ -5,28 +5,90 @@
|
|||||||
import WidgetsInnerContainer from './WidgetsInnerContainer.svelte';
|
import WidgetsInnerContainer from './WidgetsInnerContainer.svelte';
|
||||||
import SearchBoxWrapper from '../elements/SearchBoxWrapper.svelte';
|
import SearchBoxWrapper from '../elements/SearchBoxWrapper.svelte';
|
||||||
import SubDatabaseList from '../appobj/SubDatabaseList.svelte';
|
import SubDatabaseList from '../appobj/SubDatabaseList.svelte';
|
||||||
import { openedConnections } from '../stores';
|
|
||||||
import { useConnectionColorFactory } from '../utility/useConnectionColor';
|
|
||||||
import FontIcon from '../icons/FontIcon.svelte';
|
import FontIcon from '../icons/FontIcon.svelte';
|
||||||
import CloseSearchButton from '../buttons/CloseSearchButton.svelte';
|
import CloseSearchButton from '../buttons/CloseSearchButton.svelte';
|
||||||
import { apiCall } from '../utility/api';
|
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;
|
export let connection;
|
||||||
|
|
||||||
let filter = '';
|
let filter = '';
|
||||||
|
|
||||||
|
let domListHandler;
|
||||||
|
let domContainer = null;
|
||||||
|
let domFilter = null;
|
||||||
|
|
||||||
|
$: databases = useDatabaseList({ conid: connection?._id });
|
||||||
|
|
||||||
const handleRefreshDatabases = () => {
|
const handleRefreshDatabases = () => {
|
||||||
apiCall('server-connections/refresh', { conid: connection._id });
|
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;
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<SearchBoxWrapper>
|
<SearchBoxWrapper>
|
||||||
<SearchInput placeholder="Search connection or database" bind:value={filter} />
|
<SearchInput
|
||||||
|
placeholder="Search connection or database"
|
||||||
|
bind:value={filter}
|
||||||
|
bind:this={domFilter}
|
||||||
|
onFocusFilteredList={() => {
|
||||||
|
domListHandler?.focusFirst();
|
||||||
|
}}
|
||||||
|
/>
|
||||||
<CloseSearchButton bind:filter />
|
<CloseSearchButton bind:filter />
|
||||||
<InlineButton on:click={handleRefreshDatabases} title="Refresh database list">
|
<InlineButton on:click={handleRefreshDatabases} title="Refresh database list">
|
||||||
<FontIcon icon="icon refresh" />
|
<FontIcon icon="icon refresh" />
|
||||||
</InlineButton>
|
</InlineButton>
|
||||||
</SearchBoxWrapper>
|
</SearchBoxWrapper>
|
||||||
<WidgetsInnerContainer>
|
<WidgetsInnerContainer>
|
||||||
|
<AppObjectListHandler
|
||||||
|
bind:this={domListHandler}
|
||||||
|
list={getFocusFlatList}
|
||||||
|
selectedObjectStore={focusedConnectionOrDatabase}
|
||||||
|
getSelectedObject={getFocusedConnectionOrDatabase}
|
||||||
|
selectedObjectMatcher={(o1, o2) => 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 });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
>
|
||||||
<SubDatabaseList data={connection} {filter} passProps={{}} />
|
<SubDatabaseList data={connection} {filter} passProps={{}} />
|
||||||
|
</AppObjectListHandler>
|
||||||
</WidgetsInnerContainer>
|
</WidgetsInnerContainer>
|
||||||
|
|||||||
Reference in New Issue
Block a user