"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 (
<>