diff --git a/app/routes/to/$organization.$tournament/manage.tsx b/app/routes/to/$organization.$tournament/manage.tsx index 64122fe29..d655262d3 100644 --- a/app/routes/to/$organization.$tournament/manage.tsx +++ b/app/routes/to/$organization.$tournament/manage.tsx @@ -7,7 +7,10 @@ import { Button } from "~/components/Button"; import { Catcher } from "~/components/Catcher"; import { TrashIcon } from "~/components/icons/Trash"; import { TOURNAMENT_TEAM_ROSTER_MIN_SIZE } from "~/constants"; -import { checkInHasStarted } from "~/core/tournament/utils"; +import { + checkInHasStarted, + tournamentHasStarted, +} from "~/core/tournament/utils"; import { isTournamentAdmin, tournamentHasNotStarted, @@ -124,12 +127,6 @@ function RowContents({ const tournament = parentRoute.data as FindTournamentByNameForUrlI; const unregisterFormRef = useRef(null); - const playersLacking = (() => { - if (team.members.length >= TOURNAMENT_TEAM_ROSTER_MIN_SIZE) return; - - return TOURNAMENT_TEAM_ROSTER_MIN_SIZE - team.members.length; - })(); - const handleUnregisterButtonClick = () => { invariant(unregisterFormRef.current, "!unregisterFormRef.current"); @@ -170,63 +167,76 @@ function RowContents({ })}
- {!checkInHasStarted( - tournament.checkInStartTime - ) ? null : team.checkedInTime ? ( - - ) : !playersLacking ? ( - - ) : ( -
- - {playersLacking} more{" "} - {playersLacking > 1 ? "players" : "player"} required - -
- )} +
); } -function CheckOutButton({ teamId }: { teamId: string }) { - const transition = useTransition(); +function CheckInAction({ + team, +}: { + team: Unpacked; +}) { + const [, parentRoute] = useMatches(); + const tournament = parentRoute.data as FindTournamentByNameForUrlI; + + if ( + tournamentHasStarted(tournament.brackets) || + !checkInHasStarted(tournament.checkInStartTime) + ) { + return null; + } + + if (team.checkedInTime) { + return ; + } + + const playersLacking = (() => { + if (team.members.length >= TOURNAMENT_TEAM_ROSTER_MIN_SIZE) return; + + return TOURNAMENT_TEAM_ROSTER_MIN_SIZE - team.members.length; + })(); + + if (!playersLacking) return ; + return ( -
- - - -
+
+ + {playersLacking} more {playersLacking > 1 ? "players" : "player"}{" "} + required + +
); } -function CheckInButton({ teamId }: { teamId: string }) { +function CheckInOutButton({ + teamId, + type, +}: { + teamId: string; + type: "IN" | "OUT"; +}) { const transition = useTransition(); return (
- +
); diff --git a/prisma/seed/script.ts b/prisma/seed/script.ts index 6a0737f48..43f100120 100644 --- a/prisma/seed/script.ts +++ b/prisma/seed/script.ts @@ -276,7 +276,7 @@ export async function seed(variation?: SeedVariations) { "radial-gradient(circle, rgba(238,174,202,1) 0%, rgba(148,187,233,1) 100%)", bannerTextHSLArgs: "231, 9%, 16%", checkInStartTime: - variation === "check-in" + variation === "check-in" || variation === "match" ? lastFullHour : new Date(2025, 11, 17, 11), startTime: