From b1d9d0f2126d4efcaea16515f3d55a20bff18f0b Mon Sep 17 00:00:00 2001 From: Kalle <38327916+Sendouc@users.noreply.github.com> Date: Mon, 24 Feb 2025 21:35:04 +0200 Subject: [PATCH] Allow overriding bracket destination to "eliminated" --- .../components/Bracket/PlacementsTable.tsx | 23 +++++++++++++------ .../core/Tournament.test.ts | 4 ++-- .../tournament-bracket/core/Tournament.ts | 18 +++++++++------ 3 files changed, 29 insertions(+), 16 deletions(-) diff --git a/app/features/tournament-bracket/components/Bracket/PlacementsTable.tsx b/app/features/tournament-bracket/components/Bracket/PlacementsTable.tsx index ed603388b..77b003ccc 100644 --- a/app/features/tournament-bracket/components/Bracket/PlacementsTable.tsx +++ b/app/features/tournament-bracket/components/Bracket/PlacementsTable.tsx @@ -164,9 +164,17 @@ export function PlacementsTable({ const overridenDestinationBracket = overridenDestination ? bracket.tournament.bracketByIdx( overridenDestination.destinationBracketIdx, - )! + ) : undefined; + const key = () => { + if (overridenDestinationBracket === null) { + return "null"; + } + + return overridenDestinationBracket?.idx; + }; + return ( @@ -221,7 +229,7 @@ export function PlacementsTable({ ) : null} {team?.seed} → {overridenDestination.name} - ) : destination ? ( + ) : destination && overridenDestination !== null ? ( { ).toBeFalsy(); }); - it("ignores -1 override (used to indicate no progression)", () => { + it("destinationBracketIdx = -1 eliminates the team", () => { const tournament = new Tournament({ ...SWIM_OR_SINK_167([ { @@ -252,7 +252,7 @@ describe("Bracket progression override", () => { 11, ); expect(tournament.brackets[2].participantTournamentTeamIds).toHaveLength( - 11, + 10, ); expect(tournament.brackets[3].participantTournamentTeamIds).toHaveLength( 11, diff --git a/app/features/tournament-bracket/core/Tournament.ts b/app/features/tournament-bracket/core/Tournament.ts index 5ca24db5b..51dfadda9 100644 --- a/app/features/tournament-bracket/core/Tournament.ts +++ b/app/features/tournament-bracket/core/Tournament.ts @@ -274,27 +274,31 @@ export class Tournament { allRelevantMatchesFinished = false; } - const excludedOverridenTeams = sourcedTeams.filter( + // exclude teams that would be going to this bracket according + // to the bracket progression rules, but have been overridden + // by the TO to go somewhere else or get eliminated (in the case of destinationBracketIdx = -1) + const withOverriddenTeamsExcluded = sourcedTeams.filter( (teamId) => !this.ctx.bracketProgressionOverrides.some( (override) => override.sourceBracketIdx === source.bracketIdx && override.tournamentTeamId === teamId && - // "no progression" override - override.destinationBracketIdx !== -1 && - // redundant override override.destinationBracketIdx !== bracketIdx, ), ); - teams.push(...excludedOverridenTeams); + teams.push(...withOverriddenTeamsExcluded); } const teamsFromOverride: { id: number; sourceBracketIdx: number }[] = []; for (const source of sources) { for (const override of this.ctx.bracketProgressionOverrides) { - if (override.sourceBracketIdx !== source.bracketIdx) continue; - if (override.destinationBracketIdx !== bracketIdx) continue; + if ( + override.sourceBracketIdx !== source.bracketIdx || + override.destinationBracketIdx !== bracketIdx + ) { + continue; + } teamsFromOverride.push({ id: override.tournamentTeamId,