"use client"; import { Check, ChevronsUpDown, Loader2 } from "lucide-react"; import { cn } from "@/lib/utils"; import { Button } from "@/components/ui/button"; import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, } from "@/components/ui/command"; import { Popover, PopoverContent, PopoverTrigger, } from "@/components/ui/popover"; import { useEffect, useState } from "react"; import { useInView } from "react-intersection-observer"; import { t } from "@/utils"; import { BiPlanet } from "react-icons/bi"; import { FaSearch } from "react-icons/fa"; import { usePathname } from "next/navigation"; import { useNavigate } from "@/components/Common/useNavigate"; import useGetCategories from "@/components/Layout/useGetCategories"; const Search = () => { const { cateData, getCategories, isCatLoadMore, catLastPage, catCurrentPage, } = useGetCategories(); const pathname = usePathname(); const { navigate } = useNavigate(); const categoryList = [ { slug: "all-categories", translated_name: t("allCategories") }, ...cateData, ]; const [open, setOpen] = useState(false); const [value, setValue] = useState("all-categories"); const selectedItem = categoryList.find((item) => item.slug === value); const hasMore = catCurrentPage < catLastPage; const { ref, inView } = useInView(); const [searchQuery, setSearchQuery] = useState(""); useEffect(() => { if (open && inView && hasMore && !isCatLoadMore) { getCategories(catCurrentPage + 1); } }, [hasMore, inView, isCatLoadMore, open]); const handleSearchNav = (e) => { e.preventDefault(); const query = encodeURIComponent(searchQuery); // Build the base URL with query and language const baseUrl = `/ads?query=${query}`; // Add category parameter if not "all-categories" const url = selectedItem?.slug === "all-categories" ? baseUrl : `/ads?category=${selectedItem?.slug}&query=${query}`; // Use consistent navigation method if (pathname === "/ads") { // If already on ads page, use history API to avoid full page reload window.history.pushState(null, "", url); } else { // If on different page, use router for navigation navigate(url); } }; return ( <> {t("noCategoryFound")} {categoryList.map((category, index) => { const isLast = open && index === categoryList.length - 1; return ( { setValue(currentValue); setOpen(false); }} ref={isLast ? ref : null} > {category.translated_name || category?.name} ); })} {isCatLoadMore && (
)}
setSearchQuery(e.target.value)} /> ); }; export default Search;