diff --git a/apps/desktop/src/App.vue b/apps/desktop/src/App.vue index 2fc9e75cb7..057bfb3f82 100644 --- a/apps/desktop/src/App.vue +++ b/apps/desktop/src/App.vue @@ -2182,7 +2182,7 @@ function handleNativeSelectAll(e: KeyboardEvent) { if (shouldBlockAppNativeSelectAll(e)) e.preventDefault(); } -function handleKeydown(e: KeyboardEvent) { +async function handleKeydown(e: KeyboardEvent) { if (e.defaultPrevented) return; const shortcuts = settingsStore.editorSettings.shortcuts; @@ -2260,6 +2260,7 @@ function handleKeydown(e: KeyboardEvent) { } else if (showDriverStore.value) { closeDriverStorePage(); } else if (queryStore.activeTabId) { + if (await queryStore.clearQueryResults(queryStore.activeTabId)) return; queryStore.closeTab(queryStore.activeTabId); } return; diff --git a/apps/desktop/src/components/layout/ContentArea.vue b/apps/desktop/src/components/layout/ContentArea.vue index 6bb529f395..73d33dde48 100644 --- a/apps/desktop/src/components/layout/ContentArea.vue +++ b/apps/desktop/src/components/layout/ContentArea.vue @@ -419,6 +419,7 @@ const resultAutoSave = computed(() => props.activeTab.resultAutoSave === true); const activeResultRunItem = computed(() => resultRuns.value.find((run) => run.active)); const showResultRunTabs = computed(() => resultRuns.value.length > 0 && resultRunDisplayMode.value === "tabs"); const showResultRunSelector = computed(() => resultRuns.value.length > 0 && resultRunDisplayMode.value === "list"); +const canCloseQueryResult = computed(() => props.activeTab.mode === "query" && !props.activeTab.isExecuting && !props.activeTab.activeResultRunId && (!!props.activeTab.result || !!props.activeTab.results?.length || props.activeTab.resultEvicted === true)); watch( () => `${resultRunDisplayMode.value}:${resultRuns.value.map((run) => run.id).join(",")}:${props.activeTab.activeResultRunId ?? ""}`, () => { @@ -853,6 +854,11 @@ async function removeResultRun(runId: string) { activeRunTab?.scrollIntoView({ block: "nearest", inline: "nearest" }); } +async function closeCurrentQueryResult() { + if (!(await queryStore.closeQueryResult(props.activeTab.id))) return; + emit("update:activeOutputView", "result"); +} + async function selectResultRun(runId: string) { if (!(await queryStore.setActiveResultRun(props.activeTab.id, runId))) { toast(t("tabs.missingResultRun"), 4000); @@ -1056,6 +1062,9 @@ defineExpose({ focusSearch, refreshData, refreshQueryEditorCompletionCache, hand > +