AutorÃa | Ultima modificación | Ver Log |
import { useCallback } from 'react';
import { useSearchParams } from 'react-router-dom';
import { useFetch } from './useFetch';
import { debounce } from '@utils';
export function useSearch(
url = '',
config = {
debounceDelay: 300,
initialSearchTerm: '',
params: undefined
}
) {
const [searchParams, setSearchParams] = useSearchParams();
const search = searchParams.get('search') || config.initialSearchTerm || '';
const debounceDelay = config.debounceDelay || 300;
const params = config.params;
const { data, loading, refetch } = useFetch(url, {
params: { ...params, search }
});
const handleSearch = useCallback(
debounce((value) => {
searchParams.set('search', value);
setSearchParams(searchParams);
}, debounceDelay),
[debounceDelay]
);
return {
data,
loading,
searchTerm: search,
refetch,
handleSearch
};
}