import { ReactElement } from 'react'; import { AggregateDescriptor, CompositeFilterDescriptor, GroupDescriptor, SortDescriptor, DataResult, GroupResult, DataSource, IdType } from '@servicetitan/data-query'; import { ExcelExport, ExcelExportData, ExcelExportColumnProps } from '@progress/kendo-react-excel-export'; import { TableExpandChangeEvent, TableFilterChangeEvent, TableGroupChangeEvent, TablePageChangeEvent, TableSortChangeEvent } from '@servicetitan/design-system'; import { GridPDFExport as TablePDFExport } from '@progress/kendo-react-pdf'; import { WorkbookOptions } from '@progress/kendo-ooxml'; import { FormState, FieldState } from 'formstate'; export type Selectable = { readonly selected: boolean | undefined; } & T; export type Editable = { readonly inEdit: boolean | undefined; } & T; export type Expandable = { readonly expanded: boolean | undefined; } & T; export type Materialized = { readonly materializedPath: string; } & T; type Data = DataResult['data']; export declare function isGroupItem(item: T | GroupResult, groups: GroupDescriptor[]): item is GroupResult; export type PossibleFormState = FormState<{ [P in keyof T]-?: FieldState; }>; export interface TableStateModel { skip: number; selectedIds: TId[]; expandedIds: TId[]; collapsedGroups: string[]; sort: SortDescriptor[]; filter?: CompositeFilterDescriptor; aggregates: AggregateDescriptor[]; group: GroupDescriptor[]; } export interface TableStateConstructorParams { dataSource?: DataSource | null; pageSize?: number; /** For use with tables that enable selection only. Specifies if the item is selectable in the checkbox */ isRowUnselectable?: (row: T) => boolean; /** * Initial expand state for row details * collapsed - row details are collapsed by default * expanded - row details are expanded until it will be collapsed */ rowDetailsExpandState?: 'collapsed' | 'expanded'; selectionLimit?: number; getFormState?(row: T): PossibleFormState; parent?: { row: P; tableState: TableState; }; getDetailTableState?: (row: T) => TableState | undefined; initialState?: TableStateModel; alwaysEditable?: boolean; rowIdKey?: string; } interface FetchDataParams { newSkip?: number; newSort?: SortDescriptor[]; newFilter?: CompositeFilterDescriptor | null; newAggregates?: AggregateDescriptor[]; newGroup?: GroupDescriptor[]; } interface SelectionOptions { ignoreUnselectable?: boolean; recursive?: boolean; } interface SetDataSourceParams { reset?: boolean; initialState?: TableStateModel; } interface EditingForm { form: PossibleFormState; field?: keyof T; } /** Interface for unit testing purposes.*/ export interface ITableState { totalCount?: number; selectedCount?: number; addToDataSource?: (row: T, select?: boolean) => Promise; removeFromDataSource?: (id: TId) => Promise; selectAll?: () => Promise; deselectAll?: () => void; setDataSource?: (dataSource: DataSource | null, setDataSourceParams?: boolean | SetDataSourceParams) => Promise; isRowUnselectable?: (row: T) => boolean; } export declare class TableState { private innerDataSource; get dataSource(): DataSource | null; private traverse; private get originalData(); parent?: { row: P; tableState: TableState; }; getDetailTableState?: (row: T) => TableState | undefined; selectedIds: Set; inEdit: Map>; expandedIds: Set; collapsedIds: Set; collapsedGroups: Set; isRowUnselectable: (row: T) => boolean; selectionLimit: number; getFormState?(row: T): PossibleFormState; data: Data>; totalCount: number; filteredCount: number; selectedCount: number; unselectableCount: number; get unselectedCount(): number; get selectableCount(): number; get filteredUnselectableCount(): number; get filteredSelectableCount(): number; private get totalFilteredSelectableCountPromise(); get totalFilteredSelectableCount(): number; sort: SortDescriptor[]; filter: CompositeFilterDescriptor | undefined; aggregates: AggregateDescriptor[]; innerGroup: GroupDescriptor[]; get group(): GroupDescriptor[]; set group(value: GroupDescriptor[]); skip: number; pageSize?: number; private tablePdfExport; private tableExcelExport; private readonly rowDetailsExpandState; rowIdKey?: string; alwaysEditable: boolean; constructor({ dataSource, rowIdKey, pageSize, isRowUnselectable, rowDetailsExpandState, selectionLimit, getFormState, parent, getDetailTableState, initialState, alwaysEditable, }?: TableStateConstructorParams); addToDataSource(row: T, select?: boolean, index?: number): Promise; removeFromDataSource(id: TId): Promise; setRowsSelection(rows: T[], value: boolean, { ignoreUnselectable, recursive }?: SelectionOptions): Promise; selectPage(options?: SelectionOptions): Promise; deselectPage(options?: SelectionOptions): Promise; private setAllSelection; selectAll(options?: SelectionOptions): Promise; deselectAll(options?: SelectionOptions): Promise; edit(row: T, field?: keyof T): void; saveEdit(row: T, beforeSave?: (changed: T, field?: keyof T) => Promise): Promise; cancelEdit(row: T): void; editAll(): Promise; saveEditAll(beforeSave?: (changed: T[]) => Promise): Promise; cancelEditAll(): void; reset(): void; setDataSource(dataSource: DataSource | null, setDataSourceParams?: SetDataSourceParams | boolean): Promise; private fetchInitialData; private addPropertiesToRows; handleFilterChange: (ev: TableFilterChangeEvent) => void; handleGroupChange: (ev: TableGroupChangeEvent) => void; handleExpandChange: ({ dataItem, value }: TableExpandChangeEvent) => void; handleSortChange: (ev: TableSortChangeEvent) => void; handlePageChange: (ev: TablePageChangeEvent) => void; /** Call without params if unchanged */ fetchData: ({ newSkip, newSort, newFilter, newAggregates, newGroup, }?: FetchDataParams) => Promise; isRowSelectable: (row: Selectable) => boolean; toggleRowSelection(row: T, options?: SelectionOptions): Promise; get isAllPageRowsSelected(): boolean; get isSomePageRowsSelected(): boolean; get isAllRowsSelected(): boolean; get isSomeRowsSelected(): boolean; setTablePdfExportRef: (el: TablePDFExport | null) => TablePDFExport | null; setTableExcelExportRef: (el: ExcelExport | null) => ExcelExport | null; exportPdf: () => Promise; exportExcel: (data?: any[] | ExcelExportData | WorkbookOptions, columns?: ExcelExportColumnProps[] | ReactElement[]) => Promise; filteredSortedUnpaginatedData: () => Promise>; getRowsBetween: (start: Selectable, end: Selectable) => Selectable[]; exportState(): TableStateModel; importState(data: TableStateModel): void; private updateExpandState; } export {}; //# sourceMappingURL=table-state.d.ts.map