Rev 3494 | 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 = '', { debounceDelay = 300, initialParams = {} } = {}) {
const [searchParams, setSearchParams] = useSearchParams();
const initialSearchURLParams = new URLSearchParams({
...Object.fromEntries(searchParams.entries()),
...initialParams
});
const { data, loading, refetch } = useFetch(url + '?' + initialSearchURLParams.toString());
const updateSearchParams = useCallback(
(newParams) => {
setSearchParams(newParams, { replace: true });
},
[setSearchParams]
);
const setSearchParam = useCallback(
(key, value) => {
const newParams = new URLSearchParams(searchParams);
if (value !== undefined && value !== null && value !== '') {
newParams.set(key, value);
} else {
newParams.delete(key);
}
updateSearchParams(newParams);
},
[searchParams, updateSearchParams]
);
const search = useCallback(
debounce((value) => {
setSearchParam('search', value);
}, debounceDelay),
[setSearchParam, debounceDelay]
);
return {
data,
loading,
search,
refetch
};
}