All files / src/componentsV2/Table/hooks useTableSearch.tsx

92.85% Statements 13/14
70% Branches 7/10
100% Functions 5/5
92.85% Lines 13/14

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54                72x 1325x 1324x 2116x     1324x   1324x   260x                       1324x   260x 260x           1324x 248x         1324x                
import { useAppDispatch, useAppSelector } from "@redux/hooks";
import { useCallback, useEffect, useState } from "react";
import { selectQueryString, setSearchQueryByKey } from "@redux/slices/search";
 
type Props = {
  queryKey?: string;
};
 
const useTableSearch = ({ queryKey }: Props) => {
  const dispatch = useAppDispatch();
  const searchQuery = useAppSelector((state) =>
    queryKey ? selectQueryString(state, queryKey) : undefined,
  );
 
  const [search, setSearch] = useState(searchQuery || "");
 
  const searchQueryDispatcher = useCallback(
    (value: string) => {
      dispatch(
        setSearchQueryByKey({
          queryKey: queryKey || "",
          params: {
            value,
          },
        }),
      );
    },
    [queryKey],
  );
 
  const handleSearchChange = useCallback(
    (value: string) => {
      setSearch(value);
      searchQueryDispatcher(value);
    },
    [setSearch, searchQueryDispatcher],
  );
 
  //This useEffect handles automatic table search with/without redirection
  useEffect(() => {
    Iif (searchQuery !== undefined && searchQuery !== search) {
      setSearch(searchQuery);
    }
  }, [searchQuery, search]);
 
  return {
    search,
    handleSearchChange,
    searchQuery,
  };
};
 
export default useTableSearch;