46 lines
1.4 KiB
TypeScript
46 lines
1.4 KiB
TypeScript
import type { ColumnConfig } from "@/components/type/DataGrid.type";
|
|
import type { GridView } from "realgrid";
|
|
|
|
export type ExcelExportVisibilitySnapshot = Map<string, boolean>;
|
|
|
|
/** 엑셀보내기 직전: 제외 컬럼 숨김, 그리드용 숨김(visible:false) 컬럼은 export에만 표시 */
|
|
export function prepareGridColumnsForExcelExport(
|
|
gridView: GridView,
|
|
columns: ColumnConfig[],
|
|
): ExcelExportVisibilitySnapshot {
|
|
const excludedNames = new Set(
|
|
columns.filter((c) => c.excludeFromExcelExport).map((c) => c.name),
|
|
);
|
|
const snapshot = new Map<string, boolean>();
|
|
|
|
columns.forEach((col) => {
|
|
const gridCol = gridView.columnByName?.(col.name);
|
|
if (!gridCol) return;
|
|
|
|
const wasVisible = gridCol.visible !== false;
|
|
snapshot.set(col.name, wasVisible);
|
|
|
|
if (excludedNames.has(col.name)) {
|
|
gridCol.visible = false;
|
|
} else if (col.visible === false) {
|
|
gridCol.visible = true;
|
|
}
|
|
});
|
|
|
|
return snapshot;
|
|
}
|
|
|
|
export function restoreGridColumnsAfterExcelExport(
|
|
gridView: GridView,
|
|
snapshot: ExcelExportVisibilitySnapshot,
|
|
): void {
|
|
snapshot.forEach((visible, name) => {
|
|
const gridCol = gridView.columnByName?.(name);
|
|
if (gridCol) gridCol.visible = visible;
|
|
});
|
|
}
|
|
|
|
export function shouldPrepareColumnsForExcelExport(columns: ColumnConfig[]): boolean {
|
|
return columns.some((c) => c.excludeFromExcelExport || c.visible === false);
|
|
}
|