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 TmdbTitleCard from '../TitleCard/TmdbTitleCard'; import Slider from '../Slider'; import Link from 'next/link'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { LanguageContext } from '../../context/LanguageContext'; import type { MediaResultsResponse } from '../../../server/interfaces/api/mediaInterfaces'; import type { RequestResultsResponse } from '../../../server/interfaces/api/requestInterfaces'; import RequestCard from '../RequestCard'; 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( `/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=10&sort=modified&skip=0' ); return ( <>
( ))} /> ( ))} placeholder={} emptyMessage={intl.formatMessage(messages.nopending)} /> ( ))} /> { switch (title.mediaType) { case 'movie': return ( ); case 'tv': return ( ); case 'person': return ( ); } })} /> ( ))} /> ( ))} /> ); }; export default Discover;