import { apiAtom, userAtom } from "@/providers/JellyfinProvider"; import { getUserItemData } from "@/utils/jellyfin/user-library/getUserItemData"; import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client"; import { useQuery } from "@tanstack/react-query"; import { useAtom } from "jotai"; import { PropsWithChildren } from "react"; import { ScrollView } from "react-native"; import { Text } from "../common/Text"; type SearchItemWrapperProps = { ids?: string[] | null; items?: T[]; renderItem: (item: any) => React.ReactNode; header?: string; }; export const SearchItemWrapper = ({ ids, items, renderItem, header, }: PropsWithChildren>) => { const [api] = useAtom(apiAtom); const [user] = useAtom(userAtom); const { data, isLoading: l1 } = useQuery({ queryKey: ["items", ids], queryFn: async () => { if (!user?.Id || !api || !ids || ids.length === 0) { return []; } const itemPromises = ids.map((id) => getUserItemData({ api, userId: user.Id, itemId: id, }) ); const results = await Promise.all(itemPromises); // Filter out null items return results.filter( (item) => item !== null ) as unknown as BaseItemDto[]; }, enabled: !!ids && ids.length > 0 && !!api && !!user?.Id, staleTime: Infinity, }); if (!data && (!items || items.length === 0)) return null; return ( <> {header} {data && data?.length > 0 ? data.map((item) => renderItem(item)) : items && items?.length > 0 ? items.map((i) => renderItem(i)) : undefined} ); };