import { createFileRoute, useNavigate } from '@tanstack/react-router' import { useState } from 'react' import { useAuth } from '../lib/auth-context' import { useGetCart } from '../hooks/cart-query-hooks' import { useAllProducts } from '../hooks/prominent-api-hooks' import { ProtectedRoute } from '../components/ProtectedRoute' import { CheckoutAddressSelector } from '../components/CheckoutAddressSelector' import { PaymentAndOrderComponent } from '../components/PaymentAndOrderComponent' import { AddressForm } from '../components/AddressForm' import { Dialog } from '../components/Dialog' import { useAddressStore } from '../lib/stores/address-store' import { useQueryClient } from '@tanstack/react-query' import { ShoppingCart, ChevronLeft, MapPin } from 'lucide-react' export const Route = createFileRoute('/checkout')({ component: CheckoutPage }) function CheckoutPage() { return ( ) } function CheckoutContent() { const navigate = useNavigate() const queryClient = useQueryClient() const { isAuthenticated } = useAuth() const { selectedAddressId, setSelectedAddressId } = useAddressStore() const [showAddAddress, setShowAddAddress] = useState(false) const [editingAddress, setEditingAddress] = useState(null) const cartType: 'regular' | 'flash' = 'regular' const { data: cartData } = useGetCart(cartType) const { data: productsData } = useAllProducts() const products = productsData?.products || [] const productsById: Record = {} products.forEach((p: any) => { productsById[p.id] = p }) const cartItems = (cartData?.items || []).filter((item) => productsById[item.productId]) // Handle empty cart case if (cartItems.length === 0) { return ( Your cart is empty Add some delicious items to your cart before checking out navigate({ to: '/home' })} className="rounded-lg bg-brand-600 px-6 py-3 text-sm font-bold text-white transition-colors hover:bg-brand-700" > Back to Shopping ) } return ( {/* Checkout Header */} navigate({ to: '/cart' })} className="flex h-9 w-9 items-center justify-center rounded-lg text-gray-600 transition-colors hover:bg-gray-50" aria-label="Back to cart" > Checkout {/* Left: Address Selection + Payment */} { setEditingAddress(null) setShowAddAddress(true) }} onEditAddress={(address) => { setEditingAddress(address) setShowAddAddress(true) }} /> {/* Right: Order summary + payment */} navigate({ to: '/cart' })} /> {/* Add/Edit Address Dialog */} { setShowAddAddress(false) setEditingAddress(null) }} title={editingAddress ? 'Edit Address' : 'Add Address'} > { setShowAddAddress(false) setEditingAddress(null) if (addressId) { setSelectedAddressId(addressId) } queryClient.invalidateQueries({ queryKey: ['user.address.getUserAddresses'] }) }} initialValues={editingAddress || undefined} isEdit={!!editingAddress} /> ) }
Your cart is empty
Add some delicious items to your cart before checking out
Checkout