All files / src/hooks useHome.ts

84.61% Statements 11/13
50% Branches 1/2
75% Functions 3/4
84.61% Lines 11/13

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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73                  1x 1x 1x 1x   1x   1x                         1x                   1x                   1x 1x             1x                              
import React from "react";
import { useTranslation } from "react-i18next";
import { useQuery, UseQueryResult } from "@tanstack/react-query";
 
import useUserStore from "@/store/useUserStore";
import useFiltersStore from "@/store/useFiltersStore";
import useInfiniteMovieQuery from "@/queries/useInfiniteMovieQuery";
import { IApiFunction, IAccount } from "@/interfaces";
 
const useHome = (apiFunctions: IApiFunction) => {
  const { i18n, t } = useTranslation();
  const { sortBy, releaseDate, selectedGenres } = useFiltersStore();
  const { isAuthenticated, sessionId, accentColor } = useUserStore();
 
  const [openDialog, setOpenDialog] = React.useState<boolean>(false);
 
  const { data: accountData }: UseQueryResult<IAccount> = useQuery({
    queryKey: [apiFunctions.getAccountDetails.key, sessionId],
    queryFn: () => apiFunctions.getAccountDetails.func(sessionId),
    enabled: isAuthenticated,
  });
 
  const {
    data: moviesData,
    error,
    fetchNextPage,
    hasNextPage,
    isFetchingNextPage,
    status,
  } = useInfiniteMovieQuery(
    [
      apiFunctions.getMovies.key,
      sortBy,
      selectedGenres,
      releaseDate.start,
      releaseDate.end,
      i18n.language,
    ],
    ({ pageParam }: { pageParam: number }) =>
      apiFunctions.getMovies.func({
        sortBy: sortBy,
        selectedGenres: selectedGenres,
        startDate: releaseDate.start,
        endDate: releaseDate.end,
        selectedLanguage: i18n.language,
        page: pageParam,
      })
  );
 
  React.useEffect(() => {
    Iif (accountData)
      useUserStore.setState({
        accountId: accountData.id,
        username: accountData?.username,
      });
  }, [accountData]);
 
  return {
    t,
    accentColor,
    openDialog,
    setOpenDialog,
    moviesData,
    error,
    fetchNextPage,
    hasNextPage,
    isFetchingNextPage,
    status,
  };
};
 
export default useHome;