website refactor
This commit is contained in:
@@ -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
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user