1- import { useState , useEffect , useCallback , useRef } from "react"
21import {
32 fetchTeamName ,
43 getCurrentUserRole ,
54 getCurrentUserTeam ,
65 getImage ,
76 getName ,
87} from "@/api/dashboardInfo"
8+ import { useCallback , useEffect , useRef , useState } from "react"
99
1010export type UserProfile = {
1111 team_number ?: string
@@ -38,31 +38,71 @@ export const useUserProfile = (isLoggedIn: boolean, refreshInterval: number = 50
3838 }
3939
4040 try {
41- const [ teamNumber , teamAccountRole , name ] = await Promise . all ( [
42- getCurrentUserTeam ( ) ,
43- getCurrentUserRole ( ) ,
44- getName ( )
45- ] )
41+ // Safely attempt to get user data, ignoring errors
42+ let teamNumber : number | null = null
43+ let teamAccountRole : string | null = null
44+ let name : string | null = null
45+
46+ try {
47+ teamNumber = await getCurrentUserTeam ( )
48+ } catch ( error ) {
49+ console . warn ( "Could not fetch user team (this is ok for spectators):" , error )
50+ }
51+
52+ try {
53+ teamAccountRole = await getCurrentUserRole ( )
54+ } catch ( error ) {
55+ console . warn ( "Could not fetch user role (this is ok for spectators):" , error )
56+ }
57+
58+ try {
59+ name = await getName ( )
60+ } catch ( error ) {
61+ console . warn ( "Could not fetch user name (this is ok):" , error )
62+ }
4663
4764 let profile : UserProfile
48- if ( teamNumber ) {
49- const [ teamName , image ] = await Promise . all ( [
50- fetchTeamName ( teamNumber , 2024 ) ,
51- getImage ( teamNumber , 2024 )
52- ] )
65+ if ( teamNumber && teamNumber > 0 ) {
66+ // User has a valid team - try to get team info
67+ let teamName : string | null = null
68+ let image : string | null = null
69+
70+ try {
71+ const fetchedTeamName = await fetchTeamName ( teamNumber , 2024 )
72+ teamName = fetchedTeamName || null
73+ } catch ( error ) {
74+ console . warn ( "Could not fetch team name:" , error )
75+ }
76+
77+ try {
78+ const fetchedImage = await getImage ( teamNumber , 2024 )
79+ image = fetchedImage || null
80+ } catch ( error ) {
81+ console . warn ( "Could not fetch team image:" , error )
82+ }
83+
5384 profile = {
5485 team_number : "#" + teamNumber . toString ( ) ,
55- team_name : teamName ,
56- team_role : teamAccountRole ?? undefined ,
57- profile_picture : image ?? undefined ,
58- display_name : name ?? undefined ,
86+ team_name : teamName || undefined ,
87+ team_role : teamAccountRole || undefined ,
88+ profile_picture : image || undefined ,
89+ display_name : name || undefined ,
5990 }
6091 } else {
61- const image = await getImage ( - 1 , 2024 )
92+ // User is a spectator - minimal profile
93+ let image : string | null = null
94+
95+ try {
96+ const fetchedImage = await getImage ( - 1 , 2024 )
97+ image = fetchedImage || null
98+ } catch ( error ) {
99+ console . warn ( "Could not fetch default image:" , error )
100+ }
101+
62102 profile = {
63- display_name : name ,
64- team_role : teamAccountRole ?? "Player" ,
65- profile_picture : image ?? undefined ,
103+ display_name : name || undefined ,
104+ team_role : teamAccountRole || undefined ,
105+ profile_picture : image || undefined ,
66106 }
67107 }
68108
@@ -74,8 +114,17 @@ export const useUserProfile = (isLoggedIn: boolean, refreshInterval: number = 50
74114 }
75115 } catch ( error ) {
76116 console . error ( "Error fetching user profile:" , error )
117+
118+ // Create a minimal fallback profile so the UI doesn't break
119+ const fallbackProfile : UserProfile = {
120+ display_name : undefined ,
121+ team_role : undefined ,
122+ profile_picture : undefined ,
123+ }
124+
125+ profileCache = fallbackProfile
77126 if ( isMountedRef . current ) {
78- // Don't clear existing data on error, just stop loading
127+ setUserProfile ( fallbackProfile )
79128 setLoading ( false )
80129 }
81130 }
0 commit comments