import * as React from "react"; import { Form } from "@remix-run/react"; import type { TournamentLoaderData, TournamentLoaderTeam, } from "../../tournament/routes/to.$id"; import type { Unpacked } from "~/utils/types"; import { TOURNAMENT } from "../../tournament/tournament-constants"; import { SubmitButton } from "~/components/SubmitButton"; import { TeamRosterInputs } from "./TeamRosterInputs"; import type { TournamentMapListMap } from "~/modules/tournament-map-list-generator"; import { useTranslation } from "~/hooks/useTranslation"; import type { Result } from "./ScoreReporter"; export function ScoreReporterRosters({ teams, position, currentStageWithMode, result, }: { teams: [TournamentLoaderTeam, TournamentLoaderTeam]; position: number; currentStageWithMode: TournamentMapListMap; result?: Result; }) { const [checkedPlayers, setCheckedPlayers] = React.useState< [number[], number[]] >(checkedPlayersInitialState(teams)); const [winnerId, setWinnerId] = React.useState(); const presentational = Boolean(result); return (
{!presentational ? (
) : null}
); function winningTeam() { if (!winnerId) return; if (teams[0].id === winnerId) return teams[0].name; if (teams[1].id === winnerId) return teams[1].name; throw new Error("No winning team matching the id"); } } // TODO: remember what previously selected for our team function checkedPlayersInitialState([teamOne, teamTwo]: [ Unpacked, Unpacked ]): [number[], number[]] { const result: [number[], number[]] = [[], []]; if (teamOne.members.length === TOURNAMENT.TEAM_MIN_MEMBERS_FOR_FULL) { result[0].push(...teamOne.members.map((member) => member.userId)); } if (teamTwo.members.length === TOURNAMENT.TEAM_MIN_MEMBERS_FOR_FULL) { result[1].push(...teamTwo.members.map((member) => member.userId)); } return result; } function ReportScoreButtons({ checkedPlayers, winnerName, currentStageWithMode, }: { checkedPlayers: number[][]; winnerName?: string; currentStageWithMode: TournamentMapListMap; }) { const { t } = useTranslation(["game-misc"]); if ( !checkedPlayers.every( (team) => team.length === TOURNAMENT.TEAM_MIN_MEMBERS_FOR_FULL ) ) { return (

Please choose exactly {TOURNAMENT.TEAM_MIN_MEMBERS_FOR_FULL}+ {TOURNAMENT.TEAM_MIN_MEMBERS_FOR_FULL} players to report score

); } if (!winnerName) { return (

Please select the winner of this map

); } return (
Report {winnerName} win on{" "} {t(`game-misc:MODE_LONG_${currentStageWithMode.mode}`)}{" "} {t(`game-misc:STAGE_${currentStageWithMode.stageId}`)} ?
Report
); }