'use client' import MinusIcon from '@/components/icons/MinusIcon' import PlusIcon from '@/components/icons/PlusIcon' import { ef } from '@/lib/helpers/utfNumbers' import { useCart } from '@/app/[name]/(Dialogs)/cart/hook/useCart' import { motion } from 'framer-motion' import { ArrowLeft, Clock, Cup, Heart, TruckTick } from 'iconsax-react' import Image from 'next/image' import { useParams, useRouter } from 'next/navigation' import React, { useEffect, useMemo, useState } from 'react' import { useGetFood, useToggleFavorite } from './hooks/useFoodData' import { useGetAbout } from '../about/hooks/useAboutData' import { useGetProfile } from '../../(Profile)/profile/hooks/userProfileData' import { toast } from '@/components/Toast' import { getToken } from '@/lib/api/func' type Props = object function FoodPage({ }: Props) { const { id } = useParams(); const router = useRouter(); const { isSuccess } = useGetProfile(); const { data: food, isLoading } = useGetFood(id as string); const { data: about } = useGetAbout(); const { items, addToCart, removeFromCart } = useCart(); const [isFavorite, setIsFavorite] = useState(false); const { mutate: toggleFavorite } = useToggleFavorite(); const foodId = food?.data?.id || id as string; const quantity = useMemo(() => { const item = items?.[foodId]; if (item && typeof item === 'object' && 'quantity' in item) { return item.quantity || 0; } return 0; }, [items, foodId]); const handleAddToCart = () => { if (foodId) { addToCart(foodId); } }; const handleRemoveFromCart = () => { if (foodId) { removeFromCart(foodId); } }; const handleToggleFavorite = async () => { if (!foodId) return; const token = await getToken(); if (!token || !isSuccess) { toast('ابتدا لاگین کنید', 'error'); return; } // به‌روزرسانی خوش‌بینانه: تغییر state قبل از ارسال درخواست const previousFavorite = isFavorite; setIsFavorite(!isFavorite); toggleFavorite(foodId, { onSuccess: () => { // تایید تغییر در صورت موفقیت }, onError: () => { // بازگرداندن به حالت قبلی در صورت خطا setIsFavorite(previousFavorite); toast('خطا در تغییر وضعیت علاقه‌مندی', 'error'); }, }); }; useEffect(() => { if (food?.data?.isFavorite) { setIsFavorite(true); } else { setIsFavorite(false); } }, [food?.data?.isFavorite]); if (isLoading) { return (

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

); } if (!food?.data) { return (

غذا یافت نشد

); } const foodData = food.data; const foodName = foodData.title || foodData.name || foodData.foodName || ''; const foodImage = typeof foodData.image === 'string' ? foodData.image : Array.isArray(foodData.images) && foodData.images.length > 0 ? typeof foodData.images[0] === 'string' ? foodData.images[0] : typeof foodData.images[0] === 'object' && foodData.images[0] !== null && 'url' in foodData.images[0] ? (foodData.images[0] as { url: string }).url : '/assets/images/food-preview-hq.png' : '/assets/images/food-preview-hq.png'; const categoryName = foodData.category?.title; const prepareTime = foodData.prepareTime || 0; const price = foodData.price || 0; const content = Array.isArray(foodData.content) ? foodData.content.join('، ') : foodData.content || foodData.desc || ''; return (
{foodName}
{categoryName || '-'}
{foodName}
زمان پخت و آماده سازی: {prepareTime > 0 ? `${ef(String(prepareTime))} دقیقه` : '-'}
{about?.data?.plan === 'base' ? ( <>
۰
امتیاز برای هر بار خرید ) : about?.data?.score?.purchaseScore && about?.data?.score?.purchaseAmount ? ( <>
{ef( Math.round( foodData?.price * (Number(about.data.score.purchaseScore) / Number(about.data.score.purchaseAmount)) ).toLocaleString('en-US') )}
امتیاز برای هر بار خرید ) : ( - )}
{foodData.pickupServe ? 'ارسال با پیک' : '-'}

محتویات:

{content || '-'}

{ef(price.toLocaleString('en-US'))} T {quantity <= 0 ? ( ) : ( <> {quantity} )}
) } export default FoodPage