import { useState, useMemo } from "react"; import { Text, TextInput, Stack, Container, Box, ThemeIcon, Title, } from "@mantine/core"; import { MagnifyingGlassIcon, UsersIcon, } from "@phosphor-icons/react"; import { Tournament } from "@/features/tournaments/types"; import TeamList from "./team-list"; import Sheet from "@/components/sheet/sheet"; import TeamForm from "./team-form"; import { useSheet } from "@/hooks/use-sheet"; import { useTeam } from "../queries"; interface TeamEditSheetProps { teamId: string; isOpen: boolean; onClose: () => void; } const TeamEditSheet = ({ teamId, isOpen, onClose }: TeamEditSheetProps) => { const { data: team } = useTeam(teamId); return ( {team && ( p.id) : [], logo: typeof team.logo === "string" ? undefined : team.logo, }} close={onClose} /> )} ); }; interface ManageTeamsProps { tournament: Tournament; } const ManageTeams = ({ tournament }: ManageTeamsProps) => { const [search, setSearch] = useState(""); const [selectedTeamId, setSelectedTeamId] = useState(null); const { isOpen: editTeamOpened, open: openEditTeam, close: closeEditTeam, } = useSheet(); const teams = tournament.teams || []; const filteredTeams = useMemo(() => { if (!search.trim()) return teams; const searchLower = search.toLowerCase(); return teams.filter((team) => { if (team.name.toLowerCase().includes(searchLower)) { return true; } if (team.players) { return team.players.some((player) => { const firstName = player.first_name?.toLowerCase() || ""; const lastName = player.last_name?.toLowerCase() || ""; const fullName = `${firstName} ${lastName}`.toLowerCase(); return fullName.includes(searchLower) || firstName.includes(searchLower) || lastName.includes(searchLower); }); } return false; }); }, [teams, search]); const handleTeamClick = (teamId: string) => { setSelectedTeamId(teamId); openEditTeam(); }; const handleCloseEditTeam = () => { setSelectedTeamId(null); closeEditTeam(); }; if (!teams.length) { return ( No Teams Enrolled This tournament has no enrolled teams yet. ); } return ( <> setSearch(e.currentTarget.value)} leftSection={} size="md" px="md" /> {filteredTeams.length} of {teams.length} teams {filteredTeams.length === 0 && search && ( No teams found matching "{search}" )} {selectedTeamId && ( )} ); }; export default ManageTeams;