import { TemplateRef } from '@angular/core'; import { AbstractControl, AbstractControlOptions, AsyncValidatorFn, FormControl, ValidatorFn } from '@angular/forms'; export interface ColumnDefinition { id: string; header: string | ((context: any) => any); accessorKey?: keyof T; accessorFn?: (row: T) => any; cellTemplate?: TemplateRef; cellEditTemplate?: TemplateRef; headerTemplate?: TemplateRef; footerTemplate?: TemplateRef; sortAction?: 'ASC' | 'DESC'; formControlName?: string; groupName?: string; validatorFn?: (value: T[keyof T]) => boolean; importKey?: keyof T; canImport?: boolean; canExport?: boolean; importBy?: keyof T | ((importedRow: any) => T[keyof T]); exportBy?: keyof T | ((row: T) => any); isHidden?: boolean; } export type DataWithKey = { _key: string | number; _key_prop: keyof T | '_index'; originalData: T; }; export type GroupedDataRow = DataWithKey & { isGroupRow?: boolean; groupValue?: any; groupTitle?: any; }; export type FormControlOf = { [K in keyof T]?: FormControl; }; export interface FormGroupConfig { controls: TControl; validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null; asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null; } export type EditedData = { [K in keyof T]?: T[K] extends object ? Partial : T[K]; };