export interface InfiniteScrollTableData { id: string; flight_number: number; name: string; date_utc: string; success: boolean; details?: string; links: { patch: { small?: string; large?: string; }; }; rocket: { name: string; }; } export interface InfiniteScrollApiResponse { docs: InfiniteScrollTableData[]; totalDocs: number; limit: number; page: number; totalPages: number; pagingCounter: number; hasPrevPage: boolean; hasNextPage: boolean; prevPage?: number; nextPage?: number; } export interface ResizableColumn { title: string; key: string; dataIndex?: string | string[]; width: number; render?: (value: any, record: T, index?: number) => React.ReactNode; onHeaderCell?: (column: any) => { width: number; onResize: (newWidth: number) => void; }; } export interface ApiResponse { docs: T[]; totalDocs: number; limit: number; page: number; totalPages: number; pagingCounter: number; hasPrevPage: boolean; hasNextPage: boolean; prevPage?: number; nextPage?: number; } export interface FetchService { fetchData: (params: { pageParam: number; }) => Promise>; queryKey: string[]; } export interface InfiniteScrollTableProps { instanceId: string; columns: ResizableColumn[]; fetchService: FetchService; title?: string; scrollHeight?: number; scrollWidth?: number; useWindowScroll?: boolean; onChange?: (event: InfiniteScrollChangeEvent) => void; rowSelection?: { type?: "checkbox" | "radio"; selectedRowKeys?: React.Key[]; onChange?: (selectedRowKeys: React.Key[], selectedRows: T[]) => void; getCheckboxProps?: (record: T) => { name?: string; disabled?: boolean; }; }; onRowClick?: (record: T, index: number, event: React.MouseEvent) => void; onRowSelectionChange?: (setSelectedRowKeys: (keys: React.Key[]) => void) => void; onDataChange?: (data: T[]) => void; filterFn?: (data: T[]) => T[]; hasBulkSelection?: boolean; } export interface InfiniteScrollChangeEvent { totalPages: number; currentPage: number; resultsShown: number; totalResults: number; }