From ba030b4423f861d0b6d298977590df4a2cb8e11c Mon Sep 17 00:00:00 2001 From: "kiloconnect[bot]" <240665456+kiloconnect[bot]@users.noreply.github.com> Date: Tue, 9 Jun 2026 09:34:26 +0000 Subject: [PATCH] fix(web): harden balance banner redirect --- .../shared/InsufficientBalanceBanner.actions.ts | 6 +----- .../components/shared/InsufficientBalanceBanner.tsx | 11 +++++++---- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/apps/web/src/components/shared/InsufficientBalanceBanner.actions.ts b/apps/web/src/components/shared/InsufficientBalanceBanner.actions.ts index ec8bdad289..f6db4d81b0 100644 --- a/apps/web/src/components/shared/InsufficientBalanceBanner.actions.ts +++ b/apps/web/src/components/shared/InsufficientBalanceBanner.actions.ts @@ -3,10 +3,6 @@ import 'server-only'; import { setPaymentReturnUrl } from '@/lib/payment-return-url'; -export async function setReturnUrlAndRedirect( - returnUrl: string, - creditsUrl: string -): Promise { +export async function setReturnUrlAndRedirect(returnUrl: string): Promise { await setPaymentReturnUrl(returnUrl); - return creditsUrl; } diff --git a/apps/web/src/components/shared/InsufficientBalanceBanner.tsx b/apps/web/src/components/shared/InsufficientBalanceBanner.tsx index edae114831..e3d8eb7c7d 100644 --- a/apps/web/src/components/shared/InsufficientBalanceBanner.tsx +++ b/apps/web/src/components/shared/InsufficientBalanceBanner.tsx @@ -4,7 +4,7 @@ import { AlertTriangle, Info, type LucideIcon } from 'lucide-react'; import { Button } from '@/components/Button'; import { cn } from '@/lib/utils'; import { setReturnUrlAndRedirect } from './InsufficientBalanceBanner.actions'; -import { usePathname } from 'next/navigation'; +import { usePathname, useRouter } from 'next/navigation'; /** Minimum balance required to use features that require credits (in dollars) */ export const MIN_BALANCE_DOLLARS_DEFAULT = 1; @@ -84,12 +84,15 @@ export function InsufficientBalanceBanner({ content, }: InsufficientBalanceBannerProps) { const pathname = usePathname(); - const creditsUrl = organizationId ? `/organizations/${organizationId}` : '/credits'; + const router = useRouter(); + const creditsUrl = organizationId + ? `/organizations/${encodeURIComponent(organizationId)}` + : '/credits'; const handleAddCreditsClick = async () => { // Set the return URL cookie before redirecting - const redirectUrl = await setReturnUrlAndRedirect(pathname, creditsUrl); - window.location.href = redirectUrl; + await setReturnUrlAndRedirect(pathname); + router.push(creditsUrl); }; const formattedBalance = balance.toLocaleString('en-US', {