diff --git a/src/app/[name]/(Main)/[id]/page.tsx b/src/app/[name]/(Main)/[id]/page.tsx index 919df6e..b196e69 100644 --- a/src/app/[name]/(Main)/[id]/page.tsx +++ b/src/app/[name]/(Main)/[id]/page.tsx @@ -6,6 +6,7 @@ import PlusIcon from "@/components/icons/PlusIcon"; import { toast, toastLoginRequired } from "@/components/Toast"; import { getToken } from "@/lib/api/func"; import { ef } from "@/lib/helpers/utfNumbers"; +import clsx from "clsx"; import { motion } from "framer-motion"; import { ArrowLeft, Clock, Cup, Heart, TruckTick } from "iconsax-react"; import { useParams, useRouter } from "next/navigation"; @@ -36,9 +37,8 @@ function FoodPage({}: Props) { }, [items, foodId]); const handleAddToCart = () => { - if (foodId) { - addToCart(foodId); - } + if (!foodId || food?.data?.isAvailable === false) return; + addToCart(foodId); }; const handleRemoveFromCart = () => { @@ -97,6 +97,7 @@ function FoodPage({}: Props) { } const foodData = food.data; + const isAvailable = foodData.isAvailable !== false; const foodName = foodData.title || foodData.name || foodData.foodName || ""; const foodImage = typeof foodData.image === "string" @@ -128,7 +129,12 @@ function FoodPage({}: Props) { }; return ( -
+
{/* eslint-disable-next-line @next/next/no-img-element */} {ef(price.toLocaleString("en-US"))} T {quantity <= 0 ? ( diff --git a/src/app/[name]/(Main)/types/Types.ts b/src/app/[name]/(Main)/types/Types.ts index af418f6..7dd8932 100644 --- a/src/app/[name]/(Main)/types/Types.ts +++ b/src/app/[name]/(Main)/types/Types.ts @@ -45,6 +45,8 @@ export interface Food { pickupServe: boolean; discount: number; isSpecialOffer: boolean; + isAvailable: boolean; + unavailabilityMessage: string | null; } /** جزئیات کامل یک غذا (endpoint تکی) */ @@ -71,6 +73,8 @@ export interface FoodDetail { score: number; discount: number; isSpecialOffer: boolean; + isAvailable: boolean; + unavailabilityMessage: string | null; reviews: unknown[]; favorites: unknown[]; isFavorite: boolean; diff --git a/src/app/[name]/(Profile)/favorite/page.tsx b/src/app/[name]/(Profile)/favorite/page.tsx index d8a6d3b..2a45c6f 100644 --- a/src/app/[name]/(Profile)/favorite/page.tsx +++ b/src/app/[name]/(Profile)/favorite/page.tsx @@ -36,6 +36,8 @@ function FavoritePage() { pickupServe: favoriteFood.pickupServe, discount: favoriteFood.discount, isSpecialOffer: favoriteFood.isSpecialOffer, + isAvailable: true, + unavailabilityMessage: null, } return food }) diff --git a/src/components/listview/MenuItem.tsx b/src/components/listview/MenuItem.tsx index 6e1e481..d03da94 100644 --- a/src/components/listview/MenuItem.tsx +++ b/src/components/listview/MenuItem.tsx @@ -5,6 +5,7 @@ import { useCart } from "@/app/[name]/(Main)/cart/hook/useCart"; import type { Food, FoodImage } from "@/app/[name]/(Main)/types/Types"; import MinusIcon from "@/components/icons/MinusIcon"; import PlusIcon from "@/components/icons/PlusIcon"; +import clsx from "clsx"; import { motion } from "framer-motion"; import Link from "next/link"; import { useParams } from "next/navigation"; @@ -86,7 +87,10 @@ const MenuItem = ({ food }: MenuItemProps) => { const hasDiscount = useMemo(() => (food.discount || 0) > 0, [food.discount]); + const isAvailable = food.isAvailable !== false; + const handleAddToCart = () => { + if (!isAvailable) return; addToCart(food.id); }; @@ -97,7 +101,12 @@ const MenuItem = ({ food }: MenuItemProps) => { const foodDetailUrl = `/${name}/${food.id}?category=${food.category}`; return ( -
+
{ )}
{quantity <= 0 ? (