- Sort sports seasons by status (active → upcoming → completed), with
season_standings pattern last within active, then alphabetical
- Fix rank display for teams without standings: T1 when no scores exist,
T{n+1} when some teams are scored (avoids misleading T1 for unranked teams)
- Extract rank logic to getDisplayRank() in standings-display.ts with tests
- Pre-compute standingsMap and sortedTeams to eliminate O(n²) render lookups
- Fix invite URL SSR flash by deriving origin in the loader
- Guard toast useEffect with processedParamsRef to prevent double-fire
- Hide Teams Filled and Draft Order Set post-draft; show Standings sidebar
link only when active/completed
- Show "Final standings" label when season is completed
- Remove duplicate Season Status from sidebar; add Flex Spots description
- Fix status type cast to occur at the model mapping layer, not in JSX
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
20 lines
813 B
TypeScript
20 lines
813 B
TypeScript
/**
|
|
* Returns the display rank for a team on the league home standings preview.
|
|
*
|
|
* Rules:
|
|
* - If the team has a standing, return its numeric rank.
|
|
* - If the team has no standing, it is tied at the position just after all
|
|
* ranked teams. For example, if 3 teams have standings the unranked teams
|
|
* show "T4". If no team has standings yet (scores haven't been calculated)
|
|
* every team is genuinely tied at zero and shows "T1".
|
|
*
|
|
* @param standing - The team's standing record, or undefined if none exists.
|
|
* @param standingsCount - Total number of teams that have a standing record.
|
|
*/
|
|
export function getDisplayRank(
|
|
standing: { currentRank: number } | undefined,
|
|
standingsCount: number
|
|
): number | string {
|
|
if (standing) return standing.currentRank;
|
|
return `T${standingsCount + 1}`;
|
|
}
|