import { useMemo } from "react"; import { Tournament } from "../../types"; import { useAuth } from "@/contexts/auth-context"; import { Box, Divider, Stack, Text, Card, Center } from "@mantine/core"; import { Carousel } from "@mantine/carousel"; import ListLink from "@/components/list-link"; import { TreeStructureIcon, UsersIcon, ClockIcon, ListDashes } from "@phosphor-icons/react"; import TeamListButton from "../upcoming-tournament/team-list-button"; import RulesListButton from "../upcoming-tournament/rules-list-button"; import MatchCard from "@/features/matches/components/match-card"; import Header from "./header"; import { Podium } from "../podium"; const StartedTournament: React.FC<{ tournament: Tournament }> = ({ tournament, }) => { const { roles } = useAuth(); const isAdmin = useMemo(() => roles.includes("Admin"), [roles]); const startedMatches = useMemo(() => tournament.matches?.filter(match => match.status === "started") || [], [tournament.matches] ); const isTournamentOver = useMemo(() => { const matches = tournament.matches || []; if (matches.length === 0) return false; const nonByeMatches = matches.filter((match) => !(match.status === 'tbd' && match.bye === true)); if (nonByeMatches.length === 0) return false; const finalsMatch = nonByeMatches.reduce((highest, current) => (!highest || current.lid > highest.lid) ? current : highest ); return finalsMatch?.status === 'ended'; }, [tournament.matches]); const hasGroupStage = useMemo(() => { return tournament.matches?.some((match) => match.round === -1) || false; }, [tournament.matches]); return (
{startedMatches.length > 0 ? ( {startedMatches.map((match, index) => ( ))} ) : isTournamentOver ? ( ) : (
No active matches
)} {isAdmin && ( )} {hasGroupStage && ( )} ); }; export default StartedTournament;