diff --git a/app/(app)/analytics/page.tsx b/app/(app)/analytics/page.tsx index 30ebfec..fb2602c 100644 --- a/app/(app)/analytics/page.tsx +++ b/app/(app)/analytics/page.tsx @@ -26,6 +26,8 @@ export default function AnalyticsPage() { value={selectedTeamId} onChange={setSelectedTeamId} className="w-[200px]" + variant="surface" + color="blue" /> void; className?: string; -} - -export function TeamSelector({ value, onChange, className }: TeamSelectorProps) { - const [teams, setTeams] = useState([]); + size?: "1" | "2" | "3"; + variant?: "classic" | "surface" | "soft" | "ghost"; + color?: AccentColor; + radius?: "none" | "small" | "medium" | "large" | "full"; +}) { const [loading, setLoading] = useState(true); const [error, setError] = useState(null); + const [teams, setTeams] = useState([]); useEffect(() => { let isMounted = true; const fetchTeams = async (userId: string) => { if (!isMounted) return; - - console.log('Starting to fetch teams for user:', userId); setLoading(true); setError(null); try { const supabase = getSupabaseClient(); - - // 获取用户的团队成员关系 - console.log('Fetching team memberships for user:', userId); + const { data: memberships, error: membershipError } = await supabase .from('team_membership') .select('team_id') .eq('user_id', userId); - console.log('Team memberships result:', { memberships, membershipError }); - - if (membershipError) { - console.error('Membership error:', membershipError); - throw membershipError; - } + if (membershipError) throw membershipError; if (!memberships || memberships.length === 0) { - console.log('No team memberships found'); - if (isMounted) { - setTeams([]); - } + if (isMounted) setTeams([]); return; } - // 获取团队详细信息 const teamIds = memberships.map(m => m.team_id); - console.log('Fetching teams with IDs:', teamIds); const { data: teamsData, error: teamsError } = await supabase .from('teams') .select('*') .in('id', teamIds) .is('deleted_at', null); - console.log('Teams result:', { teamsData, teamsError }); - - if (teamsError) { - console.error('Teams error:', teamsError); - throw teamsError; - } + if (teamsError) throw teamsError; if (isMounted && teamsData) { setTeams(teamsData); } } catch (err) { - console.error('Error fetching teams:', err); if (isMounted) { setError(err instanceof Error ? err.message : 'Failed to load teams'); } @@ -86,10 +84,8 @@ export function TeamSelector({ value, onChange, className }: TeamSelectorProps) }; const supabase = getSupabaseClient(); - - // 设置认证状态监听器 + const { data: { subscription } } = supabase.auth.onAuthStateChange((event: AuthChangeEvent, session: Session | null) => { - console.log('Auth state changed:', event, session?.user); if (event === 'SIGNED_IN' && session?.user?.id) { fetchTeams(session.user.id); } else if (event === 'SIGNED_OUT') { @@ -98,9 +94,7 @@ export function TeamSelector({ value, onChange, className }: TeamSelectorProps) } }); - // 初始检查session - supabase.auth.getSession().then(({ data: { session } }: { data: { session: Session | null } }) => { - console.log('Initial session check:', session?.user); + supabase.auth.getSession().then(({ data: { session } }) => { if (session?.user?.id) { fetchTeams(session.user.id); } @@ -113,28 +107,58 @@ export function TeamSelector({ value, onChange, className }: TeamSelectorProps) }, []); if (loading) { - return
; + return ( +
+ +
+ ); } if (error) { - return
{error}
; + return ( +
+ {error} +
+ ); } if (teams.length === 0) { - return
No teams available
; + return ( +
+ No teams available +
+ ); } return ( -