'use client' import { memo, useMemo } from "react"; import Image from "next/image"; import PlusIcon from "@/components/icons/PlusIcon"; import MinusIcon from "@/components/icons/MinusIcon"; import { useCart } from "@/app/[name]/(Dialogs)/cart/hook/useCart"; import { motion } from "framer-motion"; import type { Food } from "@/app/[name]/(Main)/types/Types"; import { Refresh } from "iconsax-react"; import { useGetProfile } from "@/app/[name]/(Profile)/profile/hooks/userProfileData"; interface MenuItemProps { food: Food; } const MenuItem = ({ food }: MenuItemProps) => { const { isSuccess } = useGetProfile(); const { items, addToCart, removeFromCart, isItemLoading } = useCart(); const isLoading = isItemLoading(food.id); const quantity = useMemo(() => { const item = items?.[food.id]; if (item && typeof item === 'object' && 'quantity' in item) { return item.quantity || 0; } return 0; }, [items, food.id]); const fallbackImage = "/assets/images/food-preview.png"; const resolvedImage = useMemo(() => { if (food.image) return food.image; if (Array.isArray(food.images) && food.images.length > 0) { const [firstImage] = food.images; if (typeof firstImage === "string") return firstImage; return firstImage?.url || fallbackImage; } return fallbackImage; }, [food.image, food.images]); const foodName = useMemo( () => food.name || food.title || food.foodName || 'بدون نام', [food.name, food.title, food.foodName] ); const foodDescription = useMemo( () => food.description || food.desc || food.content || '', [food.description, food.desc, food.content] ); const formattedPrice = useMemo( () => (food.price ? food.price.toLocaleString('fa-IR') : '0'), [food.price] ); const handleAddToCart = () => { addToCart(food.id); }; const handleRemoveFromCart = () => { removeFromCart(food.id); }; return (