UNPKG

copper-ui

Version:

Modern React UI components library with TypeScript support, built on top of Ant Design

57 lines 4.11 kB
import { TTableColumnOrGroup } from '../../model/col.types'; import { InferFiltersFromColumns, TTableQuickFilter, TTableQuickFiltersConfig } from '../../model/filter.types'; import { TTableSetFilters, TTableSortState } from '../../model/sort.types'; import { TTableItem } from '../../model/table.types'; export type TTableState<TItem extends TTableItem, T extends readonly TTableColumnOrGroup<TItem>[], Q extends TTableQuickFilter[]> = ReturnType<typeof useTableStates<TItem, T, Q>>; export type TUseTableStatesProps<TItem extends TTableItem, T extends readonly TTableColumnOrGroup<TItem>[], Q extends TTableQuickFilter[]> = { columns: T; quickFilters?: TTableQuickFiltersConfig; filtersDebounceDelay?: number; debounceFields?: (keyof InferFiltersFromColumns<TItem, T, Q>)[]; prefix?: string; }; /** * Хук для управления состоянием таблицы, включая сортировку, пагинацию и фильтрацию. * Синхронизирует состояние пагинации и фильтрации с URL с помощью nuqs. * Предоставляет доступ к управляемым состояниям таблицы и функциям для их изменения. * * @template TItem - Тип элемента данных в таблице. * @template T - Тип массива колонок таблицы. * @template Q - Тип массива быстрых фильтров. * * @param {TUseTableStatesProps} props - Параметры конфигурации хука. * @param {T} props.columns - Массив определений колонок таблицы. * Каждая колонка должна включать определение фильтрации, если она должна быть фильтруемой. * @param {TTableQuickFiltersConfig} [props.quickFilters] - Конфигурация быстрых фильтров. * Если не указано, быстрые фильтры не будут использоваться. * @param {number} [props.filtersDebounceDelay=300] - Задержка debounce для значений фильтров (в миллисекундах). * По умолчанию 300ms. * @param {Array<keyof InferFiltersFromColumns<TItem, T, Q>>} [props.debounceFields] - * Массив полей (ключей фильтров), для которых следует применять debounce. * Если не указано, debounce применяется к полям фильтрации типа "input" или "input-number". * @param {string} [props.prefix] - Префикс для параметров URL, используемых для пагинации. * Если указан, параметры в URL будут иметь вид `prefix_pageIndex`. * * @returns {object} Объект, содержащий управляемые состояния таблицы и функции для их изменения. */ declare const useTableStates: <TItem extends TTableItem, T extends readonly TTableColumnOrGroup<TItem>[], Q extends TTableQuickFilter[]>({ columns, quickFilters, filtersDebounceDelay, debounceFields, prefix, }: TUseTableStatesProps<TItem, T, Q>) => { sort: TTableSortState; setSort: import('../../../../../node_modules/.pnpm/react@19.1.1/node_modules/react').Dispatch<import('../../../../../node_modules/.pnpm/react@19.1.1/node_modules/react').SetStateAction<TTableSortState>>; pagination: { pageIndex: number; pageSize: number; }; setPagination: (data: { pageIndex: number; pageSize: number; }) => void; totalPages: number; filters: InferFiltersFromColumns<TItem, T, Q>; debouncedFilters: InferFiltersFromColumns<TItem, T, Q>; filterParsers: Record<string, import('nuqs').Parser<unknown>>; setFilters: TTableSetFilters; quickFilters: TTableQuickFiltersConfig | undefined; setTotalPages: (newValue?: number) => void; }; export default useTableStates; //# sourceMappingURL=use-table-states.d.ts.map