mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-08-24 20:16:41 -05:00
Fix round names on tournament team page Closes #1796
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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}} ממלאי מקום לצוות שלכם",
|
||||
|
||||
@@ -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}} 人のサブをメンバーに追加できます",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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}} 名替补",
|
||||
|
||||
Reference in New Issue
Block a user