import type * as headerAction from "../../header/action"; import type * as headerType from "../../header/type"; import type { CellRange, ColumnActionOption, ColumnIconOption, ColumnStyleOption, ColumnTypeOption, FieldDef, HeaderActionOption, HeaderStyleOption, HeaderTypeOption, LayoutObjectId, ListGridAPI, Message, } from "../../ts-types"; import type { BaseAction } from "../../columns/action"; import type { BaseColumn } from "../../columns/type/BaseColumn"; import type { BaseStyle as HeaderBaseStyle } from "../../header/style"; export type OldSortOption = | boolean | (string & keyof T) | ((order: "asc" | "desc", col: number, grid: ListGridAPI) => void); export interface BaseHeaderDefine { caption?: string | (() => string); width?: number | string; minWidth?: number | string; maxWidth?: number | string; headerField?: string; headerIcon?: ColumnIconOption | ColumnIconOption[]; headerStyle?: HeaderStyleOption | HeaderBaseStyle | null; headerType?: HeaderTypeOption | headerType.BaseHeader | null; headerAction?: HeaderActionOption | headerAction.BaseAction | null; sort?: OldSortOption; } // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface HeaderDefine extends BaseHeaderDefine {} export interface ColumnDefine extends BaseHeaderDefine { field?: FieldDef; icon?: ColumnIconOption | ColumnIconOption[]; message?: | Message | ((record: T) => Message | null) | keyof T | (Message | ((record: T) => Message | null) | keyof T)[]; columnType?: ColumnTypeOption | BaseColumn | null; action?: ColumnActionOption | BaseAction | null; style?: ColumnStyleOption | null; } export interface HeaderData { id: LayoutObjectId; caption?: string | (() => string); // eslint-disable-next-line @typescript-eslint/no-explicit-any field?: any; headerIcon?: ColumnIconOption | ColumnIconOption[]; style?: HeaderStyleOption | HeaderBaseStyle | null; headerType: headerType.BaseHeader; action?: headerAction.BaseAction; define: HeaderDefine; } export interface WidthData { width?: number | string; minWidth?: number | string; maxWidth?: number | string; } export interface ColumnData extends WidthData { id: LayoutObjectId; field?: FieldDef; icon?: ColumnIconOption | ColumnIconOption[]; message?: | Message | ((record: T) => Message | null) | keyof T | (Message | ((record: T) => Message | null) | keyof T)[]; columnType: BaseColumn; action?: BaseAction; style: ColumnStyleOption | null | undefined; define: ColumnDefine; } // Simple header export interface GroupHeaderDefine extends HeaderDefine { columns: HeadersDefine; } export type HeadersDefine = (GroupHeaderDefine | ColumnDefine)[]; // Advanced layout export interface HeaderCellDefine extends HeaderDefine { colSpan?: number; rowSpan?: number; } export interface CellDefine extends ColumnDefine { colSpan?: number; rowSpan?: number; } export type HeaderBodyLayoutDefine = { header: HeaderCellDefine[][]; body: CellDefine[][]; }; export type ArrayLayoutDefine = CellDefine[][]; export type LayoutDefine = HeaderBodyLayoutDefine | ArrayLayoutDefine; /** @internal */ interface LayoutMapAPI { readonly headerRowCount: number; readonly bodyRowCount: number; readonly colCount: number; readonly columnWidths: WidthData[]; readonly headerObjects: HeaderData[]; readonly columnObjects: ColumnData[]; getHeader(col: number, row: number): HeaderData; getBody(col: number, row: number): ColumnData; getCellId(col: number, row: number): LayoutObjectId; getCellRange(col: number, row: number): CellRange; getBodyLayoutRangeById(id: LayoutObjectId): CellRange; getRecordIndexByRow(row: number): number; getRecordStartRowByRecordIndex(index: number): number; } export type { LayoutMapAPI };