diff --git a/packages/web/src/appobj/DatabaseAppObject.svelte b/packages/web/src/appobj/DatabaseAppObject.svelte index 4e1cb7339..b962e0f77 100644 --- a/packages/web/src/appobj/DatabaseAppObject.svelte +++ b/packages/web/src/appobj/DatabaseAppObject.svelte @@ -446,6 +446,7 @@ await dbgateApi.dropAllDbObjects(${JSON.stringify( currentArchive, currentDatabase, extensions, + focusedConnectionOrDatabase, getCurrentDatabase, getExtensions, getOpenedTabs, @@ -512,7 +513,13 @@ await dbgateApi.dropAllDbObjects(${JSON.stringify( passProps?.connectionColorFactory({ conid: data?.connection?._id, database: data.name }, null, null, false)} isBold={$currentDatabase?.connection?._id == data?.connection?._id && extractDbNameFromComposite($currentDatabase?.name) == data.name} - on:click={() => switchCurrentDatabase(data)} + on:dblclick={() => { + switchCurrentDatabase(data); + passProps?.onFocusSqlObjectList?.(); + }} + on:click={() => { + $focusedConnectionOrDatabase = { conid: data.connection?._id, database: data.name }; + }} on:dragstart on:dragenter on:dragend @@ -532,4 +539,6 @@ await dbgateApi.dropAllDbObjects(${JSON.stringify( list.filter(x => x?.name != data?.name || x?.connection?._id != data?.connection?._id) ) : null} + isChoosed={data.connection?._id == $focusedConnectionOrDatabase?.conid && + data.name == $focusedConnectionOrDatabase?.database} /> diff --git a/packages/web/src/appobj/SubDatabaseList.svelte b/packages/web/src/appobj/SubDatabaseList.svelte index b48b646a2..6d8abaec0 100644 --- a/packages/web/src/appobj/SubDatabaseList.svelte +++ b/packages/web/src/appobj/SubDatabaseList.svelte @@ -15,13 +15,11 @@ $: databases = useDatabaseList({ conid: isExpandedOnlyBySearch ? null : data._id }); $: dbList = isExpandedOnlyBySearch ? getLocalStorage(`database_list_${data._id}`) || [] : $databases || []; - - $: connectionLabel = getConnectionLabel(data); filterName(filter, x.name, connectionLabel)), + dbList.filter(x => filterName(filter, x.name, data.displayName, data.server)), x => x.sortOrder ?? x.name ).map(db => ({ ...db, connection: data }))} module={databaseAppObject} diff --git a/packages/web/src/widgets/AppObjectListHandler.svelte b/packages/web/src/widgets/AppObjectListHandler.svelte index 0f64ac685..4e89c6eee 100644 --- a/packages/web/src/widgets/AppObjectListHandler.svelte +++ b/packages/web/src/widgets/AppObjectListHandler.svelte @@ -15,9 +15,11 @@ let domDiv = null; function handleKeyDown(ev) { + const listInstance = _.isFunction(list) ? list() : list; + function selectByDiff(diff) { const selected = getSelectedObject(); - const index = _.findIndex(list, x => selectedObjectMatcher(x, selected)); + const index = _.findIndex(listInstance, x => selectedObjectMatcher(x, selected)); if (index == 0 && diff < 0) { onFocusFilterBox?.(); @@ -26,16 +28,16 @@ if (index >= 0) { let newIndex = index + diff; - if (newIndex >= list.length) { - newIndex = list.length - 1; + if (newIndex >= listInstance.length) { + newIndex = listInstance.length - 1; } if (newIndex < 0) { newIndex = 0; } - if (list[newIndex]) { - selectedObjectStore.set(list[newIndex]); - handleObjectClick?.(list[newIndex], { tabPreviewMode: true }); + if (listInstance[newIndex]) { + selectedObjectStore.set(listInstance[newIndex]); + handleObjectClick?.(listInstance[newIndex], { tabPreviewMode: true }); } if (newIndex == 0) { @@ -64,25 +66,27 @@ ev.preventDefault(); } if (ev.keyCode == keycodes.home) { - if (list[0]) { - selectedObjectStore.set(list[0]); - handleObjectClick?.(list[0], { tabPreviewMode: true }); + if (listInstance[0]) { + selectedObjectStore.set(listInstance[0]); + handleObjectClick?.(listInstance[0], { tabPreviewMode: true }); onScrollTop?.(); } } if (ev.keyCode == keycodes.end) { - if (list[list.length - 1]) { - selectedObjectStore.set(list[list.length - 1]); - handleObjectClick?.(list[list.length - 1], { tabPreviewMode: true }); + if (listInstance[listInstance.length - 1]) { + selectedObjectStore.set(listInstance[listInstance.length - 1]); + handleObjectClick?.(listInstance[listInstance.length - 1], { tabPreviewMode: true }); } } } export function focusFirst() { + const listInstance = _.isFunction(list) ? list() : list; + domDiv?.focus(); - if (list[0]) { - selectedObjectStore.set(list[0]); - handleObjectClick?.(list[0], { tabPreviewMode: true }); + if (listInstance[0]) { + selectedObjectStore.set(listInstance[0]); + handleObjectClick?.(listInstance[0], { tabPreviewMode: true }); onScrollTop?.(); } } diff --git a/packages/web/src/widgets/ConnectionList.svelte b/packages/web/src/widgets/ConnectionList.svelte index 93149811d..43dfa1ed9 100644 --- a/packages/web/src/widgets/ConnectionList.svelte +++ b/packages/web/src/widgets/ConnectionList.svelte @@ -1,4 +1,10 @@ {#if $status && $status.name == 'error'}