import { useState, useCallback } from "react"; import { Search, Play, Menu, Grid3X3, List, X } from "lucide-react"; import { Input } from "@/components/ui/input"; import { Button } from "@/components/ui/button"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import go4LogoPath from "@assets/go4_1756394900352.png"; interface SearchHeaderProps { onSearch: (query: string) => void; onViewChange: (view: "grid" | "list") => void; currentView: "grid" | "list"; } export default function SearchHeader({ onSearch, onViewChange, currentView }: SearchHeaderProps) { const [searchQuery, setSearchQuery] = useState(""); const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false); // Debounce function to delay search API calls const debounce = useCallback((func: Function, delay: number) => { let timeoutId: NodeJS.Timeout; return (...args: any[]) => { clearTimeout(timeoutId); timeoutId = setTimeout(() => func(...args), delay); }; }, []); // Optimized debounced search - waits 300ms and filters short queries const debouncedSearch = useCallback( debounce((query: string) => { // Only search if query is meaningful (2+ characters or empty for reset) if (query.length === 0 || query.length >= 2) { onSearch(query); } }, 150), [onSearch, debounce] ); const handleSearchChange = (value: string) => { setSearchQuery(value); debouncedSearch(value); }; return (
{/* Static triangle decorations - fixed positioning */}

go4.video

handleSearchChange(e.target.value)} className="bg-white border border-gray-300 rounded-lg px-4 py-2 pl-10 text-sm text-gray-900 placeholder-gray-500 focus:outline-none focus:border-bunny-blue transition-colors w-64" data-testid="input-search" />
{/* Mobile Menu */} {isMobileMenuOpen && (
{/* Mobile Search */}
handleSearchChange(e.target.value)} className="bg-white border border-gray-300 rounded-lg px-4 py-2 pl-10 text-sm text-gray-900 placeholder-gray-500 focus:outline-none focus:border-bunny-blue transition-colors w-full" data-testid="input-mobile-search" />
{/* Mobile Navigation */}
)} {/* Filter Bar */}

Video Library

Video streaming platform

); }