'use client'; import { Accordion, AccordionItem, Checkbox, Radio, RadioGroup } from '@nextui-org/react'; import { useCart } from 'components/cart/cart-context'; import CartItemView from 'components/cart/cart-item'; import Price from 'components/price'; import ShippingForm from 'components/shipping/form'; import { PaymentGateways } from 'lib/woocomerce/models/payment'; import { OrderPayload } from 'lib/woocomerce/storeApi'; import { useRouter } from 'next/navigation'; import { useEffect, useState } from 'react'; import { z } from 'zod'; const shippingSchema = z.object({ first_name: z.string().min(3), last_name: z.string().min(3), address_1: z.string().min(3), address_2: z.string().optional(), city: z.string().min(3), state: z.string().min(3), postcode: z.string().min(3), country: z.string().min(3), company: z.string().optional() }); export default function CheckoutPage() { const { cart } = useCart(); const router = useRouter(); const initialState: OrderPayload = { shipping_address: { first_name: '', last_name: '', company: '', address_1: '', address_2: '', city: '', state: '', postcode: '', country: '' }, billing_address: { first_name: '', last_name: '', company: '', email: '', phone: '', address_1: '', address_2: '', city: '', state: '', postcode: '', country: '' }, payment_method: '', payment_data: [] }; const [formData, setFormData] = useState(initialState); const [sameBilling, setSameBilling] = useState(true); const [paymentGateways, setPaymentGateways] = useState([]); useEffect(() => { const fetchPaymentGateways = async () => { const paymentGateways = await (await fetch('/api/payments')).json(); setPaymentGateways(paymentGateways); }; fetchPaymentGateways(); }, []); const handleChangeShipping = (e: any) => { setFormData({ ...formData, shipping_address: e }); if (sameBilling) { setFormData({ ...formData, billing_address: { ...formData.billing_address, ...e } }); } }; const handleChangeBilling = (e: any) => { setFormData({ ...formData, billing_address: e }); }; return (

Checkout

{ e.preventDefault(); try { if (sameBilling) { setFormData({ ...formData, billing_address: { ...formData.billing_address, ...formData.shipping_address } }); } shippingSchema.parse(formData.shipping_address); } catch (error) { console.log(error); } }} className="rounded-lg border border-neutral-200 bg-white p-4 dark:border-neutral-800 dark:bg-black" >
{cart && (
    {cart.items?.length && cart.items .sort((a, b) => a.name.localeCompare(b.name)) .map((item, i) => { return (
  • ); })}

Total

)}
setSameBilling(v)} className="mt-2"> Use same address for billing?
{paymentGateways.map((gateway: any) => ( { setFormData((prev) => ({ ...prev, payment_method: e.target.value, payment_title: gateway.title })); }} > {gateway.title} ))}
); }