import Button from '@app/components/Common/Button'; import Header from '@app/components/Common/Header'; import ListView from '@app/components/Common/ListView'; import PageTitle from '@app/components/Common/PageTitle'; import type { FilterOptions } from '@app/components/Discover/constants'; import { countActiveFilters, prepareFilterValues, } from '@app/components/Discover/constants'; import FilterSlideover from '@app/components/Discover/FilterSlideover'; import useDiscover from '@app/hooks/useDiscover'; import { useUpdateQueryParams } from '@app/hooks/useUpdateQueryParams'; import Error from '@app/pages/_error'; import { BarsArrowDownIcon, FunnelIcon } from '@heroicons/react/24/solid'; import type { SortOptions as TMDBSortOptions } from '@server/api/themoviedb'; import type { TvResult } from '@server/models/Search'; import { useRouter } from 'next/router'; import { useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; const messages = defineMessages({ discovertv: 'Series', activefilters: '{count, plural, one {# Active Filter} other {# Active Filters}}', sortPopularityAsc: 'Popularity Ascending', sortPopularityDesc: 'Popularity Descending', sortFirstAirDateAsc: 'First Air Date Ascending', sortFirstAirDateDesc: 'First Air Date Descending', sortTmdbRatingAsc: 'TMDB Rating Ascending', sortTmdbRatingDesc: 'TMDB Rating Descending', sortTitleAsc: 'Title (A-Z) Ascending', sortTitleDesc: 'Title (Z-A) Descending', }); const SortOptions: Record = { PopularityAsc: 'popularity.asc', PopularityDesc: 'popularity.desc', FirstAirDateAsc: 'first_air_date.asc', FirstAirDateDesc: 'first_air_date.desc', TmdbRatingAsc: 'vote_average.asc', TmdbRatingDesc: 'vote_average.desc', TitleAsc: 'original_title.asc', TitleDesc: 'original_title.desc', } as const; const DiscoverTv = () => { const intl = useIntl(); const router = useRouter(); const [showFilters, setShowFilters] = useState(false); const preparedFilters = prepareFilterValues(router.query); const updateQueryParams = useUpdateQueryParams({}); const { isLoadingInitialData, isEmpty, isLoadingMore, isReachingEnd, titles, fetchMore, error, } = useDiscover('/api/v1/discover/tv', { ...preparedFilters, }); if (error) { return ; } const title = intl.formatMessage(messages.discovertv); return ( <>
{title}
setShowFilters(false)} show={showFilters} />
0) } onScrollBottom={fetchMore} /> ); }; export default DiscoverTv;