diff --git a/packages/web/src/appobj/DatabaseObjectAppObject.svelte b/packages/web/src/appobj/DatabaseObjectAppObject.svelte index 2c1de04fc..a2ac29ac7 100644 --- a/packages/web/src/appobj/DatabaseObjectAppObject.svelte +++ b/packages/web/src/appobj/DatabaseObjectAppObject.svelte @@ -699,7 +699,10 @@ ); } - export function handleDatabaseObjectClick(data, { forceNewTab = false, tabPreviewMode = false } = {}) { + export function handleDatabaseObjectClick( + data, + { forceNewTab = false, tabPreviewMode = false, focusTab = false } = {} + ) { const { schemaName, pureName, conid, database, objectTypeField } = data; const driver = findEngineDriver(data, getExtensions()); @@ -708,6 +711,15 @@ const activeDefaultActionId = activeTab?.props?.defaultActionId; if (matchDatabaseObjectAppObject(data, activeTabProps)) { + if (!tabPreviewMode) { + openedTabs.update(tabs => { + return tabs.map(tab => ({ + ...tab, + tabPreviewMode: tab.tabid == activeTab.tabid ? false : tab.tabPreviewMode, + focused: focusTab && tab.tabid == activeTab.tabid ? true : tab.focused, + })); + }); + } return; } @@ -851,6 +863,7 @@ getCurrentSettings, getExtensions, openedConnections, + openedTabs, pinnedTables, selectedDatabaseObjectAppObject, } from '../stores'; @@ -886,9 +899,9 @@ export let data; export let passProps; - function handleClick({ forceNewTab = false, tabPreviewMode = false } = {}) { + function handleClick({ forceNewTab = false, tabPreviewMode = false, focusTab = false } = {}) { $selectedDatabaseObjectAppObject = _.pick(data, ['conid', 'database', 'objectTypeField', 'pureName', 'schemaName']); - handleDatabaseObjectClick(data, { forceNewTab, tabPreviewMode }); + handleDatabaseObjectClick(data, { forceNewTab, tabPreviewMode, focusTab }); } function createMenu() { @@ -924,7 +937,7 @@ isChoosed={matchDatabaseObjectAppObject($selectedDatabaseObjectAppObject, data)} on:click={() => handleClick({ tabPreviewMode: true })} on:middleclick={() => handleClick({ forceNewTab: true })} - on:dblclick={() => handleClick({ tabPreviewMode: false })} + on:dblclick={() => handleClick({ tabPreviewMode: false, focusTab: true })} on:expand on:dragstart on:dragenter diff --git a/packages/web/src/datagrid/DataGridCore.svelte b/packages/web/src/datagrid/DataGridCore.svelte index 3010f74db..787708194 100644 --- a/packages/web/src/datagrid/DataGridCore.svelte +++ b/packages/web/src/datagrid/DataGridCore.svelte @@ -472,7 +472,7 @@ export let dataEditorTypesBehaviourOverride = null; const wheelRowCount = 5; - const tabVisible: any = getContext('tabVisible'); + const tabFocused: any = getContext('tabFocused'); let containerHeight = 0; let containerWidth = 0; @@ -1135,7 +1135,7 @@ } } - $: if ($tabVisible && domFocusField && focusOnVisible) { + $: if ($tabFocused && domFocusField && focusOnVisible) { domFocusField.focus(); } diff --git a/packages/web/src/stores.ts b/packages/web/src/stores.ts index 3ffc1a50f..7cffe2eb5 100644 --- a/packages/web/src/stores.ts +++ b/packages/web/src/stores.ts @@ -23,6 +23,7 @@ export interface TabDefinition { multiTabIndex?: number; unsaved?: boolean; tabPreviewMode?: boolean; + focused?: boolean; } export function writableWithStorage(defaultValue: T, storageName) { @@ -328,4 +329,4 @@ let selectedDatabaseObjectAppObjectValue = null; selectedDatabaseObjectAppObject.subscribe(value => { selectedDatabaseObjectAppObjectValue = value; }); -export const getSelectedDatabaseObjectAppObject = () => selectedDatabaseObjectAppObjectValue; \ No newline at end of file +export const getSelectedDatabaseObjectAppObject = () => selectedDatabaseObjectAppObjectValue; diff --git a/packages/web/src/tabpanel/TabContent.svelte b/packages/web/src/tabpanel/TabContent.svelte index bff6f575e..8eac0de10 100644 --- a/packages/web/src/tabpanel/TabContent.svelte +++ b/packages/web/src/tabpanel/TabContent.svelte @@ -4,17 +4,22 @@ export let tabid; export let tabVisible; + export let tabFocused; export let tabComponent; - const tabVisibleStore = writable(tabVisible); setContext('tabid', tabid); - setContext('tabVisible', tabVisibleStore); + const tabVisibleStore = writable(tabVisible); + setContext('tabVisible', tabVisibleStore); $: tabVisibleStore.set(tabVisible); + + const tabFocusedStore = writable(tabFocused); + setContext('tabFocused', tabFocusedStore); + $: tabFocusedStore.set(tabFocused);
- +