Fix destination bracket text when many starting brackets
Some checks are pending
Tests and checks on push / run-checks-and-tests (push) Waiting to run
Updates translation progress / update-translation-progress-issue (push) Waiting to run

This commit is contained in:
Kalle
2025-02-23 21:23:48 +02:00
parent 363522f907
commit e39d35c914
3 changed files with 67 additions and 4 deletions

View File

@@ -76,10 +76,12 @@ export function PlacementsTable({
const destinationBracket = (placement: number) =>
bracket.tournament.brackets.find(
(b) =>
b.id !== bracket.id &&
b.sources?.some(
(s) => s.bracketIdx === 0 && s.placements.includes(placement),
),
b.idx ===
Progression.destinationByPlacement({
sourceBracketIdx: bracket.idx,
placement,
progression: bracket.tournament.ctx.settings.bracketProgression,
}),
);
const possibleDestinationBrackets = Progression.destinationsFromBracketIdx(

View File

@@ -588,3 +588,41 @@ describe("destinationsFromBracketIdx", () => {
).toEqual([]);
});
});
describe("destinationByPlacement", () => {
it("returns correct destination for a given placement", () => {
const result = Progression.destinationByPlacement({
sourceBracketIdx: 0,
placement: 1,
progression: progressions.roundRobinToSingleElimination,
});
expect(result).toBe(1);
});
it("returns null if no destination for the given placement", () => {
const result = Progression.destinationByPlacement({
sourceBracketIdx: 0,
placement: 5,
progression: progressions.roundRobinToSingleElimination,
});
expect(result).toBeNull();
});
it("returns correct destination for negative placements", () => {
const result = Progression.destinationByPlacement({
sourceBracketIdx: 0,
placement: -1,
progression: progressions.doubleEliminationWithUnderground,
});
expect(result).toBe(1);
});
it("returns correct destination for many start brackets", () => {
const result = Progression.destinationByPlacement({
sourceBracketIdx: 1,
placement: 1,
progression: progressions.manyStartBrackets,
});
expect(result).toBe(3);
});
});

View File

@@ -699,3 +699,26 @@ export function destinationsFromBracketIdx(
return destinations;
}
export function destinationByPlacement({
sourceBracketIdx,
placement,
progression,
}: {
sourceBracketIdx: number;
placement: number;
progression: ParsedBracket[];
}): number | null {
const destinations = destinationsFromBracketIdx(
sourceBracketIdx,
progression,
);
const destination = destinations.find((destinationBracketIdx) =>
progression[destinationBracketIdx].sources?.some((source) =>
source.placements.includes(placement),
),
);
return destination ?? null;
}