'use client' import { useTranslations } from 'next-intl' import { useState, useEffect, useCallback } from 'react' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { Loader2, Users } from 'lucide-react' interface TeamMember { id: string user_id: string email: string role: 'owner' | 'admin' | 'member' joined_at: string | null is_current_user: boolean } export function TeamPanel() { const t = useTranslations('settings_team_panel') const [isLoading, setIsLoading] = useState(true) const [members, setMembers] = useState([]) const [teamName, setTeamName] = useState('') const roleLabel = (role: string) => { switch (role) { case 'owner': return t('role_owner') case 'admin': return t('role_admin') case 'member': return t('role_member') default: return role } } const fetchMembers = useCallback(async () => { try { const res = await fetch('/api/team/members') const data = await res.json() if (res.ok) { setMembers(data.data.members) if (data.data.teamName) setTeamName(data.data.teamName) } } catch { // Silently fail } finally { setIsLoading(false) } }, []) useEffect(() => { fetchMembers() }, [fetchMembers]) if (isLoading) { return (
) } return (
{teamName || t('team_fallback')}
{members.map((member) => (
{member.email.charAt(0).toUpperCase()}

{member.email} {member.is_current_user && ( {t('you_suffix')} )}

{roleLabel(member.role)}

))}
) }