"use client"; import { useState, useEffect, useRef } from "react"; import { useSearchProduct } from "@/utils/hooks/useSearchProduct"; import Grid from "@/components/theme/ui/grid/Grid"; // import dynamicImport from "next/dynamic"; import HotSearch from "@/app/(public)/search/_components/HotSearch" import { useMediaQuery } from "@utils/hooks/useMediaQueryHook"; import Link from "next/link"; // import { usePathname } from "next/navigation"; // const ProductGridItems = dynamicImport( // () => import("@/components/catalog/product/ProductGridItems"), // ); import NewProductGridItems from "@/components/catalog/product/NewProductGridItems"; // 定义弹窗入参类型 interface SearchPopProps { open: boolean; onClose: () => void; } export default function SearchPop({ open, onClose }: SearchPopProps) { const { data, error, searchProducts } = useSearchProduct(); const [keyword, setKeyword] = useState(""); const debounceTimerRef = useRef(null); const products = data?.edges?.map((e) => e.node) || []; const isDesktop = useMediaQuery("(min-width: 1024px)"); // const pathname = usePathname(); // useEffect(() => { // // 打开状态下,路由变化就关闭弹窗 // if (open) { // handleClose(); // } // }, [pathname]); // 执行搜索接口 const triggerSearch = async (searchWord: string) => { if (!searchWord.trim()) return; const params = { suggest: true, query: searchWord, first: 8, }; console.log("【接口入参 variables】", params); const res = await searchProducts(params); console.log("【接口完整返回结果】", res); console.log("【商品列表数据】", res.data?.search); }; // 防抖输入 const handleKeywordChange = (e: React.ChangeEvent) => { const value = e.target.value; setKeyword(value); if (debounceTimerRef.current) clearTimeout(debounceTimerRef.current); debounceTimerRef.current = setTimeout(() => triggerSearch(value), 300); }; // 点击搜索/回车搜索 const handleSearch = () => { if (debounceTimerRef.current) clearTimeout(debounceTimerRef.current); triggerSearch(keyword); }; // 销毁清除定时器 useEffect(() => { return () => { if (debounceTimerRef.current) clearTimeout(debounceTimerRef.current); }; }, []); // 轮播占位文案 const placeholderList = [ "Search for products...", "Find best sellers", "Search new arrivals", "Search discount items", "Search trending products", ]; const [placeholderIndex, setPlaceholderIndex] = useState(0); useEffect(() => { const interval = setInterval(() => { setPlaceholderIndex((prev) => (prev + 1) % placeholderList.length); }, 3000); return () => clearInterval(interval); }, [placeholderList.length]); const currentPlaceholder = placeholderList[placeholderIndex]; // 关闭弹窗并清空关键词 const handleClose = () => { setKeyword(""); onClose(); }; // 弹窗未打开直接返回null if (!open) return null; return ( // 全屏弹窗根容器,纯div无多余大括号
{/* 顶部搜索栏区域 */}
{/* 右上角关闭按钮 严格24px w-6 h-6 */}
{/* 搜索输入框容器 */}
e.key === "Enter" && handleSearch()} autoComplete="off" className="input w-full rounded-lg border border-neutral-200 bg-white py-2 pl-3 pr-10 text-sm text-black outline-none placeholder:text-neutral-500 focus:ring-2 focus:ring-neutral-300 dark:border-neutral-800 dark:bg-transparent dark:text-white dark:placeholder:text-neutral-400 md:pl-4" name="search" placeholder={currentPlaceholder} type="text" value={keyword} /> {/* 搜索图标按钮 */}
{/* hot search */} {/* 商品列表内容区 */}
{error &&

{error}

} {data?.edges?.length === 0 && keyword && (

No matching products

)} {keyword && data?.edges?.length !== 0 && (
View More
)}
); }