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

57.14% Statements 12/21
11.11% Branches 1/9
66.66% Functions 4/6
55% Lines 11/20

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      263x 1604x 1604x     263x           1604x     1604x 277x         277x 277x     1604x                       1604x    
import { MERCHANTS_ROWS_PER_PAGE } from "@hooks/common/usePagination";
import { useCallback, useEffect, useState } from "react";
 
const getRowsPerPageFromLocalStorage = (storageKey: string): number => {
  const storedValue = localStorage.getItem(storageKey);
  return storedValue ? Number(storedValue) : MERCHANTS_ROWS_PER_PAGE;
};
 
export const useRowsPerPage = (
  storageKey: string,
  totalRows?: number,
  page?: number,
  setPageDispatcher?: React.Dispatch<React.SetStateAction<number>>,
) => {
  const [rowsPerPage, setRowsPerPage] = useState<number>(
    getRowsPerPageFromLocalStorage(storageKey),
  );
  useEffect(() => {
    const handleStorageChange = () => {
      const newRowsPerPage = getRowsPerPageFromLocalStorage(storageKey);
      setRowsPerPage(newRowsPerPage);
    };
 
    window.addEventListener("storage", handleStorageChange);
    return () => window.removeEventListener("storage", handleStorageChange);
  }, []);
 
  const updateRowsPerPage = useCallback((value: number) => {
    localStorage.setItem(storageKey, String(value));
    setRowsPerPage(value);
    if (setPageDispatcher && page !== undefined && totalRows !== undefined) {
      const maxPage = Math.max(1, Math.ceil(totalRows / value));
      if (page > maxPage) {
        setPageDispatcher(maxPage);
      }
    }
    window.dispatchEvent(new Event("storage"));
  }, []);
 
  return { rowsPerPage, setRowsPerPage: updateRowsPerPage };
};