Proyectos de Subversion LeadersLinked - SPA

Rev

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

import { useState, useEffect, useCallback } from 'react';
import { useSearchParams } from 'react-router-dom';

export function useDebouncedSearchParam(paramName, debounceDelay = 500) {
  const [searchParams, setSearchParams] = useSearchParams();

  const getQueryFromUrl = useCallback(() => {
    return searchParams.get(paramName);
  }, [searchParams, paramName]);

  const [inputValue, setInputValue] = useState(() => getQueryFromUrl() || '');
  const [debouncedValue, setDebouncedValue] = useState(() => getQueryFromUrl() || '');

  useEffect(() => {
    const handler = setTimeout(() => {
      setDebouncedValue(inputValue);
    }, debounceDelay);

    return () => {
      clearTimeout(handler);
    };
  }, [inputValue, debounceDelay]);

  useEffect(() => {
    setSearchParams((prev) => {
      prev.set(paramName, debouncedValue);
      return prev;
    });
  }, [debouncedValue, paramName, setSearchParams]);

  return { inputValue, setInputValue, debouncedValue };
}