import { Link, useNavigate } from "@remix-run/react"; import { MetaFunction } from "@remix-run/node"; import { ArrowLeft, Trash2 } from "lucide-react"; import { useToast } from "../hooks/use-toast"; import { useGetAllCarts, useClearCart } from "../requestHandler/use-cart-hooks"; import { formatPrice } from "../utils/helpers"; import { ProductImageCarousel } from "~/components/product"; import { CartDetail, CartItem } from "src/api/types"; import ProfilePagesHeader from "../components/ProfilePagesHeader"; import UiProvider from "~/components/UiProvider"; import SellerLogo from "~/components/SellerLogo"; import { Dialog, DialogContent, DialogOverlay } from "~/components/ui/dialog"; import { Button } from "~/components/ui/button"; import { useState } from "react"; export default function CartIndex() { const { data: carts = [], isLoading, refetch, isError } = useGetAllCarts(); const clearCartMutation = useClearCart(); const { toast } = useToast(); const navigate = useNavigate(); const [confirmDialogOpen, setConfirmDialogOpen] = useState(false); const [cartToDelete, setCartToDelete] = useState(null); const calculateCartTotal = (cart: CartDetail) => { if (!cart.items || cart.items.length === 0) return "0"; const total = cart.items.reduce((sum: number, item: CartItem) => { const price = parseInt(item.priceAtPurchase) * item.quantity; return sum + price; }, 0); return total.toString(); }; // Handle clearing a cart const handleClearCart = async () => { if (!cartToDelete) return; try { await clearCartMutation.mutateAsync(cartToDelete); toast({ title: "سبد خرید", description: "سبد خرید با موفقیت خالی شد", variant: "default", }); setConfirmDialogOpen(false); setCartToDelete(null); } catch (error) { console.error("Error clearing cart:", error); toast({ title: "خطا", description: "خالی کردن سبد خرید با مشکل مواجه شد", variant: "destructive", }); } }; const openConfirmDialog = (cartId: string) => { setCartToDelete(cartId); setConfirmDialogOpen(true); }; return (
{/* Header (mobile) */}
{/* Cart Content */}

سبد خرید

{ refetch(); }} type="cart" >
{carts.map((cart) => { return (
{}} onClick={() => { navigate(`/cart/${cart.id}`); }} key={cart.id} className="bg-WHITE overflow-hidden shadow-md rounded-[15px] border flex gap-2" >
item.productVariant?.productImage || "" ) || [] } hideIndex={true} />

{cart.seller?.name}

ارسال جداگانه

{cart.items ?.map( (item) => item.productVariant?.productTitle || "" ) .join(", ")}

مبلغ فاکتور:

{formatPrice(calculateCartTotal(cart))} تومان

{ e.stopPropagation(); if (!clearCartMutation.isPending) { openConfirmDialog(cart.id || ""); } }} />
); })}

تایید حذف سبد خرید

آیا مطمئن هستید که می‌خواهید این سبد خرید را خالی کنید؟ این عمل قابل بازگشت نیست.

); } export const meta: MetaFunction = () => { const title = "سبد خرید | ویترون"; const description = "مشاهده و مدیریت سبد خرید شما در ویترون. بررسی محصولات، تغییر تعداد و نهایی کردن خرید."; const imageUrl = "https://vitrownstatics.s3.ir-thr-at1.arvanstorage.ir/SVG-06.svg?versionId="; return [ { title }, { name: "description", content: description }, { name: "keywords", content: "سبد خرید، خرید آنلاین، پرداخت، ویترون" }, { name: "robots", content: "noindex, follow" }, // Open Graph { property: "og:type", content: "website" }, { property: "og:title", content: title }, { property: "og:description", content: description }, { property: "og:image", content: imageUrl }, { property: "og:site_name", content: "ویترون" }, { property: "og:locale", content: "fa_IR" }, // Twitter Card { name: "twitter:card", content: "summary" }, { name: "twitter:title", content: title }, { name: "twitter:description", content: description }, ]; };