'use client'; import { useState } from 'react'; import { useStripe, useElements, PaymentElement, AddressElement, } from '@stripe/react-stripe-js'; export default function PaymentForm({ onSuccess, orderId }) { const stripe = useStripe(); const elements = useElements(); const [isLoading, setIsLoading] = useState(false); const [message, setMessage] = useState(''); const [isSuccess, setIsSuccess] = useState(false); const handleSubmit = async (e) => { e.preventDefault(); if (!stripe || !elements) { return; } setIsLoading(true); setMessage(''); const { error } = await stripe.confirmPayment({ elements, confirmParams: { return_url: `${window.location.origin}/payment-success`, }, redirect: 'if_required', }); if (error) { if (error.type === 'card_error' || error.type === 'validation_error') { setMessage(error.message || 'An error occurred'); } else { setMessage('An unexpected error occurred.'); } } else { setMessage('Payment successful! 🎉'); setIsSuccess(true); setTimeout(() => { onSuccess(); }, 2000); } setIsLoading(false); }; const paymentElementOptions = { layout: 'tabs', }; if (isSuccess) { return (

✅ Payment Successful!

Thank you for your purchase!

Order ID: {orderId}

You will receive a confirmation email shortly.

); } return (

Billing Information

Payment Information

{message && (
{message}
)}
); }