Skip to content
Snippets Groups Projects
useParamsQuery.ts 1.22 KiB
Newer Older
import { useAppDispatch } from '@/redux/hooks/useAppDispatch';
import { getSearchData } from '@/redux/search/search.thunks';
import { useRouter } from 'next/router';
import type { ParsedQuery } from 'query-string';
import qs from 'query-string';
import { useEffect } from 'react';

type UseParamsQuery = {
  setSearchQueryInRouter: (searchValue: string) => void;
  searchParams: ParsedQuery<string>;
};

export const useParamsQuery = (): UseParamsQuery => {
  const router = useRouter();
  const dispatch = useAppDispatch();

  const path = router.asPath;

  // The number of the character from which to cut the characters from path.
  const sliceFromCharNumber = 2;
  // The number of the character at which to end the cut string from path.
  const sliceToCharNumber = path.length;
  const searchParams = qs.parse(path.slice(sliceFromCharNumber, sliceToCharNumber));

  const setSearchQueryInRouter = (searchValue: string): void => {
    const searchQuery = {
      search: searchValue,
    };

    router.push(`?${qs.stringify(searchQuery)}`);
  };

  useEffect(() => {
    if (searchParams?.search) dispatch(getSearchData(searchParams.search as string));
  }, [dispatch, searchParams.search]);

  return { setSearchQueryInRouter, searchParams };
};