Proyectos de Subversion LeadersLinked - SPA

Rev

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
  };
}