From 44784d664cd4af5aa6d491f043b9ce62e25d02df Mon Sep 17 00:00:00 2001 From: jean Date: Tue, 4 Aug 2026 13:01:50 +0800 Subject: [PATCH] feat(desktop): add DDL shortcut and grid row delete action --- apps/desktop/src/components/grid/DataGrid.vue | 31 ++++++++++++++++++- .../src/components/grid/DataGridToolbar.vue | 13 +++++++- .../src/components/sidebar/ConnectionTree.vue | 18 ++++++++++- apps/desktop/src/i18n/locales/en.ts | 1 + apps/desktop/src/i18n/locales/es.ts | 1 + apps/desktop/src/i18n/locales/it.ts | 1 + apps/desktop/src/i18n/locales/ja.ts | 1 + apps/desktop/src/i18n/locales/ko.ts | 1 + apps/desktop/src/i18n/locales/pt-BR.ts | 1 + apps/desktop/src/i18n/locales/zh-CN.ts | 1 + apps/desktop/src/i18n/locales/zh-TW.ts | 1 + .../dataGrid/dataGridToolbar.spec.ts | 12 +++++++ .../dataGrid/dataGridToolbarDeleteRow.spec.ts | 24 ++++++++++++++ .../__tests__/editor/shortcutRegistry.spec.ts | 2 +- .../sidebar/sidebarTreeDdlShortcut.spec.ts | 25 +++++++++++++++ .../src/lib/dataGrid/dataGridToolbar.ts | 8 +++++ .../src/lib/editor/keyboardShortcuts.ts | 4 +++ .../src/lib/editor/shortcutRegistry.ts | 7 +++++ .../src/lib/sidebar/sidebarTreeDdlShortcut.ts | 9 ++++++ 19 files changed, 157 insertions(+), 4 deletions(-) create mode 100644 apps/desktop/src/lib/__tests__/dataGrid/dataGridToolbarDeleteRow.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/sidebar/sidebarTreeDdlShortcut.spec.ts create mode 100644 apps/desktop/src/lib/sidebar/sidebarTreeDdlShortcut.ts diff --git a/apps/desktop/src/components/grid/DataGrid.vue b/apps/desktop/src/components/grid/DataGrid.vue index f772efab50..269e38c4bd 100644 --- a/apps/desktop/src/components/grid/DataGrid.vue +++ b/apps/desktop/src/components/grid/DataGrid.vue @@ -215,7 +215,16 @@ import { useQueryStore } from "@/stores/queryStore"; import { useSettingsStore } from "@/stores/settingsStore"; import { simpleDataGridOrderByMatchesSort, simpleDataGridOrderByReferencesMissingColumn, type DataGridSortDirection, type DataGridSortMode } from "@/lib/dataGrid/dataGridSort"; import { buildOrderedGridRows, type GridInsertRowPosition, type GridNewRowPlacement } from "@/lib/dataGrid/gridNewRowPlacement"; -import { DATA_GRID_CONDITION_TOOLBAR_MIN_WIDTH, isDataGridToolbarCompact, type DataGridReloadIntent, type DataGridToolbarActionCapability, type DataGridToolbarAddRowCapability, type DataGridToolbarAutoRefreshCapability, type DataGridToolbarSaveCapability } from "@/lib/dataGrid/dataGridToolbar"; +import { + DATA_GRID_CONDITION_TOOLBAR_MIN_WIDTH, + dataGridDeleteRowToolbarState, + isDataGridToolbarCompact, + type DataGridReloadIntent, + type DataGridToolbarActionCapability, + type DataGridToolbarAddRowCapability, + type DataGridToolbarAutoRefreshCapability, + type DataGridToolbarSaveCapability, +} from "@/lib/dataGrid/dataGridToolbar"; import { getTableMetadataCapabilities } from "@/lib/table/tableMetadataCapabilities"; import { getTableStructureCapabilities } from "@/lib/table/tableStructureCapabilities"; import { filterObjectBrowserTableColumns } from "@/lib/table/objectBrowserTableInfo"; @@ -3416,6 +3425,25 @@ const addRowToolbarCapability = computed(() => onTrigger: addRow, onSelect: handleAddRowMenuSelect, })); +const deleteRowToolbarTargetCount = computed(() => deletableRowIds(selectedOrCurrentRowIds()).length); +const deleteRowToolbarState = computed(() => + dataGridDeleteRowToolbarState({ + editable: !!props.editable, + canDeleteRows: canDeleteRows.value, + canDeleteExistingRows: canDeleteExistingRows.value, + deletableTargetCount: deleteRowToolbarTargetCount.value, + isSaving: isSaving.value, + }), +); +const deleteRowToolbarCapability = computed(() => ({ + label: deleteRowToolbarTargetCount.value > 1 ? t("grid.deleteRows", { count: deleteRowToolbarTargetCount.value }) : t("grid.deleteRow"), + tooltip: `${t("grid.deleteRow")} (${formatShortcut(settingsStore.editorSettings.shortcuts.deleteCurrentRow)})`, + visible: deleteRowToolbarState.value.visible, + disabled: deleteRowToolbarState.value.disabled, + onTrigger: () => { + deleteCurrentRow(); + }, +})); const previewToolbarCapability = computed(() => ({ label: t(previewLabelKey.value), visible: saveToolbarState.value.showActions && pendingChangeCount.value > 0, @@ -8479,6 +8507,7 @@ const gridContextMenuItems = computed(() => { :refresh="refreshToolbarCapability" :auto-refresh="autoRefreshToolbarCapability" :add-row="addRowToolbarCapability" + :delete-row="deleteRowToolbarCapability" :preview="previewToolbarCapability" :save="saveToolbarCapability" :rollback="rollbackToolbarCapability" diff --git a/apps/desktop/src/components/grid/DataGridToolbar.vue b/apps/desktop/src/components/grid/DataGridToolbar.vue index ae9f16ffcb..d173fafeee 100644 --- a/apps/desktop/src/components/grid/DataGridToolbar.vue +++ b/apps/desktop/src/components/grid/DataGridToolbar.vue @@ -1,6 +1,6 @@