From 14680238b83d5104c80b011c80dbd2269afbcbd3 Mon Sep 17 00:00:00 2001 From: t8y2 <1156263951@qq.com> Date: Mon, 11 May 2026 01:08:07 +0800 Subject: [PATCH] feat: editor enhancements, DataGrid refactor, and sidebar improvements MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add bracket auto-close and matching to SQL editor (closeBrackets, bracketMatching) - Show truncation warning banner when query results exceed 10,000 rows - Extract shared export format functions (CSV/JSON/SQL INSERT) to lib/exportFormats.ts - Add progressive rendering to sidebar tree (50-node cap with "show more") - Fix connection node expanding before connect succeeds - Split DataGrid.vue (3177→2535 lines) into 4 composables: useDataGridExport, useDataGridColumnResize, useDataGridSelection, useDataGridEditor --- package.json | 1 + pnpm-lock.yaml | 3 + src/components/editor/QueryEditor.vue | 8 +- src/components/grid/DataGrid.vue | 961 ++++----------------- src/components/sidebar/ConnectionTree.vue | 27 +- src/components/sidebar/TreeItem.vue | 45 +- src/composables/useDataGridColumnResize.ts | 125 +++ src/composables/useDataGridEditor.ts | 551 ++++++++++++ src/composables/useDataGridExport.ts | 257 ++++++ src/composables/useDataGridSelection.ts | 124 +++ src/i18n/locales/en.ts | 1 + src/i18n/locales/zh-CN.ts | 1 + src/lib/exportFormats.ts | 39 + 13 files changed, 1304 insertions(+), 839 deletions(-) create mode 100644 src/composables/useDataGridColumnResize.ts create mode 100644 src/composables/useDataGridEditor.ts create mode 100644 src/composables/useDataGridExport.ts create mode 100644 src/composables/useDataGridSelection.ts create mode 100644 src/lib/exportFormats.ts diff --git a/package.json b/package.json index 206f8ef9a..6d7be9806 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "@codemirror/autocomplete": "^6.20.1", "@codemirror/commands": "^6.10.3", "@codemirror/lang-sql": "^6.10.0", + "@codemirror/language": "^6.12.3", "@codemirror/state": "^6.6.0", "@codemirror/theme-one-dark": "^6.1.3", "@codemirror/view": "^6.41.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e6ab37ecc..5ae7fa3f0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,9 @@ importers: '@codemirror/lang-sql': specifier: ^6.10.0 version: 6.10.0 + '@codemirror/language': + specifier: ^6.12.3 + version: 6.12.3 '@codemirror/state': specifier: ^6.6.0 version: 6.6.0 diff --git a/src/components/editor/QueryEditor.vue b/src/components/editor/QueryEditor.vue index 01ba0d2b6..7a3f7b689 100644 --- a/src/components/editor/QueryEditor.vue +++ b/src/components/editor/QueryEditor.vue @@ -210,8 +210,9 @@ onMounted(async () => { { EditorState, Compartment, Prec }, { sql, MSSQL, MySQL, PostgreSQL, SQLDialect }, { basicSetup }, - { autocompletion, startCompletion }, + { autocompletion, startCompletion, closeBrackets, closeBracketsKeymap }, { indentWithTab }, + { bracketMatching }, ] = await Promise.all([ import("@codemirror/view"), import("@codemirror/state"), @@ -219,6 +220,7 @@ onMounted(async () => { import("codemirror"), import("@codemirror/autocomplete"), import("@codemirror/commands"), + import("@codemirror/language"), ]); editorViewModule = { EditorView, keymap } as typeof import("@codemirror/view"); fontThemeComp = new Compartment(); @@ -285,7 +287,9 @@ onMounted(async () => { override: [async (context: CompletionContext) => provideSqlCompletions(context.state, context.pos)], }), codeMirrorTheme.of(theme), - Prec.highest(keymap.of([indentWithTab])), + closeBrackets(), + bracketMatching(), + Prec.highest(keymap.of([...closeBracketsKeymap, indentWithTab])), runKeymap, wordWrapComp.of(ss.wordWrap ? EditorView.lineWrapping : []), EditorView.updateListener.of((update) => { diff --git a/src/components/grid/DataGrid.vue b/src/components/grid/DataGrid.vue index 2b76091a3..715226f32 100644 --- a/src/components/grid/DataGrid.vue +++ b/src/components/grid/DataGrid.vue @@ -5,7 +5,6 @@ const globalDdlOpen = ref(false);