import type { QueryParamConfig, ResponseMapping } from '../../api'; import type { BaseEntity, CoreTableColumnDef, SortConfig } from '../../pagamio-table/data-table/types'; /** * Props interface for usePagamioTable hook */ export interface UsePagamioTableProps { /** Function to fetch data from the API */ fetchData?: (query?: Record, signal?: AbortSignal) => Promise; /** Data for client-side operations */ data?: T[]; /** Table column definitions */ columns: CoreTableColumnDef[]; /** Initial filter values */ defaultFilters?: Record; /** Configuration for response structure mapping */ responseMapping?: ResponseMapping; /** Configuration for query parameter formatting */ queryParamConfig?: QueryParamConfig; /** Pagination configuration */ pagination?: { enabled: boolean; mode: 'client' | 'server'; pageSize?: number; pageIndex?: number; }; /** Filtering configuration */ filtering?: { enabled: boolean; mode: 'client' | 'server'; searchMode?: 'client' | 'server'; }; /** Sorting configuration */ sorting?: { enabled: boolean; mode: 'client' | 'server'; }; } interface UsePagamioTableReturn { data: T[]; totalItems: number; loading: boolean; error: string | null; currentPage: number; itemsPerPage: number; searchQuery: string; selectedFilters: Record; appliedFilters: Record; sortConfig: SortConfig; columns: CoreTableColumnDef[]; handleApplyFilters: () => void; handlePageChange: (newPage: number) => void; handlePaginationChange: (newPageIndex: number, newPageSize: number) => void; setSearchQuery: (query: string) => void; setCurrentPage: (page: number) => void; setItemsPerPage: (size: number) => void; handleFilterChange: (columnKey: string, value: string) => void; handleSort: (sortBy: string, sortDir: 'asc' | 'desc') => void; handleClearFilters: () => void; refresh: () => void; } export declare const springBootMapping: ResponseMapping; export declare const arrayResponseMapping: ResponseMapping; /** * Custom hook for managing table data with pagination, sorting, and filtering. * Supports both client-side and server-side operations. * * @template T - The type of data items in the table. Must extend `BaseEntity`. * * @param {UsePagamioTableProps} props - Configuration options for the hook. * @param {Function} [props.fetchData] - Function to fetch data from the API (required for server-side operations). * @param {T[]} [props.data] - Initial data for client-side operations. * @param {CoreTableColumnDef[]} props.columns - Column definitions for the table. * @param {Record} [props.defaultFilters] - Initial filter values. * @param {ResponseMapping} [props.responseMapping] - Configuration for mapping API response structure. * @param {QueryParamConfig} [props.queryParamConfig] - Configuration for query parameter formatting. * @param {Object} [props.pagination] - Pagination configuration. * @param {boolean} [props.pagination.enabled] - Whether pagination is enabled. * @param {'client' | 'server'} [props.pagination.mode] - Pagination mode ('client' or 'server'). * @param {number} [props.pagination.pageSize] - Default page size. * @param {Object} [props.filtering] - Filtering configuration. * @param {boolean} [props.filtering.enabled] - Whether filtering is enabled. * @param {'client' | 'server'} [props.filtering.mode] - Filtering mode ('client' or 'server'). * @param {Object} [props.sorting] - Sorting configuration. * @param {boolean} [props.sorting.enabled] - Whether sorting is enabled. * @param {'client' | 'server'} [props.sorting.mode] - Sorting mode ('client' or 'server'). * * @returns {Object} - Table state and utility functions. * @returns {T[]} data - The processed and paginated data. * @returns {number} totalItems - Total number of items (for server-side pagination). * @returns {boolean} loading - Whether data is being fetched. * @returns {string | null} error - Error message, if any. * @returns {number} currentPage - Current page index. * @returns {number} itemsPerPage - Number of items per page. * @returns {string} searchQuery - Current search query. * @returns {Record} appliedFilters - Currently applied filters. * @returns {Record} selectedFilters - Currently selected filters. * @returns {SortConfig} sortConfig - Current sorting configuration. * @returns {CoreTableColumnDef[]} columns - Column definitions. * @returns {Function} handleApplyFilters - Function to apply filters. * @returns {Function} handlePageChange - Function to change the current page. * @returns {Function} handlePaginationChange - Function to change pagination settings. * @returns {Function} setSearchQuery - Function to update the search query. * @returns {Function} setCurrentPage - Function to update the current page. * @returns {Function} setItemsPerPage - Function to update the items per page. * @returns {Function} handleFilterChange - Function to update filters. * @returns {Function} handleSort - Function to update sorting. * @returns {Function} handleClearFilters - Function to clear all filters. * @returns {Function} refresh - Function to manually refresh the table data. */ export declare const usePagamioTable: ({ fetchData, data: clientData, columns, defaultFilters, responseMapping, queryParamConfig, pagination, filtering, sorting, }: UsePagamioTableProps) => UsePagamioTableReturn; export {}; /** * Example usage of the `usePagamioTable` hook. * * @example * const table = usePagamioTable({ * fetchData: fetchProducts, * columns: columns as unknown as CoreTableColumnDef[], * defaultFilters: initialFilters, * pagination: { enabled: true, mode: "server" }, * filtering: { enabled: true, mode: "server" }, * queryParamConfig: { * filtering: { searchParam: "name", filterFormat: "flat" }, * }, * }); * * // Render the table * return ( * table.setSearchQuery(e.target.value), * }} * onClearFilters={table.handleClearFilters} * /> * ); */