website refactor

This commit is contained in:
2026-01-21 01:56:07 +01:00
parent 977dcc4e86
commit c06f93f1b6
22 changed files with 576 additions and 487 deletions

View File

@@ -35,9 +35,12 @@ export class LeagueDetailViewDataBuilder {
// Calculate info data
const membersCount = Array.isArray(memberships.members) ? memberships.members.length : 0;
const completedRacesCount = races.filter(r => r.name.includes('Completed')).length; // Placeholder
const avgSOF = races.length > 0
? Math.round(races.reduce((sum, _r) => sum + 0, 0) / races.length)
const completedRacesCount = races.filter(r => (r as any).status === 'completed').length;
// Compute real avgSOF from races
const racesWithSOF = races.filter(r => typeof (r as any).strengthOfField === 'number' && (r as any).strengthOfField > 0);
const avgSOF = racesWithSOF.length > 0
? Math.round(racesWithSOF.reduce((sum, r) => sum + ((r as any).strengthOfField || 0), 0) / racesWithSOF.length)
: null;
const info: LeagueInfoData = {
@@ -76,16 +79,58 @@ export class LeagueDetailViewDataBuilder {
tagline: s.tagline,
}));
// Convert memberships to summaries
const adminSummaries: DriverSummaryData[] = (memberships.members || [])
.filter(m => m.role === 'admin')
.map(m => ({
driverId: m.driverId,
driverName: m.driver.name,
avatarUrl: (m.driver as any).avatarUrl || null,
rating: null,
rank: null,
roleBadgeText: 'Admin',
roleBadgeClasses: 'bg-blue-500/10 text-blue-500 border-blue-500/30',
profileUrl: `/drivers/${m.driverId}`,
}));
const stewardSummaries: DriverSummaryData[] = (memberships.members || [])
.filter(m => m.role === 'steward')
.map(m => ({
driverId: m.driverId,
driverName: m.driver.name,
avatarUrl: (m.driver as any).avatarUrl || null,
rating: null,
rank: null,
roleBadgeText: 'Steward',
roleBadgeClasses: 'bg-purple-500/10 text-purple-500 border-purple-500/30',
profileUrl: `/drivers/${m.driverId}`,
}));
const memberSummaries: DriverSummaryData[] = (memberships.members || [])
.filter(m => m.role === 'member')
.map(m => ({
driverId: m.driverId,
driverName: m.driver.name,
avatarUrl: (m.driver as any).avatarUrl || null,
rating: null,
rank: null,
roleBadgeText: 'Member',
roleBadgeClasses: 'bg-zinc-500/10 text-zinc-500 border-zinc-500/30',
profileUrl: `/drivers/${m.driverId}`,
}));
return {
leagueId: league.id,
name: league.name,
description: league.description || '',
logoUrl: league.logoUrl,
info,
runningRaces,
sponsors: sponsorInfo,
ownerSummary,
adminSummaries: [], // Would need additional data
stewardSummaries: [], // Would need additional data
adminSummaries,
stewardSummaries,
memberSummaries,
sponsorInsights: null, // Only for sponsor mode
};
}