All files / store/pages/Store Store.tsx

75% Statements 12/16
83.33% Branches 5/6
50% Functions 2/4
80% Lines 12/15

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 55 56 57            5x 5x 5x   5x 3x   3x       3x 1x   1x         1x             5x         5x                                      
import { useQuery } from "react-query";
import { useSearchParams } from "react-router-dom";
import Banner from "../../components/Banner";
import Packages from "../../components/Packages";
 
function Store() {
  const [searchParams, setSearchParams] = useSearchParams();
  const currentPage = searchParams.get("page") || "1";
  const queryString = searchParams.get("q") || "";
 
  const getData = async () => {
    let queryParam = `page=${currentPage}`;
 
    Iif (queryString) {
      queryParam += `&q=${queryString}`;
    }
 
    const response = await fetch(`/store.json?${queryParam}`);
    const data = await response.json();
 
    const packagesWithId = data.packages.map((item: string[]) => ({
      ...item,
      id: crypto.randomUUID(),
    }));
 
    return {
      totalItems: data.total_items,
      totalPages: data.total_pages,
      packages: packagesWithId,
    };
  };
 
  const { data, status, isFetching } = useQuery(
    ["data", currentPage, queryString],
    getData
  );
 
  return (
    <>
      <Banner />
      <Packages
        isFetching={isFetching}
        numOfTotalItems={data?.totalItems}
        status={status}
        packages={data?.packages}
        onPageChange={(pageNumber) => {
          searchParams.set("page", pageNumber.toString());
          setSearchParams(searchParams);
        }}
        currentPage={parseInt(currentPage)}
      />
    </>
  );
}
 
export default Store;