import { Text, Container, Flex, NumberInput, Group, Loader, } from "@mantine/core"; import { useEffect, useState } from "react"; import { bracketQueries } from "../queries"; import { useQuery } from "@tanstack/react-query"; import { createBracketMaps, BracketMaps } from "../utils/bracket-maps"; import { BracketData, Match } from "../types"; import Bracket from "./bracket"; import "./styles.module.css"; interface PreviewTeam { id: string; name: string; } export const PreviewBracket: React.FC = () => { const [teamCount, setTeamCount] = useState(20); const { data, isLoading, error } = useQuery( bracketQueries.preview(teamCount) ); const [teams, setTeams] = useState([]); useEffect(() => { setTeams( Array.from({ length: teamCount }, (_, i) => ({ id: `team-${i + 1}`, name: `Team ${i + 1}`, })) ); }, [teamCount]); const [seededWinnersBracket, setSeededWinnersBracket] = useState( [] ); const [seededLosersBracket, setSeededLosersBracket] = useState([]); const [bracketMaps, setBracketMaps] = useState(null); useEffect(() => { if (!data || teams.length === 0) return; const maps = createBracketMaps(data as BracketData); setBracketMaps(maps); const mapBracket = (bracket: Match[][]) => { return bracket.map((round) => round.map((match) => { const mappedMatch = { ...match }; if (match.home?.seed && match.home.seed > 0) { const teamIndex = match.home.seed - 1; if (teams[teamIndex]) { mappedMatch.home = { ...match.home, team: teams[teamIndex], }; } } if (match.away?.seed && match.away.seed > 0) { const teamIndex = match.away.seed - 1; if (teams[teamIndex]) { mappedMatch.away = { ...match.away, team: teams[teamIndex], }; } } return mappedMatch; }) ); }; const bracketData = data as BracketData; setSeededWinnersBracket(mapBracket(bracketData.winners)); setSeededLosersBracket(mapBracket(bracketData.losers)); }, [teams, data]); if (error) return

Error loading bracket

; return ( Teams: setTeamCount(Number(value) || 12)} min={12} max={20} size="sm" w={80} allowDecimal={false} clampBehavior="strict" /> {isLoading ? ( ) : ( )} ); };