"use client"; import { useCart } from "@/app/[name]/(Main)/cart/hook/useCart"; import MinusIcon from "@/components/icons/MinusIcon"; import PlusIcon from "@/components/icons/PlusIcon"; import { toast } from "@/components/Toast"; import { getToken } from "@/lib/api/func"; import { ef } from "@/lib/helpers/utfNumbers"; import { motion } from "framer-motion"; import { ArrowLeft, Clock, Cup, Heart, TruckTick } from "iconsax-react"; import { useParams, useRouter } from "next/navigation"; import { useEffect, useMemo, useState } from "react"; import { useGetProfile } from "../../(Profile)/profile/hooks/userProfileData"; import { useGetAbout } from "../about/hooks/useAboutData"; import { useGetFood, useToggleFavorite } from "./hooks/useFoodData"; type Props = object; function FoodPage({}: Props) { const { id, name } = 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/no-image.png" : "/assets/images/no-image.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 || ""; const handleBackToMenu = () => { const urlParams = new URLSearchParams(window.location.search); const categoryParam = urlParams.get("category") || foodData.category?.id; if (categoryParam) { router.push(`/${name}?category=${categoryParam}`); } else { router.push(`/${name}`); } }; return (
{/* eslint-disable-next-line @next/next/no-img-element */} {foodName} { event.currentTarget.src = "/assets/images/no-image.png"; }} />
{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;