diff --git a/src/app/[name]/(Dialogs)/cart/page.tsx b/src/app/[name]/(Dialogs)/cart/page.tsx index 1bc88b7..edd5bb9 100644 --- a/src/app/[name]/(Dialogs)/cart/page.tsx +++ b/src/app/[name]/(Dialogs)/cart/page.tsx @@ -1,131 +1,135 @@ 'use client'; import Button from '@/components/button/PrimaryButton'; +import MenuItem from '@/components/listview/MenuItem'; +import MenuItemRenderer from '@/components/listview/MenuItemRenderer'; import { useReceiptStore } from '@/zustand/receiptStore'; -import { motion } from 'framer-motion'; -import { ArrowLeft, Trash } from 'iconsax-react'; -import { PlusIcon, MinusIcon } from 'lucide-react'; import Link from 'next/link'; import { useRouter } from 'next/navigation'; -import React from 'react' +import React from 'react'; import { useTranslation } from 'react-i18next'; +import { Add, ArrowLeft, Minus, Trash } from 'iconsax-react'; +import { useGetFoods } from '@/app/[name]/(Main)/hooks/useMenuData'; +import type { Food } from '@/app/[name]/(Main)/types/Types'; -type Props = object - -const CartIndex = ({ }: Props) => { - const { t } = useTranslation('parallels', { - keyPrefix: 'Cart' - }); +const CartIndex = () => { + const { data: foodsResponse, isFetching } = useGetFoods(); + const foods = React.useMemo(() => foodsResponse?.data ?? [], [foodsResponse?.data]); + const { t } = useTranslation('parallels', { keyPrefix: 'Cart' }); const router = useRouter(); - const quantity = useReceiptStore(state => state.items[0]?.quantity || 0); - const increment = useReceiptStore(state => state.increment); - const decrement = useReceiptStore(state => state.decrement); + const receiptItems = useReceiptStore((state) => state.items); + const clear = useReceiptStore((state) => state.clear); + const cartFoods = React.useMemo(() => { + if (!foods.length) return []; + return Object.entries(receiptItems) + .filter(([, detail]) => detail?.quantity) + .map(([id]) => + foods.find((foodItem) => String(foodItem.id) === String(id)) + ) + .filter((food): food is Food => Boolean(food)); + }, [foods, receiptItems]); + + const totalPrice = React.useMemo(() => { + return cartFoods.reduce((sum, food) => { + const qty = receiptItems[String(food.id)]?.quantity ?? 0; + return sum + (food.price ?? 0) * qty; + }, 0); + }, [cartFoods, receiptItems]); + + const isCartEmpty = cartFoods.length === 0; + const formatPrice = React.useCallback( + (value: number) => value.toLocaleString('fa-IR'), + [] + ); return (
{t('LoadingCart', { defaultValue: 'در حال دریافت سبد خرید...' })}
{t('EmptyStateTitle', { defaultValue: 'سبد خرید شما خالی است' })}
++ {t('EmptyStateDescription', { + defaultValue: 'برای افزودن غذا، به منوی رستوران برگردید.', + })} +