'use client'; import { ShoppingBag } from 'lucide-react'; import { Link } from '@/core/lib/navigation'; import { useCartPage } from '@/core/hooks/use-cart-page'; import { CartItem } from '@/ui/cart/cart-item'; import { CartUpgradeBanner } from '@/ui/cart/cart-upgrade-banner'; import { CartBundleOfferCard } from '@/ui/cart/cart-bundle-offer'; import { CartSummary } from '@/ui/cart/cart-summary'; import { CouponInput } from '@/ui/cart/coupon-input'; import { CartNudges } from '@/ui/cart/cart-nudges'; import { FreeShippingBar } from '@/ui/cart/free-shipping-bar'; import { ReservationCountdown } from '@/ui/cart/reservation-countdown'; import { CartRecommendationSection } from '@/ui/product/recommendation-section'; import { LoadingSpinner } from '@/ui/shared/loading-spinner'; import { Button } from '@/components/ui/button'; import { Checkbox } from '@/components/ui/checkbox'; import { Card } from '@/components/ui/card'; import { Separator } from '@/components/ui/separator'; import { useTranslations } from '@/core/lib/translations'; export function CartView() { const t = useTranslations('cart'); const tc = useTranslations('common'); const tr = useTranslations('reservation'); const { cart, cartLoading, refreshCart, itemCount, cartRecs, upgrades, bundles, reservationExpired, unavailableItems, selectedItemIds, selectedItems, toggleItemSelected, allSelected, setAllSelected, checkoutHref, canProceedToCheckout, onReservationExpired, } = useCartPage(); if (cartLoading) { return (
{t('emptySubtitle')}
{selectedItems.length} {selectedItems.length === 1 ? tc('item') : tc('items')}
)} {/* Proceed to checkout. When the gate is closed this must be a real disabled control, never a styled-down link: an anchor ignores `disabled` and would still navigate. */} {canProceedToCheckout ? ( ) : ( <>{unavailableItems.length > 0 ? t('unavailableItemsHint') : reservationExpired ? tr('expiredHint') : null}
> )} {tc('continueShopping')}