diff --git a/packages/web/src/appobj/AppObjectListItem.svelte b/packages/web/src/appobj/AppObjectListItem.svelte index b3524adaa..2b61b232b 100644 --- a/packages/web/src/appobj/AppObjectListItem.svelte +++ b/packages/web/src/appobj/AppObjectListItem.svelte @@ -50,7 +50,7 @@ x.name)); }; export function openConnection(connection) { + if (connection.singleDatabase) { + if (getOpenedSingleDatabaseConnections().includes(connection._id)) { + return; + } + } else { + if (getOpenedConnections().includes(connection._id)) { + return; + } + } + const config = getCurrentConfig(); if (connection.singleDatabase) { switchCurrentDatabase({ connection, name: connection.defaultDatabase }); @@ -88,6 +98,7 @@ getCurrentDatabase, getCurrentSettings, getOpenedConnections, + getOpenedSingleDatabaseConnections, getOpenedTabs, openedConnections, openedSingleDatabaseConnections, @@ -159,8 +170,17 @@ } }; - const handleClick = async (e) => { + const handleClick = async e => { focusedConnectionOrDatabase.set({ conid: data?._id }); + openNewTab({ + title: getConnectionLabel(data), + icon: 'img connection', + tabComponent: 'ConnectionTab', + tabPreviewMode: true, + props: { + conid: data._id, + }, + }); }; const handleSqlRestore = () => { @@ -333,9 +353,8 @@ {extInfo} colorMark={passProps?.connectionColorFactory && passProps?.connectionColorFactory({ conid: data._id })} menu={getContextMenu} - on:dblclick={handleDoubleClick} on:click={handleClick} - on:click + on:dblclick on:expand on:dblclick={handleConnect} on:middleclick={() => { diff --git a/packages/web/src/appobj/DatabaseAppObject.svelte b/packages/web/src/appobj/DatabaseAppObject.svelte index b962e0f77..654fbe0df 100644 --- a/packages/web/src/appobj/DatabaseAppObject.svelte +++ b/packages/web/src/appobj/DatabaseAppObject.svelte @@ -515,9 +515,10 @@ await dbgateApi.dropAllDbObjects(${JSON.stringify( extractDbNameFromComposite($currentDatabase?.name) == data.name} on:dblclick={() => { switchCurrentDatabase(data); - passProps?.onFocusSqlObjectList?.(); + // passProps?.onFocusSqlObjectList?.(); }} on:click={() => { + // switchCurrentDatabase(data); $focusedConnectionOrDatabase = { conid: data.connection?._id, database: data.name }; }} on:dragstart diff --git a/packages/web/src/elements/SearchInput.svelte b/packages/web/src/elements/SearchInput.svelte index 4db40765f..d3efcd775 100644 --- a/packages/web/src/elements/SearchInput.svelte +++ b/packages/web/src/elements/SearchInput.svelte @@ -23,8 +23,12 @@ const debouncedSet = _.debounce(x => (value = x), 500); - export function focus() { + export function focus(text) { domInput.focus(); + if (text) { + domInput.value = text; + value = text; + } } diff --git a/packages/web/src/stores.ts b/packages/web/src/stores.ts index ef04ec619..92b751723 100644 --- a/packages/web/src/stores.ts +++ b/packages/web/src/stores.ts @@ -345,4 +345,10 @@ let focusedConnectionOrDatabaseValue = null; focusedConnectionOrDatabase.subscribe(value => { focusedConnectionOrDatabaseValue = value; }); -export const getFocusedConnectionOrDatabase = () => focusedConnectionOrDatabaseValue; \ No newline at end of file +export const getFocusedConnectionOrDatabase = () => focusedConnectionOrDatabaseValue; + +let openedSingleDatabaseConnectionsValue = []; +openedSingleDatabaseConnections.subscribe(value => { + openedSingleDatabaseConnectionsValue = value; +}); +export const getOpenedSingleDatabaseConnections = () => openedSingleDatabaseConnectionsValue; diff --git a/packages/web/src/widgets/AppObjectListHandler.svelte b/packages/web/src/widgets/AppObjectListHandler.svelte index 4e89c6eee..57c3f5d85 100644 --- a/packages/web/src/widgets/AppObjectListHandler.svelte +++ b/packages/web/src/widgets/AppObjectListHandler.svelte @@ -16,7 +16,7 @@ function handleKeyDown(ev) { const listInstance = _.isFunction(list) ? list() : list; - + function selectByDiff(diff) { const selected = getSelectedObject(); const index = _.findIndex(listInstance, x => selectedObjectMatcher(x, selected)); @@ -78,6 +78,20 @@ handleObjectClick?.(listInstance[listInstance.length - 1], { tabPreviewMode: true }); } } + + if ( + !ev.ctrlKey && + !ev.altKey && + !ev.metaKey && + ((ev.keyCode >= keycodes.a && ev.keyCode <= keycodes.z) || + (ev.keyCode >= keycodes.n0 && ev.keyCode <= keycodes.n9) || + (ev.keyCode >= keycodes.numPad0 && ev.keyCode <= keycodes.numPad9) || + ev.keyCode == keycodes.dash) + ) { + const text = ev.key; + onFocusFilterBox?.(text); + ev.preventDefault(); + } } export function focusFirst() { @@ -90,6 +104,16 @@ onScrollTop?.(); } } + + function handleFocus() { + isListFocused = true; + const listInstance = _.isFunction(list) ? list() : list; + const selected = getSelectedObject(); + const index = _.findIndex(listInstance, x => selectedObjectMatcher(x, selected)); + if (index < 0) { + focusFirst(); + } + }
{ - isListFocused = true; - }} + on:focus={handleFocus} on:blur={() => { isListFocused = false; }} diff --git a/packages/web/src/widgets/ConnectionList.svelte b/packages/web/src/widgets/ConnectionList.svelte index 43dfa1ed9..a9fab2af8 100644 --- a/packages/web/src/widgets/ConnectionList.svelte +++ b/packages/web/src/widgets/ConnectionList.svelte @@ -1,10 +1,4 @@