import { useState } from 'react'; import { useDebouncedValue } from './useDebouncedValue'; interface SortType { field: T; order: 'ASC' | 'DESC'; } interface Props { defaultSort: SortType; defaultLimit?: number; searchDebounce?: number; } export const useBackendTable = ({ defaultSort, searchDebounce = 500, defaultLimit = 10, }: Props) => { const [perPageLimit, _setPerPageLimit] = useState(defaultLimit); const [currentPage, setCurrentPage] = useState(0); const [sort, setSort] = useState>(defaultSort); const [search, _setSearch] = useState(''); const debouncedSearch = useDebouncedValue(search, searchDebounce); const setSearch = (value: string) => { if (currentPage !== 0) setCurrentPage(0); _setSearch(value); }; const setPerPageLimit = (value: number) => { if (currentPage !== 0) setCurrentPage(0); _setPerPageLimit(value); }; return { perPageLimit, setPerPageLimit, currentPage, setCurrentPage, sort, setSort, setSearch, search, debouncedSearch, }; };