@@ -224,10 +224,28 @@ export default function Page2() {
224224 const interval = setInterval ( async ( ) => {
225225 try {
226226 const response = await authenticatedFetch ( `/api/v1/teams/${ String ( teamId ) } /status` ) ;
227- if ( ! response . ok ) throw new Error ( 'Failed to fetch team status' ) ;
227+
228+ if ( ! response . ok ) {
229+ if ( response . status === 404 || response . status === 403 ) {
230+ console . error ( 'Team not found or user not authorized. Returning to create view.' ) ;
231+ setView ( 'create' ) ;
232+ clearInterval ( interval ) ;
233+ return ;
234+ }
235+ throw new Error ( `Failed to fetch team status: ${ response . status } ` ) ;
236+ }
237+
228238 const memberStatuses : { team_id : number , status : string , members_ready : number [ ] } = await response . json ( ) ;
229239 const readyMemberIds = new Set ( memberStatuses . members_ready ) ;
230240
241+ // Per user request, if our ID is not in the list from the server, return to create view.
242+ if ( myId && ! readyMemberIds . has ( Number ( myId ) ) ) {
243+ console . log ( 'User ID not in members_ready list. Returning to create view.' , myId , readyMemberIds ) ;
244+ setView ( 'create' ) ;
245+ clearInterval ( interval ) ;
246+ return ;
247+ }
248+
231249 setTeamMembers ( prevTeamMembers =>
232250 prevTeamMembers . map ( member => ( {
233251 ...member ,
@@ -236,11 +254,13 @@ export default function Page2() {
236254 ) ;
237255 } catch ( error ) {
238256 console . error ( 'Error polling team status:' , error ) ;
257+ setView ( 'create' ) ;
258+ clearInterval ( interval ) ;
239259 }
240260 } , 2000 ) ;
241261
242262 return ( ) => clearInterval ( interval ) ;
243- } , [ view , teamId ] ) ;
263+ } , [ view , teamId , myId , setView ] ) ;
244264
245265 useEffect ( ( ) => {
246266 if ( view === 'waiting' && teamMembers . length > 0 && teamMembers . every ( m => m . is_ready ) ) {
0 commit comments