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 (
Video streaming platform