configurable connection click, database click #959

This commit is contained in:
Jan Prochazka
2024-12-12 15:53:00 +01:00
parent bf85a922ca
commit 897547371e
5 changed files with 71 additions and 17 deletions

View File

@@ -123,6 +123,7 @@
import { getConnectionLabel } from 'dbgate-tools';
import hasPermission from '../utility/hasPermission';
import { switchCurrentDatabase } from '../utility/common';
import { getConnectionClickActionSetting } from '../settings/settingsTools';
export let data;
export let passProps;
@@ -184,16 +185,24 @@
});
const config = getCurrentConfig();
if (config.runAsPortal == false && !config.storageDatabase) {
openNewTab({
title: getConnectionLabel(data),
icon: 'img connection',
tabComponent: 'ConnectionTab',
tabPreviewMode: true,
props: {
conid: data._id,
},
});
const connectionClickAction = getConnectionClickActionSetting();
if (connectionClickAction == 'openDetails') {
if (config.runAsPortal == false && !config.storageDatabase) {
openNewTab({
title: getConnectionLabel(data),
icon: 'img connection',
tabComponent: 'ConnectionTab',
tabPreviewMode: true,
props: {
conid: data._id,
},
});
}
}
if (connectionClickAction == 'connect') {
await tick();
handleConnect();
}
};

View File

@@ -351,11 +351,13 @@ await dbgateApi.dropAllDbObjects(${JSON.stringify(
text: `New ${driver?.collectionSingularLabel ?? 'collection/container'}`,
},
hasPermission(`dbops/query`) &&
driver?.databaseEngineTypes?.includes('sql') && isProApp() && { onClick: handleQueryDesigner, text: 'Design query' },
driver?.databaseEngineTypes?.includes('sql') && isProApp() && {
onClick: handleNewPerspective,
text: 'Design perspective query',
},
driver?.databaseEngineTypes?.includes('sql') &&
isProApp() && { onClick: handleQueryDesigner, text: 'Design query' },
driver?.databaseEngineTypes?.includes('sql') &&
isProApp() && {
onClick: handleNewPerspective,
text: 'Design perspective query',
},
connection.useSeparateSchemas && { onClick: handleRefreshSchemas, text: 'Refresh schemas' },
{ divider: true },
@@ -486,6 +488,7 @@ await dbgateApi.dropAllDbObjects(${JSON.stringify(
import ChooseArchiveFolderModal from '../modals/ChooseArchiveFolderModal.svelte';
import { extractShellConnection } from '../impexp/createImpExpScript';
import { getNumberIcon } from '../icons/FontIcon.svelte';
import { getDatabaseClickActionSetting } from '../settings/settingsTools';
export let data;
export let passProps;
@@ -523,6 +526,9 @@ await dbgateApi.dropAllDbObjects(${JSON.stringify(
on:click={() => {
// switchCurrentDatabase(data);
$focusedConnectionOrDatabase = { conid: data.connection?._id, database: data.name, connection: data.connection };
if (getDatabaseClickActionSetting() == 'switch') {
switchCurrentDatabase(data);
}
}}
on:dragstart
on:dragenter

View File

@@ -278,6 +278,30 @@ ORDER BY
</svelte:fragment>
<svelte:fragment slot="4">
<div class="heading">Default actions</div>
<FormSelectField
label="Connection click"
name="defaultAction.connectionClick"
isNative
defaultValue="connect"
options={[
{ value: 'openDetails', label: 'Edit / open details' },
{ value: 'connect', label: 'Connect' },
{ value: 'none', label: 'Do nothing' },
]}
/>
<FormSelectField
label="Database click"
name="defaultAction.databaseClick"
isNative
defaultValue="switch"
options={[
{ value: 'switch', label: 'Switch database' },
{ value: 'none', label: 'Do nothing' },
]}
/>
<FormCheckboxField name="defaultAction.useLastUsedAction" label="Use last used action" defaultValue={true} />
<FormDefaultActionField

View File

@@ -28,3 +28,11 @@ export function getStringSettingsValue(name, defaultValue) {
if (res == null) return defaultValue;
return res;
}
export function getConnectionClickActionSetting(): 'connect' | 'openDetails' | 'none' {
return getStringSettingsValue('defaultAction.connectionClick', 'connect');
}
export function getDatabaseClickActionSetting(): 'switch' | 'none' {
return getStringSettingsValue('defaultAction.databaseClick', 'switch');
}

View File

@@ -38,6 +38,7 @@
import { switchCurrentDatabase } from '../utility/common';
import openNewTab from '../utility/openNewTab';
import { openConnection } from '../appobj/ConnectionAppObject.svelte';
import { getConnectionClickActionSetting } from '../settings/settingsTools';
const connections = useConnectionList();
const serverStatus = useServerStatus();
@@ -194,7 +195,11 @@
/>
<CloseSearchButton bind:filter />
{#if $commandsCustomized['new.connection']?.enabled}
<InlineButton on:click={() => runCommand('new.connection')} title="Add new connection" data-testid="ConnectionList_buttonNewConnection">
<InlineButton
on:click={() => runCommand('new.connection')}
title="Add new connection"
data-testid="ConnectionList_buttonNewConnection"
>
<FontIcon icon="icon plus-thick" />
</InlineButton>
<InlineButton on:click={() => runCommand('new.connection.folder')} title="Add new connection folder">
@@ -235,6 +240,8 @@
domFilter?.focus(text);
}}
handleObjectClick={(data, options) => {
const connectionClickAction = getConnectionClickActionSetting();
if (data.database) {
if (options.focusTab) {
if ($openedSingleDatabaseConnections.includes(data.conid)) {
@@ -250,7 +257,7 @@
openConnection(data.connection);
} else {
const config = getCurrentConfig();
if (config.runAsPortal == false && !config.storageDatabase) {
if (config.runAsPortal == false && !config.storageDatabase && connectionClickAction == 'openDetails') {
openNewTab({
title: getConnectionLabel(data.connection),
icon: 'img connection',