"use client"; import { useState, useRef, useEffect } from "react"; import { Search as SearchIcon } from "lucide-react"; import { useRouter } from "next/navigation"; import { useIsTV } from "@/lib/tv-utils"; interface TVSearchInputProps { initialQuery?: string; onSearch: (query: string) => void; } export function TVSearchInput({ initialQuery = "", onSearch }: TVSearchInputProps) { const isTV = useIsTV(); const router = useRouter(); const inputRef = useRef(null); const [query, setQuery] = useState(initialQuery); const [isFocused, setIsFocused] = useState(false); // Update query when initialQuery changes useEffect(() => { setQuery(initialQuery); }, [initialQuery]); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (query.trim()) { onSearch(query.trim()); // Blur the input after search to return to D-pad navigation inputRef.current?.blur(); } }; const handleKeyDown = (e: React.KeyboardEvent) => { // On Enter, submit the search if (e.key === "Enter") { handleSubmit(e); } // On Escape, blur the input if (e.key === "Escape") { inputRef.current?.blur(); } }; // Only render this component in TV mode if (!isTV) { return null; } return (
setQuery(e.target.value)} onKeyDown={handleKeyDown} onFocus={() => setIsFocused(true)} onBlur={() => setIsFocused(false)} placeholder="Press Enter to search..." autoCapitalize="none" autoCorrect="off" autoComplete="off" data-tv-card data-tv-card-index={0} tabIndex={0} className={` w-full h-16 pl-14 pr-6 bg-[#1a1a1a] rounded-lg text-xl text-white placeholder-gray-500 transition-all outline-none border-2 ${isFocused ? "border-[#ecb200] bg-[#242424]" : "border-transparent hover:bg-[#242424]" } `} /> {query && (
Press Enter to search
)}
); }