copper-ui
Version:
Modern React UI components library with TypeScript support, built on top of Ant Design
57 lines • 4.11 kB
TypeScript
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