From 88efb093179b969f23eb93bf4791d12af7a88a0a Mon Sep 17 00:00:00 2001 From: herrrta <73949927+herrrta@users.noreply.github.com> Date: Wed, 5 Mar 2025 19:45:36 -0500 Subject: [PATCH] fix: fix jellyseerr search results --- components/jellyseerr/JellyseerrIndexPage.tsx | 60 ++++++------------- 1 file changed, 18 insertions(+), 42 deletions(-) diff --git a/components/jellyseerr/JellyseerrIndexPage.tsx b/components/jellyseerr/JellyseerrIndexPage.tsx index e597f12f..51aeb938 100644 --- a/components/jellyseerr/JellyseerrIndexPage.tsx +++ b/components/jellyseerr/JellyseerrIndexPage.tsx @@ -22,7 +22,6 @@ import { SearchItemWrapper } from "../search/SearchItemWrapper"; import PersonPoster from "./PersonPoster"; import { useTranslation } from "react-i18next"; import {orderBy, uniqBy} from "lodash"; -import {useInfiniteQuery} from "@tanstack/react-query"; interface Props extends ViewProps { searchQuery: string; @@ -45,8 +44,6 @@ export const JellyserrIndexPage: React.FC = ({ const opacity = useSharedValue(1); const { t } = useTranslation(); - const [loadInitialPages, setLoadInitialPages] = useState(false) - const { data: jellyseerrDiscoverSettings, isFetching: f1, @@ -58,33 +55,27 @@ export const JellyserrIndexPage: React.FC = ({ }); const { - data: jellyseerrResultPages, + data: jellyseerrResults, isFetching: f2, - isLoading: l2, - isFetchingNextPage: n2, - hasNextPage, - fetchNextPage - } = useInfiniteQuery({ + isLoading: l2 + } = useReactNavigationQuery({ queryKey: ["search", "jellyseerr", "results", searchQuery], - queryFn: async ({pageParam}) => - jellyseerrApi?.search({ - query: new URLSearchParams(searchQuery || "").toString(), - page: Number(pageParam), - }), - enabled: !!jellyseerrApi && searchQuery.length > 0, - staleTime: 0, - initialPageParam: 1, - getNextPageParam: (lastPage, pages) => { - const firstPage = pages?.[0] - const mostRecentPage = lastPage || pages?.[pages?.length - 1] - const currentPage = mostRecentPage?.page || 1 - - return Math.min(currentPage + 1, firstPage?.totalPages || 1) + queryFn: async () => { + const params = { + query: new URLSearchParams(searchQuery || "").toString() + } + return await Promise.all([ + jellyseerrApi?.search({...params, page: 1}), + jellyseerrApi?.search({...params, page: 2}), + jellyseerrApi?.search({...params, page: 3}), + jellyseerrApi?.search({...params, page: 4}) + ]).then(all => uniqBy(all.flatMap(v => v?.results || []), "id")) }, + enabled: !!jellyseerrApi && searchQuery.length > 0, }); useAnimatedReaction( - () => f1 || f2 || l1 || l2 || n2, + () => f1 || f2 || l1 || l2, (isLoading) => { if (isLoading) { opacity.value = withTiming(1, { duration: 200 }); @@ -109,20 +100,6 @@ export const JellyserrIndexPage: React.FC = ({ [sortType, order] ) - const jellyseerrResults = useMemo( - () => { - const lastPage = jellyseerrResultPages?.pages?.[jellyseerrResultPages?.pages?.length - 1] - - if ((lastPage?.page || 0) % 5 !== 0 && hasNextPage && !loadInitialPages) { - fetchNextPage() - setLoadInitialPages(lastPage?.page === 4 || (lastPage !== undefined && lastPage.totalPages == lastPage.page)) - } - - return uniqBy(jellyseerrResultPages?.pages?.flatMap?.(page => page?.results || []), "id") - }, - [jellyseerrResultPages, fetchNextPage, hasNextPage] - ); - const jellyseerrMovieResults = useMemo( () => orderBy( @@ -162,7 +139,7 @@ export const JellyserrIndexPage: React.FC = ({ return ( - + {!jellyseerrMovieResults?.length && !jellyseerrTvResults?.length && @@ -170,8 +147,7 @@ export const JellyserrIndexPage: React.FC = ({ !f1 && !f2 && !l1 && - !l2 && - !loadInitialPages && ( + !l2 && ( {t("search.no_results_found_for")} @@ -182,7 +158,7 @@ export const JellyserrIndexPage: React.FC = ({ )} - +