import { createFileRoute } from "@tanstack/react-router" import { useCallback, useState } from "react" import { useTranslation } from "react-i18next" import { Bookmark, Search as SearchIcon, Film, Users } from "lucide-react" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { MovieCard } from "@/components/movie-card" import { PersonRow } from "@/components/person-row" import { EmptyState } from "@/components/empty-state" import { InfiniteScroll } from "@/components/infinite-scroll" import { Skeleton } from "@/components/ui/skeleton" import { useInfiniteSearch } from "@/features/search" import { useDebounce } from "@/hooks/use-debounce" import { useDocumentTitle } from "@/hooks/use-document-title" import { useAddToWatchlist } from "@/features/watchlist" import { toast } from "sonner" export const Route = createFileRoute("/_app/search")({ component: SearchPage, }) function SearchPage() { const { t } = useTranslation() useDocumentTitle(t("search.placeholder")) const addToWatchlist = useAddToWatchlist() const [query, setQuery] = useState("") const debouncedQuery = useDebounce(query, 300) const { data, isPending, hasNextPage, isFetchingNextPage, fetchNextPage, } = useInfiniteSearch({ q: debouncedQuery || undefined }) const hasQuery = debouncedQuery.length > 0 const movies = data?.pages.flatMap((p) => p.movies.items) ?? [] const people = data?.pages[0]?.people.items ?? [] const loadMore = useCallback(() => fetchNextPage(), [fetchNextPage]) return (