Proyectos de Subversion LeadersLinked - SPA

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
3494 stevensc 1
import { useCallback } from 'react';
2
import { useSearchParams } from 'react-router-dom';
3
 
4
import { useFetch } from './useFetch';
5
import { debounce } from '@utils';
6
 
3498 stevensc 7
export function useSearch(url = '', { debounceDelay = 300, initialParams = {} } = {}) {
3494 stevensc 8
  const [searchParams, setSearchParams] = useSearchParams();
9
 
3498 stevensc 10
  const initialSearchURLParams = new URLSearchParams({
11
    ...Object.fromEntries(searchParams.entries()),
12
    ...initialParams
3494 stevensc 13
  });
14
 
3498 stevensc 15
  const { data, loading, refetch } = useFetch(url + '?' + initialSearchURLParams.toString());
16
 
17
  const updateSearchParams = useCallback(
18
    (newParams) => {
19
      setSearchParams(newParams, { replace: true });
20
    },
21
    [setSearchParams]
22
  );
23
 
24
  const setSearchParam = useCallback(
25
    (key, value) => {
26
      const newParams = new URLSearchParams(searchParams);
27
      if (value !== undefined && value !== null && value !== '') {
28
        newParams.set(key, value);
29
      } else {
30
        newParams.delete(key);
31
      }
32
      updateSearchParams(newParams);
33
    },
34
    [searchParams, updateSearchParams]
35
  );
36
 
37
  const search = useCallback(
3494 stevensc 38
    debounce((value) => {
3498 stevensc 39
      setSearchParam('search', value);
3494 stevensc 40
    }, debounceDelay),
3498 stevensc 41
    [setSearchParam, debounceDelay]
3494 stevensc 42
  );
43
 
44
  return {
45
    data,
46
    loading,
3498 stevensc 47
    search,
48
    refetch
3494 stevensc 49
  };
50
}