import React, { useState, useContext, useRef, useEffect } from "react"; import { Search } from "lucide-react"; import Link from "next/link"; import ProductContext from "@/app/contexts/productContext"; import { backendUrl } from "@/utils/axios"; import Image from "next/image"; const SearchComponent = ({ isScrolled }) => { const [searchTerm, setSearchTerm] = useState(""); const [showSuggestions, setShowSuggestions] = useState(false); const [isExpanded, setIsExpanded] = useState(false); const { products, category } = useContext(ProductContext); const searchRef = useRef(null); const filteredProducts = products ?.filter((product) => product.product_name.toLowerCase().includes(searchTerm.toLowerCase()) ) .slice(0, 5); const filteredCategories = category ?.filter((category) => category.category_name.toLowerCase().includes(searchTerm.toLowerCase()) ) .slice(0, 3); useEffect(() => { const handleClickOutside = (event) => { if (searchRef.current && !searchRef.current.contains(event.target)) { setShowSuggestions(false); if (isScrolled) setIsExpanded(false); } }; document.addEventListener("mousedown", handleClickOutside); return () => document.removeEventListener("mousedown", handleClickOutside); }, [isScrolled]); const handleSearchChange = (e) => { setSearchTerm(e.target.value); setShowSuggestions(true); }; const SearchInput = () => (
setShowSuggestions(true)} placeholder="Search products..." className="p-2 outline-none w-full" />
); const Suggestions = () => { if (!showSuggestions || !searchTerm) return null; const hasResults = filteredCategories?.length > 0 || filteredProducts?.length > 0; return (
{!hasResults && searchTerm && (
No results found
)} {filteredCategories?.length > 0 && (
Categories
{filteredCategories.map((category) => ( { setShowSuggestions(false); setIsExpanded(false); }} > {category.category_name} ))}
)} {filteredProducts?.length > 0 && (
Products
{filteredProducts.map((product) => ( { setShowSuggestions(false); setIsExpanded(false); }} >
{product.images?.[0] && ( {product.product_name} )} {product.product_name}
))}
)}
); }; return (
{isScrolled ? ( <> {isExpanded && (
)} ) : (
)}
); }; export default SearchComponent;