New changes in paymentsuccesspage

This commit is contained in:
Hemant Vishwakarma
2026-04-22 18:00:33 +05:30
parent b7767053e7
commit 03dabde979

View File

@@ -1,6 +1,6 @@
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState } from 'react';
import { useNavigate, useSearchParams } from 'react-router-dom'; import { useNavigate, useSearchParams } from 'react-router-dom';
import { CheckCircle, XCircle, Loader2, AlertCircle } from 'lucide-react'; import { CheckCircle, XCircle, Loader2 } from 'lucide-react';
import { useConfirmCardPaymentMutation } from '../Redux/services/cards.service'; import { useConfirmCardPaymentMutation } from '../Redux/services/cards.service';
import { toast } from 'sonner'; import { toast } from 'sonner';
import Navbar from '../components/Navbar'; import Navbar from '../components/Navbar';
@@ -33,13 +33,12 @@ export function PaymentSuccessPage({
}: PaymentSuccessPageProps) { }: PaymentSuccessPageProps) {
const [searchParams] = useSearchParams(); const [searchParams] = useSearchParams();
const [confirmPayment, { isLoading }] = useConfirmCardPaymentMutation(); const [confirmPayment, { isLoading }] = useConfirmCardPaymentMutation();
const [status, setStatus] = useState<'loading' | 'success' | 'error' | 'manual'>('loading'); const [status, setStatus] = useState<'loading' | 'success' | 'error'>('loading');
const [errorMsg, setErrorMsg] = useState<string>(''); const [errorMsg, setErrorMsg] = useState<string>('');
const [manualBookingId, setManualBookingId] = useState('');
const navigate = useNavigate(); const navigate = useNavigate();
useEffect(() => { useEffect(() => {
const retrieveBookingId = async () => { const confirm = async () => {
// Try all possible sources // Try all possible sources
let bookingId = getCookie('pendingBookingId'); let bookingId = getCookie('pendingBookingId');
if (!bookingId) bookingId = localStorage.getItem('pendingBookingId'); if (!bookingId) bookingId = localStorage.getItem('pendingBookingId');
@@ -55,7 +54,11 @@ export function PaymentSuccessPage({
}); });
if (!bookingId) { if (!bookingId) {
setStatus('manual'); // show manual entry form setStatus('error');
setErrorMsg(
'Booking ID not found. Please contact support with your order details. ' +
'If you just completed payment, your order may still be processing.'
);
return; return;
} }
@@ -63,7 +66,7 @@ export function PaymentSuccessPage({
await confirmPayment(bookingId).unwrap(); await confirmPayment(bookingId).unwrap();
setStatus('success'); setStatus('success');
toast.success('Payment confirmed! Your order is complete.'); toast.success('Payment confirmed! Your order is complete.');
// Clean up // Clean up all storage
document.cookie = 'pendingBookingId=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;'; document.cookie = 'pendingBookingId=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;';
localStorage.removeItem('pendingBookingId'); localStorage.removeItem('pendingBookingId');
sessionStorage.removeItem('pendingBookingId'); sessionStorage.removeItem('pendingBookingId');
@@ -72,34 +75,16 @@ export function PaymentSuccessPage({
setStatus('error'); setStatus('error');
setErrorMsg(err?.data?.message || 'Failed to confirm payment. Please contact support.'); setErrorMsg(err?.data?.message || 'Failed to confirm payment. Please contact support.');
toast.error('Confirmation failed'); toast.error('Confirmation failed');
// Clean up to avoid retry loops
document.cookie = 'pendingBookingId=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;';
localStorage.removeItem('pendingBookingId');
sessionStorage.removeItem('pendingBookingId');
} }
}; };
retrieveBookingId(); confirm();
}, [confirmPayment, searchParams]); }, [confirmPayment, searchParams]);
const handleManualConfirm = async () => {
if (!manualBookingId.trim()) {
toast.error('Please enter your Booking ID');
return;
}
setStatus('loading');
try {
await confirmPayment(manualBookingId).unwrap();
setStatus('success');
toast.success('Payment confirmed! Your order is complete.');
// Clean up
document.cookie = 'pendingBookingId=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;';
localStorage.removeItem('pendingBookingId');
sessionStorage.removeItem('pendingBookingId');
} catch (err: any) {
console.error('Manual confirmation error:', err);
setStatus('error');
setErrorMsg(err?.data?.message || 'Failed to confirm payment. Please contact support.');
toast.error('Confirmation failed');
}
};
return ( return (
<div className="min-h-screen bg-[#fafafa] font-poppins"> <div className="min-h-screen bg-[#fafafa] font-poppins">
<Navbar <Navbar
@@ -145,10 +130,10 @@ export function PaymentSuccessPage({
<h2 className="text-2xl font-semibold text-[#2a2a2a]">Payment Successful!</h2> <h2 className="text-2xl font-semibold text-[#2a2a2a]">Payment Successful!</h2>
<p className="text-[#555] mt-2">Thank you for your purchase. Your order is now confirmed.</p> <p className="text-[#555] mt-2">Thank you for your purchase. Your order is now confirmed.</p>
<button <button
onClick={() => navigate('/my-orders')} onClick={() => navigate('/profile')}
className="mt-6 px-6 py-3 bg-[#F95F62] text-white rounded-xl font-medium hover:bg-[#e8545a] transition" className="mt-6 px-6 py-3 bg-[#F95F62] text-white rounded-xl font-medium hover:bg-[#e8545a] transition"
> >
View My Orders View My Profile
</button> </button>
</> </>
)} )}
@@ -166,40 +151,6 @@ export function PaymentSuccessPage({
</button> </button>
</> </>
)} )}
{status === 'manual' && (
<>
<AlertCircle className="w-16 h-16 text-yellow-500 mx-auto mb-4" />
<h2 className="text-2xl font-semibold text-[#2a2a2a]">Booking ID Not Found</h2>
<p className="text-[#555] mt-2">
We couldn't automatically retrieve your booking ID. Please enter it below to confirm your payment.
<br />
<span className="text-sm text-gray-400">(Check your email or order history for the Booking ID)</span>
</p>
<div className="mt-4">
<input
type="text"
value={manualBookingId}
onChange={(e) => setManualBookingId(e.target.value)}
placeholder="Enter Booking ID"
className="w-full border rounded-xl px-4 py-3 font-poppins text-base outline-none focus:border-[#F95F62]"
/>
<button
onClick={handleManualConfirm}
disabled={isLoading}
className="mt-4 w-full px-6 py-3 bg-[#F95F62] text-white rounded-xl font-medium hover:bg-[#e8545a] transition disabled:opacity-50"
>
{isLoading ? 'Confirming...' : 'Confirm Payment'}
</button>
</div>
<button
onClick={onHomeClick}
className="mt-3 text-sm text-gray-500 hover:text-gray-700"
>
Return to Home
</button>
</>
)}
</div> </div>
</div> </div>