diff --git a/packages/web/src/commands/changeDatabaseStatusCommand.ts b/packages/web/src/commands/changeDatabaseStatusCommand.ts
index ff8b5f229..d5ed17452 100644
--- a/packages/web/src/commands/changeDatabaseStatusCommand.ts
+++ b/packages/web/src/commands/changeDatabaseStatusCommand.ts
@@ -3,7 +3,7 @@ import { currentDatabase, getCurrentDatabase } from '../stores';
import getElectron from '../utility/getElectron';
import registerCommand from './registerCommand';
import { apiCall } from '../utility/api';
-import { switchCurrentDatabase } from '../utility/common';
+import { getDatabasStatusMenu, switchCurrentDatabase } from '../utility/common';
import { __t } from '../translations';
registerCommand({
@@ -18,33 +18,7 @@ registerCommand({
conid: connection._id,
database: name,
};
- return [
- {
- text: 'Sync model (incremental)',
- onClick: () => {
- apiCall('database-connections/sync-model', dbid);
- },
- },
- {
- text: 'Sync model (full)',
- onClick: () => {
- apiCall('database-connections/sync-model', { ...dbid, isFullRefresh: true });
- },
- },
- {
- text: 'Reopen',
- onClick: () => {
- apiCall('database-connections/refresh', dbid);
- },
- },
- {
- text: 'Disconnect',
- onClick: () => {
- const electron = getElectron();
- if (electron) apiCall('database-connections/disconnect', dbid);
- switchCurrentDatabase(null);
- },
- },
- ];
+
+ return getDatabasStatusMenu(dbid);
},
});
diff --git a/packages/web/src/utility/common.ts b/packages/web/src/utility/common.ts
index 477d56670..2726e78a1 100644
--- a/packages/web/src/utility/common.ts
+++ b/packages/web/src/utility/common.ts
@@ -4,6 +4,8 @@ import _ from 'lodash';
import { getSchemaList } from './metadataLoaders';
import { showSnackbarError } from './snackbar';
import { _t } from '../translations';
+import { apiCall } from './api';
+import getElectron from './getElectron';
export class LoadingToken {
isCanceled = false;
@@ -63,7 +65,8 @@ export function getObjectTypeFieldLabel(objectTypeField, driver?) {
if (objectTypeField == 'procedures') return _t('dbObject.procedures', { defaultMessage: 'Procedures' });
if (objectTypeField == 'functions') return _t('dbObject.functions', { defaultMessage: 'Functions' });
if (objectTypeField == 'triggers') return _t('dbObject.triggers', { defaultMessage: 'Triggers' });
- if (objectTypeField == 'schedulerEvents') return _t('dbObject.schedulerEvents', { defaultMessage: 'Scheduler Events' });
+ if (objectTypeField == 'schedulerEvents')
+ return _t('dbObject.schedulerEvents', { defaultMessage: 'Scheduler Events' });
if (objectTypeField == 'matviews') return _t('dbObject.matviews', { defaultMessage: 'Materialized Views' });
if (objectTypeField == 'collections') return _t('dbObject.collections', { defaultMessage: 'Collections/Containers' });
return _.startCase(objectTypeField);
@@ -151,3 +154,40 @@ export function getKeyTextFromEvent(e) {
keyText += e.key;
return keyText;
}
+
+export function getDatabasStatusMenu(dbid) {
+ function callSchemalListChanged() {
+ apiCall('database-connections/dispatch-database-changed-event', { event: 'schema-list-changed', ...dbid });
+ }
+ return [
+ {
+ text: 'Refresh DB structure (incremental)',
+ onClick: () => {
+ apiCall('database-connections/sync-model', dbid);
+ callSchemalListChanged();
+ },
+ },
+ {
+ text: 'Refresh DB structure (full)',
+ onClick: () => {
+ apiCall('database-connections/sync-model', { ...dbid, isFullRefresh: true });
+ callSchemalListChanged();
+ },
+ },
+ {
+ text: 'Reopen connection',
+ onClick: () => {
+ apiCall('database-connections/refresh', dbid);
+ callSchemalListChanged();
+ },
+ },
+ {
+ text: 'Disconnect',
+ onClick: () => {
+ const electron = getElectron();
+ if (electron) apiCall('database-connections/disconnect', dbid);
+ switchCurrentDatabase(null);
+ },
+ },
+ ];
+}
diff --git a/packages/web/src/widgets/SqlObjectList.svelte b/packages/web/src/widgets/SqlObjectList.svelte
index cf9c2c81d..1f9bc893b 100644
--- a/packages/web/src/widgets/SqlObjectList.svelte
+++ b/packages/web/src/widgets/SqlObjectList.svelte
@@ -31,7 +31,7 @@
import { chevronExpandIcon } from '../icons/expandIcons';
import ErrorInfo from '../elements/ErrorInfo.svelte';
import LoadingInfo from '../elements/LoadingInfo.svelte';
- import { getObjectTypeFieldLabel } from '../utility/common';
+ import { getDatabasStatusMenu, getObjectTypeFieldLabel } from '../utility/common';
import DropDownButton from '../buttons/DropDownButton.svelte';
import FontIcon from '../icons/FontIcon.svelte';
import CloseSearchButton from '../buttons/CloseSearchButton.svelte';
@@ -120,11 +120,6 @@
// setInterval(() => (generateIndex += 1), 2000);
// $: objectList = generateObjectList(generateIndex);
- const handleRefreshDatabase = () => {
- apiCall('database-connections/refresh', { conid, database });
- apiCall('database-connections/dispatch-database-changed-event', { event: 'schema-list-changed', conid, database });
- };
-
function createAddMenu() {
const res = [];
if (driver?.databaseEngineTypes?.includes('document')) {
@@ -147,6 +142,15 @@
return res;
}
+ function createRefreshDatabaseMenu() {
+ return getDatabasStatusMenu({ conid, database });
+ }
+
+ function handleFullRefreshDatabase() {
+ apiCall('database-connections/sync-model', { conid, database, isFullRefresh: true });
+ apiCall('database-connections/dispatch-database-changed-event', { event: 'schema-list-changed', conid, database });
+ }
+
function createSearchMenu() {
const res = [];
res.push({ label: _t('sqlObject.searchBy', { defaultMessage: 'Search by:' }), isBold: true, disabled: true });
@@ -237,7 +241,18 @@
- {_t('common.refresh', { defaultMessage: 'Refresh' })}
+ {_t('common.refresh', { defaultMessage: 'Refresh' })}
+
+
{:else if objectList.length == 0 && $status && $status.name != 'pending' && $status.name != 'checkStructure' && $status.name != 'loadStructure' && $objects}
{/if}
-
-
-
+ icon="icon dots-vertical"
+ />