'use client'; import { useState, useEffect } from 'react'; import Card from '@/components/ui/Card'; import Button from '@/components/ui/Button'; import Input from '@/components/ui/Input'; import { useServices } from '@/lib/services/ServiceProvider'; import type { DriverViewModel } from '@/lib/view-models/DriverViewModel'; import type { TeamJoinRequestViewModel } from '@/lib/view-models/TeamJoinRequestViewModel'; import type { TeamDetailsViewModel } from '@/lib/view-models/TeamDetailsViewModel'; import type { UpdateTeamViewModel } from '@/lib/view-models/UpdateTeamViewModel'; interface TeamAdminProps { team: Pick; onUpdate: () => void; } export default function TeamAdmin({ team, onUpdate }: TeamAdminProps) { const { teamJoinService, teamService } = useServices(); const [joinRequests, setJoinRequests] = useState([]); const [requestDrivers, setRequestDrivers] = useState>({}); const [loading, setLoading] = useState(true); const [editMode, setEditMode] = useState(false); const [editedTeam, setEditedTeam] = useState({ name: team.name, tag: team.tag, description: team.description, }); useEffect(() => { const load = async () => { setLoading(true); try { // Current build only supports read-only join requests. Driver hydration is // not provided by the API response, so we only display driverId. const currentUserId = team.ownerId; const isOwner = true; const requests = await teamJoinService.getJoinRequests(team.id, currentUserId, isOwner); setJoinRequests(requests); setRequestDrivers({}); } finally { setLoading(false); } }; void load(); }, [team.id, team.name, team.tag, team.description, team.ownerId]); const handleApprove = async (requestId: string) => { try { void requestId; await teamJoinService.approveJoinRequest(); } catch (error) { alert(error instanceof Error ? error.message : 'Failed to approve request'); } }; const handleReject = async (requestId: string) => { try { void requestId; await teamJoinService.rejectJoinRequest(); } catch (error) { alert(error instanceof Error ? error.message : 'Failed to reject request'); } }; const handleSaveChanges = async () => { try { const result: UpdateTeamViewModel = await teamService.updateTeam(team.id, { name: editedTeam.name, tag: editedTeam.tag, description: editedTeam.description, }); if (!result.success) { throw new Error(result.successMessage); } setEditMode(false); onUpdate(); } catch (error) { alert(error instanceof Error ? error.message : 'Failed to update team'); } }; return (

Team Settings

{!editMode && ( )}
{editMode ? (
setEditedTeam({ ...editedTeam, name: e.target.value })} />
setEditedTeam({ ...editedTeam, tag: e.target.value })} maxLength={4} />

Max 4 characters