import React, { useContext } from 'react'; import useSWR from 'swr'; import type { MovieResult, TvResult, PersonResult, } from '../../../server/models/Search'; import TitleCard from '../TitleCard'; import PersonCard from '../PersonCard'; import { MediaRequest } from '../../../server/entity/MediaRequest'; import RequestCard from '../TitleCard/RequestCard'; import Slider from '../Slider'; import Link from 'next/link'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { LanguageContext } from '../../context/LanguageContext'; import type Media from '../../../server/entity/Media'; import type { MediaResultsResponse } from '../../../server/interfaces/api/mediaInterfaces'; const messages = defineMessages({ recentrequests: 'Recent Requests', popularmovies: 'Popular Movies', populartv: 'Popular Series', recentlyAdded: 'Recently Added', nopending: 'No Pending Requests', upcoming: 'Upcoming Movies', trending: 'Trending', }); interface MovieDiscoverResult { page: number; totalResults: number; totalPages: number; results: MovieResult[]; } interface TvDiscoverResult { page: number; totalResults: number; totalPages: number; results: TvResult[]; } interface MixedResult { page: number; totalResults: number; totalPages: number; results: (TvResult | MovieResult | PersonResult)[]; } const Discover: React.FC = () => { const intl = useIntl(); const { locale } = useContext(LanguageContext); const { data: movieData, error: movieError } = useSWR( `/api/v1/discover/movies?language=${locale}` ); const { data: tvData, error: tvError } = useSWR( `/api/v1/discover/tv?language=${locale}` ); const { data: movieUpcomingData, error: movieUpcomingError } = useSWR< MovieDiscoverResult >(`/api/v1/discover/movies/upcoming?language=${locale}`); const { data: trendingData, error: trendingError } = useSWR( `/api/v1/discover/trending?language=${locale}` ); const { data: media, error: mediaError } = useSWR( '/api/v1/media?filter=available&take=20&sort=modified' ); const { data: requests, error: requestError } = useSWR( '/api/v1/request?filter=unavailable&take=20&sort=modified&skip=0' ); return ( <>
( ))} /> ( ))} emptyMessage={intl.formatMessage(messages.nopending)} /> ( ))} /> { switch (title.mediaType) { case 'movie': return ( ); case 'tv': return ( ); case 'person': return ( ); } })} /> ( ))} /> ( ))} /> ); }; export default Discover;