Fix round names on tournament team page Closes #1796

This commit is contained in:
Kalle
2024-07-01 10:15:56 +03:00
parent 7eeebb4bce
commit ca4b3cb7d8
12 changed files with 106 additions and 97 deletions

View File

@@ -18,11 +18,15 @@ import invariant from "~/utils/invariant";
import { logger } from "~/utils/logger";
import { assertUnreachable } from "~/utils/types";
import { userSubmittedImage } from "~/utils/urls";
import { fillWithNullTillPowerOfTwo } from "../tournament-bracket-utils";
import {
fillWithNullTillPowerOfTwo,
groupNumberToLetter,
} from "../tournament-bracket-utils";
import { Bracket } from "./Bracket";
import * as Swiss from "./Swiss";
import type { TournamentData, TournamentDataTeam } from "./Tournament.server";
import { getTournamentManager } from "./brackets-manager";
import { getRounds } from "./rounds";
export type OptionalIdObject = { id: number } | undefined;
@@ -767,6 +771,102 @@ export class Tournament {
return this.ctx.settings.autonomousSubs ?? true;
}
matchNameById(matchId: number) {
let bracketName: string | undefined;
let roundName: string | undefined;
for (const bracket of this.brackets) {
if (bracket.preview) continue;
for (const match of bracket.data.match) {
if (match.id === matchId) {
bracketName = bracket.name;
if (bracket.type === "round_robin") {
const group = bracket.data.group.find(
(group) => group.id === match.group_id,
);
const round = bracket.data.round.find(
(round) => round.id === match.round_id,
);
roundName = `Groups ${group?.number ? groupNumberToLetter(group.number) : ""}${round?.number ?? ""}.${match.number}`;
} else if (bracket.type === "swiss") {
const group = bracket.data.group.find(
(group) => group.id === match.group_id,
);
const round = bracket.data.round.find(
(round) => round.id === match.round_id,
);
const oneGroupOnly = bracket.data.group.length === 1;
roundName = `Swiss${oneGroupOnly ? "" : " Group"} ${group?.number && !oneGroupOnly ? groupNumberToLetter(group.number) : ""} ${round?.number ?? ""}.${match.number}`;
} else if (
bracket.type === "single_elimination" ||
bracket.type === "double_elimination"
) {
const rounds =
bracket.type === "single_elimination"
? getRounds({ type: "single", bracket })
: [
...getRounds({ type: "winners", bracket }),
...getRounds({ type: "losers", bracket }),
];
const round = rounds.find((round) => round.id === match.round_id);
if (round) {
const specifier = () => {
if (
[
"WB Finals",
"Grand Finals",
"Bracket Reset",
"Finals",
"LB Finals",
"LB Semis",
"3rd place match",
].includes(round.name)
) {
return "";
}
const roundNameEndsInDigit = /\d$/.test(round.name);
if (!roundNameEndsInDigit) {
return ` ${match.number}`;
}
return `.${match.number}`;
};
roundName = `${round.name}${specifier()}`;
}
} else {
assertUnreachable(bracket.type);
}
}
}
}
const roundNameWithoutMatchIdentifier = (roundName?: string) => {
if (!roundName) return;
if (roundName.includes("Semis")) {
return roundName.replace(/\d/g, "");
}
return roundName.split(".")[0];
};
return {
bracketName,
roundName,
roundNameWithoutMatchIdentifier:
roundNameWithoutMatchIdentifier(roundName),
};
}
bracketByIdxOrDefault(idx: number): Bracket {
const bracket = this.brackets[idx];
if (bracket) return bracket;

View File

@@ -24,7 +24,6 @@ import {
} from "../core/sets.server";
import {
tournamentIdFromParams,
tournamentRoundI18nKey,
tournamentTeamIdFromParams,
} from "../tournament-utils";
import { useTournament } from "./to.$id";
@@ -192,6 +191,9 @@ function SetInfo({ set, team }: { set: PlayedSet; team: TournamentDataTeam }) {
}
};
const { bracketName, roundNameWithoutMatchIdentifier } =
tournament.matchNameById(set.tournamentMatchId);
return (
<div className="tournament__team__set">
<div className="tournament__team__set__top-container">
@@ -205,10 +207,7 @@ function SetInfo({ set, team }: { set: PlayedSet; team: TournamentDataTeam }) {
})}
className="tournament__team__set__round-name"
>
{t(`tournament:${tournamentRoundI18nKey(set.round)}`, {
round: set.round.round,
})}{" "}
- {set.stageName}
{roundNameWithoutMatchIdentifier} - {bracketName}
</Link>
</div>
<div className="overlap-divider">

View File

@@ -521,6 +521,7 @@
.tournament__team__set__score {
font-size: var(--fonts-xl);
font-weight: var(--bold);
white-space: nowrap;
}
.tournament__team__set__round-name {

View File

@@ -82,17 +82,6 @@
"staff.role.ORGANIZER": "organizer",
"staff.role.STREAMER": "streamer",
"bracket.winners": "Winners Round {{round}}",
"bracket.winners.finals": "Winners Finals",
"bracket.losers": "Losers Round {{round}}",
"bracket.losers.finals": "Losers Finals",
"bracket.single_elim": "Round {{round}}",
"bracket.round_robin": "Groups Round {{round}}",
"bracket.swiss": "Swiss Round {{round}}",
"bracket.single_elim.finals": "Finals",
"bracket.grand_finals": "Grand Finals",
"bracket.grand_finals.bracket_reset": "Bracket Reset",
"actions.addSub": "Add sub",
"actions.shareLink": "Share your invite link to add members: {{inviteLink}}",
"actions.sub.prompt_other": "You can still add {{count}} subs to your roster",

View File

@@ -80,17 +80,6 @@
"staff.role.ORGANIZER": "organizador",
"staff.role.STREAMER": "streamer",
"bracket.winners": "Cuadro de ganadores {{round}}",
"bracket.winners.finals": "Final de ganadores",
"bracket.losers": "Cuadro de perdedores {{round}}",
"bracket.losers.finals": "Final de perdedores",
"bracket.single_elim": "Cuadro {{round}}",
"bracket.round_robin": "Cuadro de grupos {{round}}",
"bracket.swiss": "Cuadro Suizo {{round}}",
"bracket.single_elim.finals": "Final",
"bracket.grand_finals": "Gran Final",
"bracket.grand_finals.bracket_reset": "Reinicio de cuadro",
"actions.addSub": "Añadir sub",
"actions.shareLink": "Comparte enlace de invitación para añadir miembros: {{inviteLink}}",
"actions.sub.prompt_other": "Aún puedes añadir {{count}} subs a tu equipo",

View File

@@ -80,17 +80,6 @@
"staff.role.ORGANIZER": "organizador",
"staff.role.STREAMER": "streamer",
"bracket.winners": "Cuadro de ganadores {{round}}",
"bracket.winners.finals": "Final de ganadores",
"bracket.losers": "Cuadro de perdedores {{round}}",
"bracket.losers.finals": "Final de perdedores",
"bracket.single_elim": "Cuadro {{round}}",
"bracket.round_robin": "Cuadro de grupos {{round}}",
"bracket.swiss": "Cuadro Suizo {{round}}",
"bracket.single_elim.finals": "Final",
"bracket.grand_finals": "Gran Final",
"bracket.grand_finals.bracket_reset": "Reinicio de cuadro",
"actions.addSub": "Añadir sub",
"actions.shareLink": "Comparte enlace de invitación para añadir miembros: {{inviteLink}}",
"actions.sub.prompt_other": "Aún puedes añadir {{count}} subs a tu equipo",

View File

@@ -68,15 +68,6 @@
"admin.actions.REMOVE_MEMBER": "Retirer membre",
"admin.actions.DELETE_TEAM": "Effacer l'équipe",
"bracket.winners": "Manche des gagnants {{round}}",
"bracket.winners.finals": "Finale des gagnants",
"bracket.losers": "Manche des perdants {{round}}",
"bracket.losers.finals": "Finale des perdants",
"bracket.single_elim": "Manche {{round}}",
"bracket.single_elim.finals": "Finale",
"bracket.grand_finals": "Grande Finale",
"bracket.grand_finals.bracket_reset": "Bracket Reset",
"actions.addSub": "Ajouter remplaçant",
"actions.shareLink": "Partagez votre lien d'invitation pour ajouter des membres: {{inviteLink}}",
"actions.sub.prompt_other": "Vous pouvez encore ajouter {{count}} remplaçants à votre liste",

View File

@@ -68,15 +68,6 @@
"admin.actions.REMOVE_MEMBER": "Retirer membre",
"admin.actions.DELETE_TEAM": "Effacer l'équipe",
"bracket.winners": "Manche des gagnants {{round}}",
"bracket.winners.finals": "Finale des gagnants",
"bracket.losers": "Manche des perdants {{round}}",
"bracket.losers.finals": "Finale des perdants",
"bracket.single_elim": "Manche {{round}}",
"bracket.single_elim.finals": "Finale",
"bracket.grand_finals": "Grande Finale",
"bracket.grand_finals.bracket_reset": "Bracket Reset",
"actions.addSub": "Ajouter remplaçant",
"actions.shareLink": "Partagez votre lien d'invitation pour ajouter des membres: {{inviteLink}}",
"actions.sub.prompt_other": "Vous pouvez encore ajouter {{count}} remplaçants à votre liste",

View File

@@ -69,15 +69,6 @@
"admin.actions.REMOVE_MEMBER": "הורדת חבר צוות",
"admin.actions.DELETE_TEAM": "מחיקת צוות",
"bracket.winners": "סיבוב מנצחים {{round}}",
"bracket.winners.finals": "גמר המנצחים",
"bracket.losers": "סיבוב מפסידים {{round}}",
"bracket.losers.finals": "גמר מפסידים",
"bracket.single_elim": "סיבוב {{round}}",
"bracket.single_elim.finals": "גמר",
"bracket.grand_finals": "הגמר הגדול",
"bracket.grand_finals.bracket_reset": "מערך אופס",
"actions.addSub": "הוסיפו ממלא מקום",
"actions.shareLink": "שתפו קישור הזמנה להוספת חברי צוות: {{inviteLink}}",
"actions.sub.prompt_other": "אתם עדיין יכולים להוסיף {{count}} ממלאי מקום לצוות שלכם",

View File

@@ -81,17 +81,6 @@
"staff.role.ORGANIZER": "主催者",
"staff.role.STREAMER": "配信者",
"bracket.winners": "ウィナーズ・ラウンド {{round}}",
"bracket.winners.finals": "ウィナーズ・ファイナル",
"bracket.losers": "ルーザーズ・ラウンド {{round}}",
"bracket.losers.finals": "ルーザーズ・ファイナル",
"bracket.single_elim": "ラウンド {{round}}",
"bracket.round_robin": "ラウンドロビン {{round}}",
"bracket.swiss": "スイスラウンド {{round}}",
"bracket.single_elim.finals": "ファイナル",
"bracket.grand_finals": "グランド・ファイナル",
"bracket.grand_finals.bracket_reset": "ブラケットをリセット",
"actions.addSub": "サブを追加",
"actions.shareLink": "メンバー招待リンクをシェアする: {{inviteLink}}",
"actions.sub.prompt_other": "あと {{count}} 人のサブをメンバーに追加できます",

View File

@@ -80,17 +80,6 @@
"staff.role.ORGANIZER": "organizador(a)",
"staff.role.STREAMER": "streamer",
"bracket.winners": "Round dos Vencedores {{round}}",
"bracket.winners.finals": "Finais dos Vencedores",
"bracket.losers": "Round dos Perdedores {{round}}",
"bracket.losers.finals": "Finais dos Perdedores",
"bracket.single_elim": "Round {{round}}",
"bracket.round_robin": "Round de Grupos {{round}}",
"bracket.swiss": "Round Suíço {{round}}",
"bracket.single_elim.finals": "Finais",
"bracket.grand_finals": "Grandes Finais",
"bracket.grand_finals.bracket_reset": "Reset do Bracket",
"actions.addSub": "Adicionar substituto(a)",
"actions.shareLink": "Compartilhe seu link de convite para adicionar membros: {{inviteLink}}",
"actions.sub.prompt_other": "Você ainda pode adicionar {{count}} substitutos(as) à sua lista",

View File

@@ -69,15 +69,6 @@
"admin.actions.REMOVE_MEMBER": "移除成员",
"admin.actions.DELETE_TEAM": "删除队伍",
"bracket.winners": "胜者组 Round {{round}}",
"bracket.winners.finals": "胜者组决赛",
"bracket.losers": "败者组 Round {{round}}",
"bracket.losers.finals": "败者组决赛",
"bracket.single_elim": "单败制 Round {{round}}",
"bracket.single_elim.finals": "单败制决赛",
"bracket.grand_finals": "总决赛",
"bracket.grand_finals.bracket_reset": "加赛",
"actions.addSub": "添加替补",
"actions.shareLink": "分享您的邀请链接以添加成员: {{inviteLink}}",
"actions.sub.prompt_other": "您还可以添加 {{count}} 名替补",