'use client' import { Button } from '@/components/ui/button' import { Separator } from '@/components/ui/separator' import Layout from '@/hoc/Layout' import { NextPage } from 'next' import Image from 'next/image' import { useSearchParams } from 'next/navigation' import { useEffect, useState, Suspense } from 'react'; import { useGetCompare, useSearchCompareProduct } from './hooks/useCompareData' import { useLocalCart } from '@/app/product/hooks/useLocalCart' import { toast } from '@/components/Toast' import { CompareProduct } from './types/Types' import { useSharedStore } from '@/share/store/sharedStore' import DefaulModal from '@/components/DefaulModal' const ComparePageContent: NextPage = () => { const [productIds, setProductIds] = useState([]); const [isCompareModalOpen, setIsCompareModalOpen] = useState(false); const search = useSearchParams() const { data, isLoading } = useGetCompare(productIds) const { data: searchData } = useSearchCompareProduct(productIds[0]) const { addToLocalCart } = useLocalCart() const { isLogin } = useSharedStore() const products = data?.results?.products || [] const handleAddToCart = (product: CompareProduct) => { if (!isLogin) { toast('لطفا ابتدا وارد حساب کاربری خود شوید', 'error') return } if (!product._id || !product.default_variant?._id) return addToLocalCart(product._id, product.default_variant._id, 1) toast('محصول به سبد خرید اضافه شد', 'success') } const handleProductClick = (productId: number) => { const productIdStr = productId.toString() // بررسی اینکه محصول قبلاً اضافه نشده باشد if (productIds.includes(productIdStr)) { toast('این محصول قبلاً در لیست مقایسه اضافه شده است', 'error') return } // اضافه کردن محصول به لیست مقایسه const newProductIds = [...productIds, productIdStr] setProductIds(newProductIds) // به‌روزرسانی URL با محصولات جدید const url = new URL(window.location.href) url.searchParams.set('productIds', newProductIds.join(',')) url.searchParams.delete('productId') // حذف productId قدیمی window.history.pushState({}, '', url.toString()) setIsCompareModalOpen(false) toast('محصول به لیست مقایسه اضافه شد', 'success') } useEffect(() => { const productId = search.get('productId') const productIdsParam = search.get('productIds') if (productIdsParam) { // اگر productIds در URL موجود است، آن را استفاده کن const ids = productIdsParam.split(',').filter(id => id.trim()) setProductIds(ids) // حذف productId قدیمی از URL if (productId) { const url = new URL(window.location.href) url.searchParams.delete('productId') window.history.replaceState({}, '', url.toString()) } } else if (productId) { // اگر فقط productId موجود است، آن را به productIds تبدیل کن setProductIds([productId]) // URL را به productIds تبدیل کن const url = new URL(window.location.href) url.searchParams.delete('productId') url.searchParams.set('productIds', productId) window.history.replaceState({}, '', url.toString()) } }, [search]); if (isLoading) { return (

در حال بارگذاری...

) } if (products.length === 0) { return (

هیچ محصولی برای مقایسه انتخاب نشده است

) } return (
{products.map((product, index) => (
{product.title_fa}
{product.title_fa}
{product.default_variant.price.selling_price.toLocaleString()} تومان
))}
مشخصات
{products[0]?.specifications?.map((spec, specIndex) => (
{spec.title}
{products.map((product, productIndex) => (
{product.specifications?.[specIndex]?.values?.join(', ') || '-'} {productIndex < products.length - 1 && }
))}
))}
{/* مودال انتخاب کالا برای مقایسه */} setIsCompareModalOpen(false)} isHeader={true} title_header="انتخاب کالا برای مقایسه" width={800} >
{/* نوار جستجو */}
759 كالا
{/* عنوان برترین کالاها */}
برترین کالاها برای مقایسه
{/* لیست محصولات */}
{searchData?.results?.products?.slice(0, 6).map((product: CompareProduct) => (
handleProductClick(product._id)} >
{/* تصویر محصول */}
{product.title_fa}
{/* متن ذخیره سازی */}
ذخیره سازی
{/* نام محصول */}

{product.title_fa}

{/* ستاره‌ها */}
{[...Array(5)].map((_, i) => ( ))}
{/* قیمت */}
{product.default_variant.price.selling_price.toLocaleString()} تومان
{/* آیکون قلب */}
))}
) } const ComparePage: NextPage = () => { return (

در حال بارگذاری...

}>
) } export default ComparePage