UNPKG

@resourge/react-fetch

Version:

[![License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)

69 lines (68 loc) 3.07 kB
/** * react-fetch v1.41.3 * * Copyright (c) resourge. * * This source code is licensed under the MIT license found in the * LICENSE.md file in the root directory of this source tree. * * @license MIT */ import { type MutableRefObject } from 'react'; import { type OrderByEnum, type PaginationSearchParamsType, type ParamsType, type SortCriteria, type SortSearchParamsType } from '../types/ParamsType'; import { type FilterKeysState } from '../utils/createProxy'; import { type Pagination } from './usePagination'; import { type PreloadRef } from './usePreload'; export type FilterSearchParamsDefaultValue<T extends Record<string, any>> = { filter: T; pagination: PaginationSearchParamsType; } & SortSearchParamsType; export type SearchParamsMetadata<FilterSearchParams extends Record<string, any>> = { filter: FilterSearchParams; pagination: Pagination; } & SortSearchParamsType; export type State<FilterSearchParams extends Record<string, any>> = SearchParamsMetadata<FilterSearchParams> & { url: URL; }; type SortTableFunctionType = { (sort: SortCriteria): void; (orderBy: OrderByEnum, orderColumn: string): void; }; export type FilterSearchParamsReturn<FilterSearchParams extends Record<string, any>> = { filter: FilterSearchParams; pagination: Pagination; } & SortSearchParamsType & { /** * Method to updates filters. */ setFilter: <F extends Record<string, any> = FilterSearchParams>(newFilter: ParamsType<F>) => void; /** * Method to update params. */ setParams: <F extends Record<string, any> = FilterSearchParams>(newFilter: ParamsType<F>) => void; /** * Changes which column to order asc/desc. */ sortTable: SortTableFunctionType; }; export type FilterSearchParamsProps<Data, FilterSearchParams extends Record<string, any> = Record<string, any>> = { defaultFilter: FilterSearchParams; deps: readonly any[]; fetch: (metadata: SearchParamsMetadata<FilterSearchParams>, whatChanged: Set<'pagination' | 'sort' | 'filter'>) => Promise<Data>; filterKeysRef: React.MutableRefObject<FilterKeysState>; initialPage: PaginationSearchParamsType['page']; initialPerPage: PaginationSearchParamsType['perPage']; preloadRef: MutableRefObject<PreloadRef<Data>>; defaultSort?: SortSearchParamsType['sort']; /** * Optional unique identifier to namespace multiple filter states in the URL. * * When two or more instances of useFilterSearchParams are used in the same page, * this ID helps prevent conflicts by grouping related search parameters together. * If not provided, a unique ID will be automatically generated. */ fId?: string; hash?: boolean; }; export declare const useFilterSearchParams: <Data, FilterSearchParams extends Record<string, any> = Record<string, any>>({ defaultFilter, initialPage, initialPerPage, defaultSort, fetch, preloadRef, hash, deps, filterKeysRef, fId: _fId }: FilterSearchParamsProps<Data, FilterSearchParams>) => FilterSearchParamsReturn<FilterSearchParams>; export {};