import { Stack, Text, TextInput, Box, Paper, Group, Divider, Center, ActionIcon, Badge } from "@mantine/core"; import { useState, useMemo } from "react"; import { MagnifyingGlassIcon, XIcon, ArrowRightIcon } from "@phosphor-icons/react"; import { useAllPlayerStats } from "../queries"; import { useSheet } from "@/hooks/use-sheet"; import Sheet from "@/components/sheet/sheet"; import PlayerHeadToHeadSheet from "./player-head-to-head-sheet"; import PlayerAvatar from "@/components/player-avatar"; const LeagueHeadToHead = () => { const [player1Id, setPlayer1Id] = useState(null); const [player2Id, setPlayer2Id] = useState(null); const [search, setSearch] = useState(""); const { data: allPlayerStats } = useAllPlayerStats(); const h2hSheet = useSheet(); const player1Name = useMemo(() => { if (!player1Id || !allPlayerStats) return ""; return allPlayerStats.find((p) => p.player_id === player1Id)?.player_name || ""; }, [player1Id, allPlayerStats]); const player2Name = useMemo(() => { if (!player2Id || !allPlayerStats) return ""; return allPlayerStats.find((p) => p.player_id === player2Id)?.player_name || ""; }, [player2Id, allPlayerStats]); const filteredPlayers = useMemo(() => { if (!allPlayerStats) return []; return allPlayerStats .filter((stat) => { if (player1Id && stat.player_id === player1Id) return false; if (player2Id && stat.player_id === player2Id) return false; return true; }) .filter((stat) => stat.player_name.toLowerCase().includes(search.toLowerCase()) ) .sort((a, b) => b.matches - a.matches); }, [allPlayerStats, player1Id, player2Id, search]); const handlePlayerClick = (playerId: string) => { if (!player1Id) { setPlayer1Id(playerId); } else if (!player2Id) { setPlayer2Id(playerId); h2hSheet.open(); } }; const handleClearPlayer1 = () => { setPlayer1Id(null); if (player2Id) { setPlayer1Id(player2Id); setPlayer2Id(null); } }; const handleClearPlayer2 = () => { setPlayer2Id(null); }; const activeStep = !player1Id ? 1 : !player2Id ? 2 : 0; return ( <> {player1Id ? ( <> {player1Name} { e.stopPropagation(); handleClearPlayer1(); }} style={{ position: "absolute", top: 4, right: 4 }} > ) : ( Player 1 )}
VS
{player2Id ? ( <> {player2Name} { e.stopPropagation(); handleClearPlayer2(); }} style={{ position: "absolute", top: 4, right: 4 }} > ) : ( Player 2 )}
{activeStep > 0 ? ( {activeStep === 1 && "Select first player"} {activeStep === 2 && "Select second player"} ) : ( { setPlayer1Id(null); setPlayer2Id(null); }} td="underline" > Clear both players )}
setSearch(e.currentTarget.value)} leftSection={} size="md" px="md" /> {filteredPlayers.length === 0 && ( {search ? `No players found matching "${search}"` : "No players available"} )} {filteredPlayers.map((player, index) => ( handlePlayerClick(player.player_id)} styles={{ root: { "&:hover": { backgroundColor: "var(--mantine-color-default-hover)", }, }, }} > {player.player_name} {index < filteredPlayers.length - 1 && } ))}
{player1Id && player2Id && ( )} ); }; export default LeagueHeadToHead;