From bd683ca5dd399dfe3056211ecf31c52d784709d7 Mon Sep 17 00:00:00 2001 From: isra el Date: Thu, 20 Feb 2025 08:47:13 +0300 Subject: [PATCH] chore(web): improve checkout page ui --- web/app/(app)/checkout/[planName]/page.tsx | 54 +++++++++++++++++----- 1 file changed, 42 insertions(+), 12 deletions(-) diff --git a/web/app/(app)/checkout/[planName]/page.tsx b/web/app/(app)/checkout/[planName]/page.tsx index f8e109b..4c1f64d 100644 --- a/web/app/(app)/checkout/[planName]/page.tsx +++ b/web/app/(app)/checkout/[planName]/page.tsx @@ -1,9 +1,10 @@ 'use client' -import { useState, useEffect } from 'react' +import { useState, useEffect, useCallback } from 'react' import httpBrowserClient from '@/lib/httpBrowserClient' import { useSession } from 'next-auth/react' import { redirect } from 'next/navigation' +import { Loader, CheckCircle } from 'lucide-react' export default function CheckoutPage({ params }) { const [error, setError] = useState(null) @@ -12,34 +13,63 @@ export default function CheckoutPage({ params }) { const { data: session } = useSession() - useEffect(() => { - const initiateCheckout = async () => { - try { - const response = await httpBrowserClient.post('/billing/checkout', { - planName, - }) + const initiateCheckout = useCallback(async (retries = 2) => { + try { + const response = await httpBrowserClient.post('/billing/checkout', { + planName, + }) + if (response.data?.redirectUrl) { window.location.href = response.data?.redirectUrl - } catch (error) { + } else { + throw new Error('No redirect URL found') + } + } catch (error) { + if (retries > 0) { + initiateCheckout(retries - 1) + } else { setError('Failed to create checkout session. Please try again.') console.error(error) } } + }, [planName]) + useEffect(() => { initiateCheckout() - }, [planName]) + }, [initiateCheckout]) if (!session?.user) { return redirect(`/login?redirect=${window.location.href}`) } if (error) { - return
{error}
+ return ( +
+
{error}
+ +
+ ) } return ( -
- processing... +
+ +

Hang Tight!

+

+ We're processing your order. This won't take long! +

+ + + Thank you for your patience! +
) }