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 && (
)}
);
}