"use client"; // Indicate that this file is a client component in Next.js import { useState, useEffect } from "react"; import { useRouter } from "next/navigation"; import { search } from "@/api/searchApi"; // Ensure the path is correct for your API import "./searchPage.css"; const SearchPage = () => { const [query, setQuery] = useState(""); const [results, setResults] = useState({ films: [], tv_series: [] }); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [debouncedQuery, setDebouncedQuery] = useState(""); const router = useRouter(); // Use Next.js useRouter for navigation useEffect(() => { const handler = setTimeout(() => { if (debouncedQuery) { handleSearch(); } }, 200); // Delay of 200ms return () => { clearTimeout(handler); }; }, [debouncedQuery]); const handleSearch = async () => { setLoading(true); setError(null); try { const data = await search(debouncedQuery); setResults(data); } catch (err) { setError("Failed to fetch search results."); } finally { setLoading(false); } }; const handleChange = (e) => { setQuery(e.target.value); setDebouncedQuery(e.target.value); }; const handleItemClick = (path) => { router.push(path); // Use router.push for navigation }; return (
{loading && (
)}
{error &&
{error}
}
{results.films.length > 0 && (

Films

    {results.films.map((film, index) => (
  • handleItemClick(`/film/${encodeURIComponent(film)}`)} > {film}
  • ))}
)} {results.tv_series.length > 0 && (

TV Series

    {results.tv_series.map((series, index) => (
  • handleItemClick(`/tvshow/${encodeURIComponent(series)}`)} > {series}
  • ))}
)}
); }; export default SearchPage;