import { SearchResponse, useSearchResults, } from '@app/search/requests/use-search-results'; import {useParams} from 'react-router-dom'; import {SitePageLayout} from '@app/site-page-layout'; import {Trans} from '@common/i18n/trans'; import {SiteSectionHeading} from '@app/titles/site-section-heading'; import React, {Fragment, useMemo} from 'react'; import {Title, TITLE_MODEL} from '@app/titles/models/title'; import {Person, PERSON_MODEL} from '@app/titles/models/person'; import {ContentGrid} from '@app/channels/content-grid/channel-content-grid'; import {PageMetaTags} from '@common/http/page-meta-tags'; import {useNavigate} from '@common/utils/hooks/use-navigate'; import {useTrans} from '@common/i18n/use-trans'; import {TextField} from '@common/ui/forms/input-field/text-field/text-field'; import {message} from '@common/i18n/message'; import {UseQueryResult} from '@tanstack/react-query'; import {useSettings} from '@common/core/settings/use-settings'; import {IllustratedMessage} from '@common/ui/images/illustrated-message'; import {SearchIcon} from '@common/icons/material/Search'; import {PageStatus} from '@common/http/page-status'; export function SearchPage() { const {query: searchTerm} = useParams(); const query = useSearchResults('searchPage', searchTerm); return (
); } function MobileSearchBar() { const {searchQuery = ''} = useParams(); const navigate = useNavigate(); const {trans} = useTrans(); return ( { navigate(`/search/${e.target.value}`, {replace: true}); }} autoFocus className="w-full md:hidden" size="lg" placeholder={trans(message('Search...'))} /> ); } interface PageContentProps { query: UseQueryResult; } function PageContent({query}: PageContentProps) { const {branding} = useSettings(); if (query.data) { return ; } if (query.fetchStatus === 'idle') { return ( } imageHeight="h-auto" imageMargin="mb-12" title={ } description={ } /> ); } return ; } interface PageContentProps { query: UseQueryResult; } function SearchResults({query}: PageContentProps) { const {query: searchTerm} = useParams(); const {movies, series, people} = useMemo(() => { const movies: Title[] = []; const series: Title[] = []; const people: Person[] = []; query.data?.results.forEach(result => { if (result.model_type === TITLE_MODEL && result.is_series) { series.push(result); } else if (result.model_type === TITLE_MODEL && !result.is_series) { movies.push(result); } else if (result.model_type === PERSON_MODEL) { people.push(result); } }); return {movies, series, people}; }, [query]); return ( {movies.length > 0 && (
)} {series.length > 0 && (
)} {people.length > 0 && (
)}
); }