import React, { useState, useEffect } from 'react'; import { Table, TableBody, TableCell, TableHead, TableHeaderCell, TableRow, Card, Button, Text, Badge, } from "@tremor/react"; import { message } from 'antd'; import { availableTeamListCall, teamMemberAddCall } from "../networking"; interface AvailableTeam { team_id: string; team_alias: string; description?: string; models: string[]; members_with_roles: {user_id?: string, user_email?: string, role: string}[]; } interface AvailableTeamsProps { accessToken: string | null; userID: string | null; } const AvailableTeamsPanel: React.FC = ({ accessToken, userID, }) => { const [availableTeams, setAvailableTeams] = useState([]); useEffect(() => { const fetchAvailableTeams = async () => { if (!accessToken || !userID) return; try { const response = await availableTeamListCall(accessToken); setAvailableTeams(response); } catch (error) { console.error('Error fetching available teams:', error); } }; fetchAvailableTeams(); }, [accessToken, userID]); const handleJoinTeam = async (teamId: string) => { if (!accessToken || !userID) return; try { const response = await teamMemberAddCall(accessToken, teamId, { "user_id": userID, "role": "user" } ); message.success('Successfully joined team'); // Update available teams list setAvailableTeams(teams => teams.filter(team => team.team_id !== teamId)); } catch (error) { console.error('Error joining team:', error); message.error('Failed to join team'); } }; return ( Team Name Description Members Models Actions {availableTeams.map((team) => ( {team.team_alias} {team.description || 'No description available'} {team.members_with_roles.length} members
{!team.models || team.models.length === 0 ? ( All Proxy Models ) : ( team.models.map((model, index) => ( {model.length > 30 ? `${model.slice(0, 30)}...` : model} )) )}
))} {availableTeams.length === 0 && ( No available teams to join )}
); }; export default AvailableTeamsPanel;