"use client"; import React, { useEffect, useRef, useState } from 'react'; import { useRouter } from 'next/navigation'; import { Check, ChevronDown, LayoutGrid, Search } from 'lucide-react'; import { catalogService } from '@/services/api/catalogService'; export const SearchBar: React.FC = () => { const router = useRouter(); const [category, setCategory] = useState('All Categories'); const [categories, setCategories] = useState(['All Categories']); const [searchQuery, setSearchQuery] = useState(''); const [open, setOpen] = useState(false); const [catQuery, setCatQuery] = useState(''); const rootRef = useRef(null); useEffect(() => { catalogService.getCategories().then((res) => { if (res && res.length > 0) { setCategories(['All Categories', ...res.map((c) => c.name)]); } }); }, []); useEffect(() => { const onDoc = (event: MouseEvent) => { if (!rootRef.current?.contains(event.target as Node)) setOpen(false); }; const onKey = (event: KeyboardEvent) => { if (event.key === 'Escape') setOpen(false); }; document.addEventListener('mousedown', onDoc); document.addEventListener('keydown', onKey); return () => { document.removeEventListener('mousedown', onDoc); document.removeEventListener('keydown', onKey); }; }, []); const filtered = catQuery.trim() ? categories.filter((name) => name.toLowerCase().includes(catQuery.trim().toLowerCase()) ) : categories; const handleSearchSubmit = (e: React.FormEvent) => { e.preventDefault(); const catQueryParam = category === 'All Categories' ? '' : `category=${encodeURIComponent(category)}`; const searchQueryStr = searchQuery.trim() ? `search=${encodeURIComponent(searchQuery.trim())}` : ''; const queryParts = [catQueryParam, searchQueryStr].filter(Boolean).join('&'); const path = queryParts ? `/shop?${queryParts}` : '/shop'; router.push(path); }; return (
{open && (
setCatQuery(e.target.value)} placeholder="Search categories..." className="w-full h-9 pl-8 pr-3 rounded-lg bg-gray-50 border border-gray-200 text-[12px] outline-none focus:border-primary focus:ring-2 focus:ring-primary/15" />
    {filtered.map((cat) => { const isSelected = category === cat; return (
  • ); })}
)}
setSearchQuery(e.target.value)} className="flex-1 px-4 text-[13px] text-gray-800 placeholder-gray-400 focus:outline-none h-full font-medium" />
); };