import { Stack, Text, TextInput, Box, Paper, Group, Divider, ActionIcon, Button } from "@mantine/core"; import { useState, useMemo } from "react"; import { MagnifyingGlassIcon, XIcon, ArrowRightIcon, PlusIcon } from "@phosphor-icons/react"; import { Trans, useLingui } from "@lingui/react/macro"; import { useAllPlayerStats } from "../queries"; import { useAuth } from "@/contexts/auth-context"; 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 { t } = useLingui(); const { user } = useAuth(); const [player1Id, setPlayer1Id] = useState(null); const [player2Id, setPlayer2Id] = useState(null); const [search, setSearch] = useState(""); const { data: allPlayerStats } = useAllPlayerStats(); const h2hSheet = useSheet(); const myName = useMemo(() => { if (!user) return ""; const fromStats = allPlayerStats?.find((p) => p.player_id === user.id)?.player_name; return fromStats || [user.first_name, user.last_name].filter(Boolean).join(" "); }, [user, allPlayerStats]); const player1Name = useMemo(() => { if (!player1Id) return ""; if (user && player1Id === user.id) return myName; return allPlayerStats?.find((p) => p.player_id === player1Id)?.player_name || ""; }, [player1Id, allPlayerStats, user, myName]); 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) => stat.player_id !== player1Id) .filter((stat) => stat.player_name.toLowerCase().includes(search.toLowerCase()) ) .sort((a, b) => b.matches - a.matches); }, [allPlayerStats, player1Id, search]); const handlePlayerClick = (playerId: string) => { if (!player1Id) { setPlayer1Id(playerId); } else { setPlayer2Id(playerId); h2hSheet.open(); } }; const handleClearPlayer1 = () => { setPlayer1Id(null); setPlayer2Id(null); }; return ( <> {player1Id ? ( {player1Name} Tap an opponent below to compare ) : ( Select a player {user && ( )} )} setSearch(e.currentTarget.value)} leftSection={} size="md" px="md" /> {filteredPlayers.length === 0 && ( {search ? t`No players found matching "${search}"` : t`No players available`} )} {filteredPlayers.map((player, index) => ( handlePlayerClick(player.player_id)} styles={{ root: { "&:hover": { backgroundColor: "var(--mantine-color-default-hover)", }, }, }} > {player.player_name} {player1Id ? : } {index < filteredPlayers.length - 1 && } ))} {player1Id && player2Id && ( )} ); }; export default LeagueHeadToHead;