mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-26 00:45:58 +00:00
cloud database content
This commit is contained in:
@@ -1,31 +1,19 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { findEngineDriver } from 'dbgate-tools';
|
|
||||||
import { currentDatabase, extensions, pinnedDatabases, pinnedTables } from '../stores';
|
|
||||||
import { useCloudContentList, useConfig, useConnectionInfo } from '../utility/metadataLoaders';
|
import { useCloudContentList, useConfig, useConnectionInfo } from '../utility/metadataLoaders';
|
||||||
|
|
||||||
import ConnectionList from './ConnectionList.svelte';
|
import ConnectionList from './ConnectionList.svelte';
|
||||||
import PinnedObjectsList from './PinnedObjectsList.svelte';
|
|
||||||
import ErrorInfo from '../elements/ErrorInfo.svelte';
|
|
||||||
import WidgetsInnerContainer from './WidgetsInnerContainer.svelte';
|
|
||||||
|
|
||||||
import WidgetColumnBar from './WidgetColumnBar.svelte';
|
import WidgetColumnBar from './WidgetColumnBar.svelte';
|
||||||
import WidgetColumnBarItem from './WidgetColumnBarItem.svelte';
|
import WidgetColumnBarItem from './WidgetColumnBarItem.svelte';
|
||||||
import SqlObjectList from './SqlObjectList.svelte';
|
|
||||||
import DbKeysTree from './DbKeysTree.svelte';
|
|
||||||
import SingleConnectionDatabaseList from './SingleConnectionDatabaseList.svelte';
|
import SingleConnectionDatabaseList from './SingleConnectionDatabaseList.svelte';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import FocusedConnectionInfoWidget from './FocusedConnectionInfoWidget.svelte';
|
|
||||||
import { _t } from '../translations';
|
import { _t } from '../translations';
|
||||||
|
import DatabaseWidgetDetailContent from './DatabaseWidgetDetailContent.svelte';
|
||||||
|
|
||||||
export let hidden = false;
|
export let hidden = false;
|
||||||
let domSqlObjectList = null;
|
let domSqlObjectList = null;
|
||||||
|
|
||||||
$: conid = $currentDatabase?.connection?._id;
|
|
||||||
$: connection = useConnectionInfo({ conid });
|
|
||||||
$: driver = findEngineDriver($connection, $extensions);
|
|
||||||
$: config = useConfig();
|
$: config = useConfig();
|
||||||
$: singleDatabase = $currentDatabase?.connection?.singleDatabase;
|
|
||||||
$: database = $currentDatabase?.name;
|
|
||||||
$: cloudContentList = useCloudContentList();
|
$: cloudContentList = useCloudContentList();
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@@ -54,66 +42,6 @@
|
|||||||
/>
|
/>
|
||||||
</WidgetColumnBarItem>
|
</WidgetColumnBarItem>
|
||||||
{/if}
|
{/if}
|
||||||
<WidgetColumnBarItem
|
|
||||||
title={_t('widget.pinned', { defaultMessage: 'Pinned' })}
|
|
||||||
name="pinned"
|
|
||||||
height="15%"
|
|
||||||
storageName="pinnedItemsWidget"
|
|
||||||
skip={!_.compact($pinnedDatabases).length &&
|
|
||||||
!$pinnedTables.some(x => x && x.conid == conid && x.database == $currentDatabase?.name)}
|
|
||||||
>
|
|
||||||
<PinnedObjectsList />
|
|
||||||
</WidgetColumnBarItem>
|
|
||||||
|
|
||||||
<WidgetColumnBarItem
|
<DatabaseWidgetDetailContent bind:domSqlObjectList />
|
||||||
title={driver?.databaseEngineTypes?.includes('document')
|
|
||||||
? (driver?.collectionPluralLabel ?? 'Collections/containers')
|
|
||||||
: _t('widget.tablesViewsFunctions', { defaultMessage: 'Tables, views, functions' })}
|
|
||||||
name="dbObjects"
|
|
||||||
storageName="dbObjectsWidget"
|
|
||||||
skip={!(
|
|
||||||
conid &&
|
|
||||||
(database || singleDatabase) &&
|
|
||||||
(driver?.databaseEngineTypes?.includes('sql') || driver?.databaseEngineTypes?.includes('document'))
|
|
||||||
)}
|
|
||||||
>
|
|
||||||
<SqlObjectList {conid} {database} bind:this={domSqlObjectList} />
|
|
||||||
</WidgetColumnBarItem>
|
|
||||||
|
|
||||||
<WidgetColumnBarItem
|
|
||||||
title={_t('widget.keys', { defaultMessage: 'Keys' })}
|
|
||||||
name="dbObjects"
|
|
||||||
storageName="dbObjectsWidget"
|
|
||||||
skip={!(conid && (database || singleDatabase) && driver?.databaseEngineTypes?.includes('keyvalue'))}
|
|
||||||
>
|
|
||||||
<DbKeysTree {conid} {database} treeKeySeparator={$connection?.treeKeySeparator || ':'} />
|
|
||||||
</WidgetColumnBarItem>
|
|
||||||
|
|
||||||
<WidgetColumnBarItem
|
|
||||||
title={_t('widget.databaseContent', { defaultMessage: 'Database content' })}
|
|
||||||
name="dbObjects"
|
|
||||||
storageName="dbObjectsWidget"
|
|
||||||
skip={conid && (database || singleDatabase)}
|
|
||||||
>
|
|
||||||
<WidgetsInnerContainer>
|
|
||||||
<FocusedConnectionInfoWidget {conid} {database} connection={$connection} />
|
|
||||||
|
|
||||||
<ErrorInfo message="Database not selected" icon="img alert" />
|
|
||||||
</WidgetsInnerContainer>
|
|
||||||
</WidgetColumnBarItem>
|
|
||||||
|
|
||||||
<WidgetColumnBarItem
|
|
||||||
title={_t('widget.databaseContent', { defaultMessage: 'Database content' })}
|
|
||||||
name="dbObjects"
|
|
||||||
storageName="dbObjectsWidget"
|
|
||||||
skip={!(conid && (database || singleDatabase) && !driver)}
|
|
||||||
>
|
|
||||||
<WidgetsInnerContainer>
|
|
||||||
<FocusedConnectionInfoWidget {conid} {database} connection={$connection} />
|
|
||||||
|
|
||||||
<ErrorInfo
|
|
||||||
message={_t('error.driverNotFound', { defaultMessage: 'Invalid database connection, driver not found' })}
|
|
||||||
/>
|
|
||||||
</WidgetsInnerContainer>
|
|
||||||
</WidgetColumnBarItem>
|
|
||||||
</WidgetColumnBar>
|
</WidgetColumnBar>
|
||||||
|
|||||||
87
packages/web/src/widgets/DatabaseWidgetDetailContent.svelte
Normal file
87
packages/web/src/widgets/DatabaseWidgetDetailContent.svelte
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import { findEngineDriver } from 'dbgate-tools';
|
||||||
|
import { currentDatabase, extensions, pinnedDatabases, pinnedTables } from '../stores';
|
||||||
|
import { useCloudContentList, useConfig, useConnectionInfo } from '../utility/metadataLoaders';
|
||||||
|
|
||||||
|
import PinnedObjectsList from './PinnedObjectsList.svelte';
|
||||||
|
import ErrorInfo from '../elements/ErrorInfo.svelte';
|
||||||
|
import WidgetsInnerContainer from './WidgetsInnerContainer.svelte';
|
||||||
|
|
||||||
|
import WidgetColumnBarItem from './WidgetColumnBarItem.svelte';
|
||||||
|
import SqlObjectList from './SqlObjectList.svelte';
|
||||||
|
import DbKeysTree from './DbKeysTree.svelte';
|
||||||
|
import _ from 'lodash';
|
||||||
|
import FocusedConnectionInfoWidget from './FocusedConnectionInfoWidget.svelte';
|
||||||
|
import { _t } from '../translations';
|
||||||
|
|
||||||
|
export let domSqlObjectList = null;
|
||||||
|
|
||||||
|
$: conid = $currentDatabase?.connection?._id;
|
||||||
|
$: connection = useConnectionInfo({ conid });
|
||||||
|
$: driver = findEngineDriver($connection, $extensions);
|
||||||
|
$: singleDatabase = $currentDatabase?.connection?.singleDatabase;
|
||||||
|
$: database = $currentDatabase?.name;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<WidgetColumnBarItem
|
||||||
|
title={_t('widget.pinned', { defaultMessage: 'Pinned' })}
|
||||||
|
name="pinned"
|
||||||
|
height="15%"
|
||||||
|
storageName="pinnedItemsWidget"
|
||||||
|
skip={!_.compact($pinnedDatabases).length &&
|
||||||
|
!$pinnedTables.some(x => x && x.conid == conid && x.database == $currentDatabase?.name)}
|
||||||
|
>
|
||||||
|
<PinnedObjectsList />
|
||||||
|
</WidgetColumnBarItem>
|
||||||
|
|
||||||
|
<WidgetColumnBarItem
|
||||||
|
title={driver?.databaseEngineTypes?.includes('document')
|
||||||
|
? (driver?.collectionPluralLabel ?? 'Collections/containers')
|
||||||
|
: _t('widget.tablesViewsFunctions', { defaultMessage: 'Tables, views, functions' })}
|
||||||
|
name="dbObjects"
|
||||||
|
storageName="dbObjectsWidget"
|
||||||
|
skip={!(
|
||||||
|
conid &&
|
||||||
|
(database || singleDatabase) &&
|
||||||
|
(driver?.databaseEngineTypes?.includes('sql') || driver?.databaseEngineTypes?.includes('document'))
|
||||||
|
)}
|
||||||
|
>
|
||||||
|
<SqlObjectList {conid} {database} bind:this={domSqlObjectList} />
|
||||||
|
</WidgetColumnBarItem>
|
||||||
|
|
||||||
|
<WidgetColumnBarItem
|
||||||
|
title={_t('widget.keys', { defaultMessage: 'Keys' })}
|
||||||
|
name="dbObjects"
|
||||||
|
storageName="dbObjectsWidget"
|
||||||
|
skip={!(conid && (database || singleDatabase) && driver?.databaseEngineTypes?.includes('keyvalue'))}
|
||||||
|
>
|
||||||
|
<DbKeysTree {conid} {database} treeKeySeparator={$connection?.treeKeySeparator || ':'} />
|
||||||
|
</WidgetColumnBarItem>
|
||||||
|
|
||||||
|
<WidgetColumnBarItem
|
||||||
|
title={_t('widget.databaseContent', { defaultMessage: 'Database content' })}
|
||||||
|
name="dbObjects"
|
||||||
|
storageName="dbObjectsWidget"
|
||||||
|
skip={conid && (database || singleDatabase)}
|
||||||
|
>
|
||||||
|
<WidgetsInnerContainer>
|
||||||
|
<FocusedConnectionInfoWidget {conid} {database} connection={$connection} />
|
||||||
|
|
||||||
|
<ErrorInfo message="Database not selected" icon="img alert" />
|
||||||
|
</WidgetsInnerContainer>
|
||||||
|
</WidgetColumnBarItem>
|
||||||
|
|
||||||
|
<WidgetColumnBarItem
|
||||||
|
title={_t('widget.databaseContent', { defaultMessage: 'Database content' })}
|
||||||
|
name="dbObjects"
|
||||||
|
storageName="dbObjectsWidget"
|
||||||
|
skip={!(conid && (database || singleDatabase) && !driver)}
|
||||||
|
>
|
||||||
|
<WidgetsInnerContainer>
|
||||||
|
<FocusedConnectionInfoWidget {conid} {database} connection={$connection} />
|
||||||
|
|
||||||
|
<ErrorInfo
|
||||||
|
message={_t('error.driverNotFound', { defaultMessage: 'Invalid database connection, driver not found' })}
|
||||||
|
/>
|
||||||
|
</WidgetsInnerContainer>
|
||||||
|
</WidgetColumnBarItem>
|
||||||
@@ -19,9 +19,11 @@
|
|||||||
import { plusExpandIcon } from '../icons/expandIcons';
|
import { plusExpandIcon } from '../icons/expandIcons';
|
||||||
import { volatileConnectionMapStore } from '../utility/api';
|
import { volatileConnectionMapStore } from '../utility/api';
|
||||||
import SubCloudItemsList from '../appobj/SubCloudItemsList.svelte';
|
import SubCloudItemsList from '../appobj/SubCloudItemsList.svelte';
|
||||||
|
import DatabaseWidgetDetailContent from './DatabaseWidgetDetailContent.svelte';
|
||||||
|
|
||||||
let publicFilter = '';
|
let publicFilter = '';
|
||||||
let cloudFilter = '';
|
let cloudFilter = '';
|
||||||
|
let domSqlObjectList = null;
|
||||||
|
|
||||||
const cloudContentList = useCloudContentList();
|
const cloudContentList = useCloudContentList();
|
||||||
const serverStatus = useServerStatus();
|
const serverStatus = useServerStatus();
|
||||||
@@ -91,7 +93,12 @@
|
|||||||
setIsExpanded={(data, value) => {
|
setIsExpanded={(data, value) => {
|
||||||
expandedConnections.update(old => (value ? [...old, data.conid] : old.filter(x => x != data.conid)));
|
expandedConnections.update(old => (value ? [...old, data.conid] : old.filter(x => x != data.conid)));
|
||||||
}}
|
}}
|
||||||
|
passProps={{
|
||||||
|
onFocusSqlObjectList: () => domSqlObjectList.focus(),
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
</WidgetsInnerContainer>
|
</WidgetsInnerContainer>
|
||||||
</WidgetColumnBarItem>
|
</WidgetColumnBarItem>
|
||||||
|
|
||||||
|
<DatabaseWidgetDetailContent bind:domSqlObjectList />
|
||||||
</WidgetColumnBar>
|
</WidgetColumnBar>
|
||||||
|
|||||||
Reference in New Issue
Block a user