From d4f4538843ff9a899ef5f2eca301238663cb9958 Mon Sep 17 00:00:00 2001 From: t8y2 <1156263951@qq.com> Date: Tue, 8 Sep 2026 23:22:14 +0800 Subject: [PATCH] refactor(grid): split cell detail panels --- apps/desktop/src/components/grid/DataGrid.vue | 90 ++++--------------- .../grid/DataGridCellDetailHeader.vue | 72 +++++++++++++++ .../grid/DataGridCellDetailHexViewer.vue | 40 +++++++++ .../grid/__tests__/DataGridSurfaces.spec.ts | 5 +- 4 files changed, 129 insertions(+), 78 deletions(-) create mode 100644 apps/desktop/src/components/grid/DataGridCellDetailHeader.vue create mode 100644 apps/desktop/src/components/grid/DataGridCellDetailHexViewer.vue diff --git a/apps/desktop/src/components/grid/DataGrid.vue b/apps/desktop/src/components/grid/DataGrid.vue index 8f2e6bb9f8..0ba13b7217 100644 --- a/apps/desktop/src/components/grid/DataGrid.vue +++ b/apps/desktop/src/components/grid/DataGrid.vue @@ -37,8 +37,6 @@ import { Link2, ListTree, Maximize2, - PanelBottom, - PanelRight, RefreshCw, RefreshCcw, TableProperties, @@ -64,7 +62,7 @@ import LightTooltip from "@/components/ui/LightTooltip.vue"; import { Popover, PopoverAnchor, PopoverContent, PopoverTrigger } from "@/components/ui/popover"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { Switch } from "@/components/ui/switch"; -import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; +import { Tabs, TabsContent } from "@/components/ui/tabs"; import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip"; import ErrorBanner from "@/components/ui/ErrorBanner.vue"; import DangerConfirmDialog from "@/components/editor/DangerConfirmDialog.vue"; @@ -80,6 +78,8 @@ import DataGridFilterWorkbench from "@/components/grid/DataGridFilterWorkbench.v import DataGridTextFilterWorkbench from "@/components/grid/DataGridTextFilterWorkbench.vue"; import DataGridTableInfoPanels from "@/components/grid/DataGridTableInfoPanels.vue"; import DataGridColumnFilterPopover from "@/components/grid/DataGridColumnFilterPopover.vue"; +import DataGridCellDetailHeader from "@/components/grid/DataGridCellDetailHeader.vue"; +import DataGridCellDetailHexViewer from "@/components/grid/DataGridCellDetailHexViewer.vue"; import TemporalCellEditor from "@/components/grid/TemporalCellEditor.vue"; import EnumCellEditor from "@/components/grid/EnumCellEditor.vue"; import DataGridReadonlyTextSelection from "@/components/grid/DataGridReadonlyTextSelection.vue"; @@ -13668,49 +13668,17 @@ function openGridSnapshot() {
-
- -
- - {{ t("grid.cellDetails") }} - - {{ t("grid.hexViewer") }} - - - {{ t("grid.valueEditor") }} - - -
-
- - - - - -
-
+ - -
-
{{ t("grid.hexViewer") }}
-
- {{ - t("grid.hexViewerByteCount", { - count: activeBinaryHexByteCount, - }) - }} -
-
-
-
-
{{ t("grid.hexViewerOffset") }}
-
{{ t("grid.hexViewerHex") }}
-
{{ t("grid.hexViewerAscii") }}
-
-
-
- {{ row.offset }} -
-
{{ row.hex }}
-
{{ row.ascii }}
-
-
- {{ t("grid.hexViewerEmpty") }} -
-
-
+
diff --git a/apps/desktop/src/components/grid/DataGridCellDetailHeader.vue b/apps/desktop/src/components/grid/DataGridCellDetailHeader.vue new file mode 100644 index 0000000000..cbd87f52fb --- /dev/null +++ b/apps/desktop/src/components/grid/DataGridCellDetailHeader.vue @@ -0,0 +1,72 @@ + + + diff --git a/apps/desktop/src/components/grid/DataGridCellDetailHexViewer.vue b/apps/desktop/src/components/grid/DataGridCellDetailHexViewer.vue new file mode 100644 index 0000000000..464ab1d5e4 --- /dev/null +++ b/apps/desktop/src/components/grid/DataGridCellDetailHexViewer.vue @@ -0,0 +1,40 @@ + + + diff --git a/apps/desktop/src/components/grid/__tests__/DataGridSurfaces.spec.ts b/apps/desktop/src/components/grid/__tests__/DataGridSurfaces.spec.ts index 9cb5092c16..bba66310f4 100644 --- a/apps/desktop/src/components/grid/__tests__/DataGridSurfaces.spec.ts +++ b/apps/desktop/src/components/grid/__tests__/DataGridSurfaces.spec.ts @@ -102,6 +102,7 @@ import DataGridSearchBar from "@/components/grid/DataGridSearchBar.vue"; const dataGridSource = readFileSync("apps/desktop/src/components/grid/DataGrid.vue", "utf8"); const cellDetailPanelSource = readFileSync("apps/desktop/src/components/grid/DataGridCellDetailPanel.vue", "utf8"); +const cellDetailHeaderSource = readFileSync("apps/desktop/src/components/grid/DataGridCellDetailHeader.vue", "utf8"); const globalsCss = readFileSync("apps/desktop/src/styles/globals.css", "utf8"); function detail(patch: Partial = {}): DataGridCellDetail { @@ -1367,9 +1368,7 @@ describe("DataGridTextFilterWorkbench", () => { describe("cell detail surfaces", () => { it("keeps detail tabs and editor actions usable when the panel narrows", () => { - const tabsStart = dataGridSource.indexOf('\s*/); const triggerClasses = Array.from(tabsHeader.matchAll(/]*class="([^"]+)"/g), ([, classes]) => classes.split(/\s+/));