import { Suspense, useMemo } from "react"; import { Tournament } from "../../types"; import { useAuth } from "@/contexts/auth-context"; import { Box, Card, Divider, Group, Stack, Text, Title } from "@mantine/core"; import Countdown from "@/components/countdown"; import ListLink from "@/components/list-link"; import { TreeStructureIcon, UsersIcon } from "@phosphor-icons/react"; import EnrollTeam from "./enroll-team"; import EnrollFreeAgent from "./enroll-free-agent"; import TeamListButton from "./team-list-button"; import EnrolledPlayersListButton from "./enrolled-players-list-button"; import Header from "./header"; import TeamCardSkeleton from "@/features/teams/components/team-card-skeleton"; import TeamCard from "@/features/teams/components/team-card"; import RegionalTeamCard from "@/features/teams/components/regional-team-card"; import UpdateTeam from "./update-team"; import UnenrollTeam from "./unenroll-team"; import { useQueryClient } from "@tanstack/react-query"; import { tournamentKeys, useFreeAgents } from "../../queries"; import RulesListButton from "./rules-list-button"; import EnrolledFreeAgent from "./enrolled-free-agent"; const UpcomingTournament: React.FC<{ tournament: Tournament }> = ({ tournament, }) => { const { user, roles } = useAuth(); const isAdmin = useMemo(() => roles.includes("Admin"), [roles]); const userTeam = useMemo( () => tournament.teams?.find((team) => team.players?.some((player) => player.id === user?.id) ), [tournament.teams, user?.id] ); const isUserEnrolled = !!userTeam; const enrollmentDeadline = tournament.enroll_time ? new Date(tournament.enroll_time) : new Date(tournament.start_time); const isEnrollmentOpen = enrollmentDeadline > new Date(); const queryClient = useQueryClient(); const handleSubmit = () => { queryClient.invalidateQueries({ queryKey: tournamentKeys.current }); }; const { data: free_agents } = useFreeAgents(tournament.id); const isFreeAgent = useMemo(() => !isUserEnrolled && free_agents.find(a => a.player?.id === user?.id), [free_agents, isUserEnrolled]); return (
{tournament.desc && {tournament.desc}} Enrollment {isEnrollmentOpen && ( )} {!isUserEnrolled && !isEnrollmentOpen && ( Enrollment has been closed for this tournament. )} {!isUserEnrolled && isEnrollmentOpen && !isFreeAgent && ( <> {!tournament.regional && ( <> )} )} {isUserEnrolled && ( <> }> {tournament.regional === true ? ( ) : ( )} {tournament.regional !== true && ( <> {isEnrollmentOpen && ( )} )} )} { isFreeAgent && isEnrollmentOpen && ( ) } {isAdmin && ( )} {tournament.regional === true ? ( (tournament.teams && tournament.teams.length > 0) ? ( ) : ( ) ) : ( )} ); }; export default UpcomingTournament;