diff --git a/packages/web/src/appobj/DatabaseObjectAppObject.svelte b/packages/web/src/appobj/DatabaseObjectAppObject.svelte
index 91a639e7f..7a65b57d2 100644
--- a/packages/web/src/appobj/DatabaseObjectAppObject.svelte
+++ b/packages/web/src/appobj/DatabaseObjectAppObject.svelte
@@ -887,7 +887,35 @@
return createDatabaseObjectMenu(data);
}
- export function handleObjectClick(data, { forceNewTab = false, tabPreviewMode = false, focusTab = false }) {
+ export function handleObjectClick(data, clickAction) {
+ // on:click={() => handleObjectClick(data, { tabPreviewMode: true })}
+ // on:middleclick={() => handleObjectClick(data, { forceNewTab: true })}
+ // on:dblclick={() => handleObjectClick(data, { tabPreviewMode: false, focusTab: true })}
+ const openDetailOnArrows = getOpenDetailOnArrowsSettings();
+
+ let forceNewTab = false;
+ let tabPreviewMode = false;
+ let focusTab = false;
+
+ switch (clickAction) {
+ case 'leftClick':
+ tabPreviewMode = true;
+ break;
+ case 'middleClick':
+ forceNewTab = true;
+ break;
+ case 'dblClick':
+ focusTab = true;
+ break;
+ case 'keyEnter':
+ focusTab = true;
+ break;
+ case 'keyArrow':
+ if (!openDetailOnArrows) return;
+ tabPreviewMode = true;
+ break;
+ }
+
return handleDatabaseObjectClick(data, { forceNewTab, tabPreviewMode, focusTab });
}
@@ -939,16 +967,12 @@
import { openImportExportTab } from '../utility/importExportTools';
import { defaultDatabaseObjectAppObjectActions, matchDatabaseObjectAppObject } from './appObjectTools';
import { getSupportedScriptTemplates } from '../utility/applyScriptTemplate';
- import { getBoolSettingsValue } from '../settings/settingsTools';
+ import { getBoolSettingsValue, getOpenDetailOnArrowsSettings } from '../settings/settingsTools';
import { isProApp } from '../utility/proTools';
export let data;
export let passProps;
- function handleClick({ forceNewTab = false, tabPreviewMode = false, focusTab = false } = {}) {
- handleDatabaseObjectClick(data, { forceNewTab, tabPreviewMode, focusTab });
- }
-
function createMenu() {
return createDatabaseObjectMenu(data, passProps?.connection);
}
@@ -983,9 +1007,9 @@
onUnpin={isPinned ? () => pinnedTables.update(list => list.filter(x => !testEqual(x, data))) : null}
extInfo={getExtInfo(data)}
isChoosed={matchDatabaseObjectAppObject($selectedDatabaseObjectAppObject, data)}
- on:click={() => handleClick({ tabPreviewMode: true })}
- on:middleclick={() => handleClick({ forceNewTab: true })}
- on:dblclick={() => handleClick({ tabPreviewMode: false, focusTab: true })}
+ on:click={() => handleObjectClick(data, 'leftClick')}
+ on:middleclick={() => handleObjectClick(data, 'middleClick')}
+ on:dblclick={() => handleObjectClick(data, 'dblClick')}
on:expand
on:dragstart
on:dragenter
diff --git a/packages/web/src/settings/SettingsModal.svelte b/packages/web/src/settings/SettingsModal.svelte
index 0b1c9df0f..b19e8efef 100644
--- a/packages/web/src/settings/SettingsModal.svelte
+++ b/packages/web/src/settings/SettingsModal.svelte
@@ -344,6 +344,13 @@ ORDER BY
to open the table from the "Tables" view, a new tab is dedicated to that table.
+
+
Confirmations
diff --git a/packages/web/src/settings/settingsTools.ts b/packages/web/src/settings/settingsTools.ts
index c72ebc334..41028529d 100644
--- a/packages/web/src/settings/settingsTools.ts
+++ b/packages/web/src/settings/settingsTools.ts
@@ -36,3 +36,10 @@ export function getConnectionClickActionSetting(): 'connect' | 'openDetails' | '
export function getDatabaseClickActionSetting(): 'switch' | 'none' {
return getStringSettingsValue('defaultAction.databaseClick', 'switch');
}
+
+export function getOpenDetailOnArrowsSettings(): boolean {
+ return (
+ getBoolSettingsValue('behaviour.useTabPreviewMode', true) &&
+ getBoolSettingsValue('behaviour.openDetailOnArrows', true)
+ );
+}
diff --git a/packages/web/src/widgets/AppObjectListHandler.svelte b/packages/web/src/widgets/AppObjectListHandler.svelte
index 97dbe0f30..996d7fcce 100644
--- a/packages/web/src/widgets/AppObjectListHandler.svelte
+++ b/packages/web/src/widgets/AppObjectListHandler.svelte
@@ -41,7 +41,7 @@
if (listInstance[newIndex]) {
selectedObjectStore.set(listInstance[newIndex]);
- handleObjectClick?.(listInstance[newIndex], { tabPreviewMode: true });
+ handleObjectClick?.(listInstance[newIndex], 'keyArrow');
}
if (newIndex == 0) {
@@ -58,7 +58,7 @@
ev.preventDefault();
}
if (ev.keyCode == keycodes.enter) {
- handleObjectClick?.(getSelectedObject(), { tabPreviewMode: false, focusTab: true });
+ handleObjectClick?.(getSelectedObject(), 'keyEnter');
ev.preventDefault();
}
if (ev.keyCode == keycodes.pageDown) {
@@ -72,14 +72,14 @@
if (ev.keyCode == keycodes.home) {
if (listInstance[0]) {
selectedObjectStore.set(listInstance[0]);
- handleObjectClick?.(listInstance[0], { tabPreviewMode: true });
+ handleObjectClick?.(listInstance[0], 'keyArrow');
onScrollTop?.();
}
}
if (ev.keyCode == keycodes.end) {
if (listInstance[listInstance.length - 1]) {
selectedObjectStore.set(listInstance[listInstance.length - 1]);
- handleObjectClick?.(listInstance[listInstance.length - 1], { tabPreviewMode: true });
+ handleObjectClick?.(listInstance[listInstance.length - 1], 'keyArrow');
}
}
if (ev.keyCode == keycodes.numPadAdd) {
@@ -110,7 +110,7 @@
domDiv?.focus();
if (listInstance[0]) {
selectedObjectStore.set(listInstance[0]);
- handleObjectClick?.(listInstance[0], { tabPreviewMode: true });
+ handleObjectClick?.(listInstance[0], 'keyArrow');
onScrollTop?.();
}
}
@@ -130,7 +130,7 @@
const index2 = _.findIndex(listInstance, x => selectedObjectMatcher(x, focused));
if (index2 >= 0) {
selectedObjectStore.set(focused);
- handleObjectClick?.(focused, { tabPreviewMode: true });
+ handleObjectClick?.(focused, 'keyArrow');
return;
}
}
diff --git a/packages/web/src/widgets/ConnectionList.svelte b/packages/web/src/widgets/ConnectionList.svelte
index 0fe182156..b0a99233c 100644
--- a/packages/web/src/widgets/ConnectionList.svelte
+++ b/packages/web/src/widgets/ConnectionList.svelte
@@ -40,7 +40,12 @@
import { switchCurrentDatabase } from '../utility/common';
import openNewTab from '../utility/openNewTab';
import { openConnection } from '../appobj/ConnectionAppObject.svelte';
- import { getConnectionClickActionSetting } from '../settings/settingsTools';
+ import {
+ getBoolSettingsValue,
+ getConnectionClickActionSetting,
+ getDatabaseClickActionSetting,
+ getOpenDetailOnArrowsSettings,
+ } from '../settings/settingsTools';
import DropDownButton from '../buttons/DropDownButton.svelte';
const connections = useConnectionList();
@@ -258,30 +263,35 @@
onFocusFilterBox={text => {
domFilter?.focus(text);
}}
- handleObjectClick={(data, options) => {
+ handleObjectClick={(data, clickAction) => {
const connectionClickAction = getConnectionClickActionSetting();
+ const databaseClickAction = getDatabaseClickActionSetting();
+ const openDetailOnArrows = getOpenDetailOnArrowsSettings();
if (data.database) {
- if (options.focusTab) {
- if ($openedSingleDatabaseConnections.includes(data.conid)) {
- switchCurrentDatabase({ connection: data.connection, name: data.database });
- } else {
- switchCurrentDatabase({ connection: data.connection, name: data.database });
- }
- // console.log('FOCUSING DB', passProps);
- // passProps?.onFocusSqlObjectList?.();
+ if (databaseClickAction == 'switch' && clickAction == 'leftClick') {
+ switchCurrentDatabase({ connection: data.connection, name: data.database });
+ }
+
+ if (clickAction == 'keyEnter' || clickAction == 'dblClick') {
+ switchCurrentDatabase({ connection: data.connection, name: data.database });
}
} else {
- if (options.focusTab) {
+ if (clickAction == 'keyEnter' || clickAction == 'dblClick') {
openConnection(data.connection);
} else {
const config = getCurrentConfig();
- if (config.runAsPortal == false && !config.storageDatabase && connectionClickAction == 'openDetails') {
+ if (
+ config.runAsPortal == false &&
+ !config.storageDatabase &&
+ connectionClickAction == 'openDetails' &&
+ (clickAction == 'leftClick' || (clickAction == 'keyArrow' && openDetailOnArrows))
+ ) {
openNewTab({
title: getConnectionLabel(data.connection),
icon: 'img connection',
tabComponent: 'ConnectionTab',
- tabPreviewMode: options.tabPreviewMode,
+ tabPreviewMode: true,
props: {
conid: data.conid,
},
diff --git a/packages/web/src/widgets/SingleConnectionDatabaseList.svelte b/packages/web/src/widgets/SingleConnectionDatabaseList.svelte
index 2123719ad..e7992cf9d 100644
--- a/packages/web/src/widgets/SingleConnectionDatabaseList.svelte
+++ b/packages/web/src/widgets/SingleConnectionDatabaseList.svelte
@@ -13,6 +13,7 @@
import { filterName } from 'dbgate-tools';
import { currentDatabase, focusedConnectionOrDatabase, getFocusedConnectionOrDatabase } from '../stores';
import { switchCurrentDatabase } from '../utility/common';
+ import { getConnectionClickActionSetting, getDatabaseClickActionSetting } from '../settings/settingsTools';
export let connection;
@@ -81,9 +82,16 @@
onFocusFilterBox={text => {
domFilter?.focus(text);
}}
- handleObjectClick={(data, options) => {
+ handleObjectClick={(data, clickAction) => {
+ const connectionClickAction = getConnectionClickActionSetting();
+ const databaseClickAction = getDatabaseClickActionSetting();
+
if (data.database) {
- if (options.focusTab) {
+ if (databaseClickAction == 'switch' && clickAction == 'leftClick') {
+ switchCurrentDatabase({ connection: data.connection, name: data.database });
+ }
+
+ if (clickAction == 'keyEnter' || clickAction == 'dblClick') {
switchCurrentDatabase({ connection: data.connection, name: data.database });
}
}
diff --git a/packages/web/src/widgets/SqlObjectList.svelte b/packages/web/src/widgets/SqlObjectList.svelte
index 1791c727c..20c1bb90b 100644
--- a/packages/web/src/widgets/SqlObjectList.svelte
+++ b/packages/web/src/widgets/SqlObjectList.svelte
@@ -249,7 +249,7 @@
selectedObjectStore={selectedDatabaseObjectAppObject}
getSelectedObject={getSelectedDatabaseObjectAppObject}
selectedObjectMatcher={matchDatabaseObjectAppObject}
- handleObjectClick={(data, options) => databaseObjectAppObject.handleObjectClick(data, options)}
+ handleObjectClick={(data, clickAction) => databaseObjectAppObject.handleObjectClick(data, clickAction)}
onScrollTop={() => {
domContainer?.scrollTop();
}}