import * as React from "react"; export type TFilterAction = "add" | "remove" | "clear"; export type TFilterType = "subtractive" | "additive"; export interface IAddFilter { type: "add"; key: any; value: React.ReactNode; } export interface IRemoveFilter { type: "remove"; key: any; value: React.ReactNode; } export interface IClearFilters { type: "clear"; } export type FilterActions = IAddFilter | IRemoveFilter | IClearFilters; export interface IFilter { key: any; value: React.ReactNode; } export type TSortDirection = "asc" | "desc"; export interface IUseDataTableResult { data: T[]; } export interface ISortParameters { key: keyof T; direction: TSortDirection; } export interface IDataTableOptions { download?: boolean; filter?: { filterBy?: Array; filtering?: TFilterType; }; hideHeaders?: boolean; paginate?: boolean; print?: boolean; rowsPerPage?: number; rowsPerPageArray?: number[]; sort?: { initialSortBy?: ISortParameters; }; } export interface IDataTableOptionsBar extends IDataTableOptions { onDownload?: () => void; onPrint?: () => void; onFilter?: () => void; } export interface IUseDataTableState { currentPage: number; data: T[]; error: any; rowsPerPage: number; sortParameters: ISortParameters; totalRows: number; totalPages: number; } export interface IUseDataTableSettings { data?: T[]; fetch?(): Promise>; options: IDataTableOptions; } export interface IFilterParameters { name: keyof T; values: React.ReactNode[]; }