feat(grid): incremental column freeze and single-column unfreeze

This commit is contained in:
二丫讲梵 authored and GitHub committed 2026-09-19 09:28:38 +08:00
1 parent 1f43d184aa
commit bb4fb6c83a
14 files changed
+108 -26

No files matched your search

+27 -4
View File
@@ -1981,7 +1981,8 @@ const {
onTableDataGridColumnOrderChanged,
frozenColumnCount,
freezeToColumn,
freezeSelectedColumns: freezeSelectedColumnsInLayout,
freezeSelectedColumnsIncrementally,
unfreezeSelectedColumns,
unfreezeAllColumns: unfreezeAllColumnsInLayout,
} = useDataGridColumnLayoutState({
columns: computed(() => props.result.columns),
@@ -2329,7 +2330,15 @@ function resetColumnOrder() {
}
function freezeSelectedColumns(selectedVisibleColumnIndexes: number[]) {
applyColumnOrderChange(() => freezeSelectedColumnsInLayout(selectedVisibleColumnIndexes));
applyColumnOrderChange(() => freezeSelectedColumnsIncrementally(selectedVisibleColumnIndexes));
}
function freezeCurrentOrSelectedColumns(selectedVisibleColumnIndexes: number[]) {
applyColumnOrderChange(() => freezeSelectedColumnsIncrementally(selectedVisibleColumnIndexes));
}
function unfreezeCurrentOrSelectedColumns(selectedVisibleColumnIndexes: number[]) {
applyColumnOrderChange(() => unfreezeSelectedColumns(selectedVisibleColumnIndexes));
}
function unfreezeAllColumns() {
@@ -11614,8 +11623,10 @@ const gridContextMenuItems = computed<ContextMenuItem[]>(() => {
localDescending: t("grid.sortCurrentPageDescending"),
clearSort: t("grid.clearSort"),
freezeToColumn: t("grid.freezeToColumn"),
freezeSelectedColumns: t("grid.freezeSelectedColumns"),
unfreezeColumns: t("grid.unfreezeColumns"),
freezeSelectedColumns: t("grid.freezeSelectedColumns", { count: selectedColumnCount }),
freezeCurrentColumn: t("grid.freezeCurrentColumn"),
unfreezeCurrentColumn: t("grid.unfreezeCurrentColumn"),
unfreezeColumns: t("grid.unfreezeColumns", { count: frozenColumnCount.value }),
hideColumn: t("grid.hideColumn"),
hideSelectedColumns: t("grid.hideSelectedColumns", { count: selectedColumnCount }),
showAllColumnsMenu: t("grid.showAllColumnsMenu"),
@@ -11645,6 +11656,18 @@ const gridContextMenuItems = computed<ContextMenuItem[]>(() => {
freezeSelectedColumns(selectedVisibleColumnIndexes());
clearCellSelection();
},
freezeCurrentColumn: () => {
const indexes = selectedVisibleColumnIndexes();
const idx = contextHeaderVisibleColIdx.value;
freezeCurrentOrSelectedColumns(indexes.length > 1 ? indexes : idx === null ? [] : [idx]);
clearCellSelection();
},
unfreezeCurrentColumn: () => {
const indexes = selectedVisibleColumnIndexes();
const idx = contextHeaderVisibleColIdx.value;
unfreezeCurrentOrSelectedColumns(indexes.length > 1 ? indexes : idx === null ? [] : [idx]);
clearCellSelection();
},
unfreezeColumns: () => {
unfreezeAllColumns();
clearCellSelection();
@@ -299,7 +299,7 @@ describe("DataGrid context menu target lifecycle", () => {
await settle();
expect(contextMenuLabels()).toContain("Copy Selected Column Names (2)");
expect(contextMenuLabels()).toContain("Freeze Selected Columns");
expect(contextMenuLabels()).toContain("Freeze Selected Columns (2)");
});
it("offers snapshots for full-column selections from the column header", async () => {