From a64f4e6dc60019beb3f187beb0d9bbd44bd0b303 Mon Sep 17 00:00:00 2001 From: Mike Cao Date: Tue, 17 Mar 2026 01:14:52 -0700 Subject: [PATCH] Validate team on load and redirect if invalid --- src/app/(main)/App.tsx | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/app/(main)/App.tsx b/src/app/(main)/App.tsx index 162d34023..2f85a86e4 100644 --- a/src/app/(main)/App.tsx +++ b/src/app/(main)/App.tsx @@ -5,7 +5,7 @@ import { useEffect } from 'react'; import { MobileNav } from '@/app/(main)/MobileNav'; import { SideNav } from '@/app/(main)/SideNav'; import { TopNav } from '@/app/(main)/TopNav'; -import { useConfig, useLoginQuery, useNavigation } from '@/components/hooks'; +import { useConfig, useLoginQuery, useNavigation, useTeamQuery } from '@/components/hooks'; import { LAST_TEAM_CONFIG } from '@/lib/constants'; import { removeItem, setItem } from '@/lib/storage'; import { UpdateNotice } from './UpdateNotice'; @@ -13,7 +13,8 @@ import { UpdateNotice } from './UpdateNotice'; export function App({ children }) { const { user, isLoading, error } = useLoginQuery(); const config = useConfig(); - const { pathname, teamId } = useNavigation(); + const { pathname, router, teamId } = useNavigation(); + const { isLoading: isTeamLoading, error: teamError } = useTeamQuery(teamId); useEffect(() => { if (teamId) { @@ -23,7 +24,14 @@ export function App({ children }) { } }, [teamId]); - if (isLoading || !config) { + useEffect(() => { + if (teamId && teamError) { + removeItem(LAST_TEAM_CONFIG); + router.replace('/'); + } + }, [teamId, teamError, router]); + + if (isLoading || !config || (teamId && isTeamLoading)) { return ; } @@ -38,6 +46,10 @@ export function App({ children }) { return null; } + if (teamId && teamError) { + return null; + } + return (