Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3514 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
3512 stevensc 1
import { useState, useEffect, useCallback } from 'react';
3514 stevensc 2
import { useSearchParams } from 'react-router-dom';
3512 stevensc 3
 
4
export function useDebouncedSearchParam(paramName, debounceDelay = 500) {
3514 stevensc 5
  const [searchParams, setSearchParams] = useSearchParams();
6
 
3512 stevensc 7
  const getQueryFromUrl = useCallback(() => {
3514 stevensc 8
    return searchParams.get(paramName);
9
  }, [searchParams, paramName]);
3512 stevensc 10
 
11
  const [inputValue, setInputValue] = useState(() => getQueryFromUrl() || '');
12
  const [debouncedValue, setDebouncedValue] = useState(() => getQueryFromUrl() || '');
13
 
14
  useEffect(() => {
15
    const handler = setTimeout(() => {
16
      setDebouncedValue(inputValue);
17
    }, debounceDelay);
18
 
19
    return () => {
20
      clearTimeout(handler);
21
    };
22
  }, [inputValue, debounceDelay]);
23
 
24
  useEffect(() => {
3521 stevensc 25
    setSearchParams((prev) => {
26
      prev.set(paramName, debouncedValue);
27
      return prev;
28
    });
29
  }, [debouncedValue, paramName, setSearchParams]);
3512 stevensc 30
 
31
  return { inputValue, setInputValue, debouncedValue };
32
}