From 1f0c4f7fa67d01e1950760a7d9b8c6ae02d5464e Mon Sep 17 00:00:00 2001 From: Marc Mintel Date: Mon, 12 Jan 2026 16:12:01 +0100 Subject: [PATCH] website refactor --- .../view-data/DashboardViewData.ts | 0 .../lib/view-data/DriverRankingsViewData.ts | 46 ++++++++++ .../lib/view-data/LeagueDetailViewData.ts | 83 +++++++++++++++++++ .../lib/view-data/LeagueStandingsViewData.ts | 39 +++++++++ .../view-data/ProfileLeaguesViewData.ts | 0 .../view-data/TeamDetailViewData.ts | 0 .../view-data/TeamsViewData.ts | 0 7 files changed, 168 insertions(+) rename apps/website/{templates => lib}/view-data/DashboardViewData.ts (100%) create mode 100644 apps/website/lib/view-data/DriverRankingsViewData.ts create mode 100644 apps/website/lib/view-data/LeagueDetailViewData.ts create mode 100644 apps/website/lib/view-data/LeagueStandingsViewData.ts rename apps/website/{templates => lib}/view-data/ProfileLeaguesViewData.ts (100%) rename apps/website/{templates => lib}/view-data/TeamDetailViewData.ts (100%) rename apps/website/{templates => lib}/view-data/TeamsViewData.ts (100%) diff --git a/apps/website/templates/view-data/DashboardViewData.ts b/apps/website/lib/view-data/DashboardViewData.ts similarity index 100% rename from apps/website/templates/view-data/DashboardViewData.ts rename to apps/website/lib/view-data/DashboardViewData.ts diff --git a/apps/website/lib/view-data/DriverRankingsViewData.ts b/apps/website/lib/view-data/DriverRankingsViewData.ts new file mode 100644 index 000000000..e7229f104 --- /dev/null +++ b/apps/website/lib/view-data/DriverRankingsViewData.ts @@ -0,0 +1,46 @@ +/** + * DriverRankingsViewData - Pure ViewData for DriverRankingsTemplate + * Contains only raw serializable data, no methods or computed properties + */ + +export interface DriverRankingItem { + id: string; + name: string; + rating: number; + skillLevel: string; + nationality: string; + racesCompleted: number; + wins: number; + podiums: number; + rank: number; + avatarUrl: string; + winRate: string; + medalBg: string; + medalColor: string; +} + +export interface PodiumDriver { + id: string; + name: string; + rating: number; + wins: number; + podiums: number; + avatarUrl: string; + position: 1 | 2 | 3; +} + +export interface DriverRankingsViewData { + drivers: DriverRankingItem[]; + podium: PodiumDriver[]; + searchQuery: string; + selectedSkill: 'all' | 'pro' | 'advanced' | 'intermediate' | 'beginner'; + sortBy: 'rank' | 'rating' | 'wins' | 'podiums' | 'winRate'; + showFilters: boolean; + onSearchChange: (query: string) => void; + onSkillChange: (skill: 'all' | 'pro' | 'advanced' | 'intermediate' | 'beginner') => void; + onSortChange: (sort: 'rank' | 'rating' | 'wins' | 'podiums' | 'winRate') => void; + onToggleFilters: () => void; + onDriverClick: (id: string) => void; + onBackToLeaderboards: () => void; + onClearFilters: () => void; +} \ No newline at end of file diff --git a/apps/website/lib/view-data/LeagueDetailViewData.ts b/apps/website/lib/view-data/LeagueDetailViewData.ts new file mode 100644 index 000000000..ff47312ef --- /dev/null +++ b/apps/website/lib/view-data/LeagueDetailViewData.ts @@ -0,0 +1,83 @@ +/** + * LeagueDetailViewData - Pure ViewData for LeagueDetailTemplate + * Contains only raw serializable data, no methods or computed properties + */ + +export interface LeagueInfoData { + name: string; + description?: string; + membersCount: number; + racesCount: number; + avgSOF: number | null; + structure: string; + scoring: string; + createdAt: string; + discordUrl?: string; + youtubeUrl?: string; + websiteUrl?: string; +} + +export interface SponsorInfo { + id: string; + name: string; + tier: 'main' | 'secondary'; + logoUrl?: string; + websiteUrl?: string; + tagline?: string; +} + +export interface LiveRaceData { + id: string; + name: string; + date: string; + registeredCount?: number; + strengthOfField?: number; +} + +export interface DriverSummaryData { + driverId: string; + driverName: string; + avatarUrl: string | null; + rating: number | null; + rank: number | null; + roleBadgeText: string; + roleBadgeClasses: string; + profileUrl: string; +} + +export interface LeagueDetailViewData { + // Basic info + leagueId: string; + name: string; + description: string; + + // Info card data + info: LeagueInfoData; + + // Live races + runningRaces: LiveRaceData[]; + + // Sponsors + sponsors: SponsorInfo[]; + + // Management + ownerSummary: DriverSummaryData | null; + adminSummaries: DriverSummaryData[]; + stewardSummaries: DriverSummaryData[]; + + // Sponsor insights (for sponsor mode) + sponsorInsights: { + avgViewsPerRace: number; + engagementRate: string; + estimatedReach: number; + tier: 'premium' | 'standard' | 'starter'; + trustScore: number; + discordMembers: number; + monthlyActivity: number; + mainSponsorAvailable: boolean; + secondarySlotsAvailable: number; + mainSponsorPrice: number; + secondaryPrice: number; + totalImpressions: number; + } | null; +} \ No newline at end of file diff --git a/apps/website/lib/view-data/LeagueStandingsViewData.ts b/apps/website/lib/view-data/LeagueStandingsViewData.ts new file mode 100644 index 000000000..ff64e10d5 --- /dev/null +++ b/apps/website/lib/view-data/LeagueStandingsViewData.ts @@ -0,0 +1,39 @@ +/** + * LeagueStandingsViewData - Pure ViewData for LeagueStandingsTemplate + * Contains only raw serializable data, no methods or computed properties + */ + +export interface StandingEntryData { + driverId: string; + position: number; + points: number; + wins: number; + podiums: number; + races: number; +} + +export interface DriverData { + id: string; + name: string; + avatarUrl: string | null; + iracingId?: string; + rating?: number; + country?: string; +} + +export interface LeagueMembershipData { + driverId: string; + leagueId: string; + role: 'owner' | 'admin' | 'steward' | 'member'; + joinedAt: string; + status: 'active' | 'pending' | 'banned'; +} + +export interface LeagueStandingsViewData { + standings: StandingEntryData[]; + drivers: DriverData[]; + memberships: LeagueMembershipData[]; + leagueId: string; + currentDriverId: string | null; + isAdmin: boolean; +} \ No newline at end of file diff --git a/apps/website/templates/view-data/ProfileLeaguesViewData.ts b/apps/website/lib/view-data/ProfileLeaguesViewData.ts similarity index 100% rename from apps/website/templates/view-data/ProfileLeaguesViewData.ts rename to apps/website/lib/view-data/ProfileLeaguesViewData.ts diff --git a/apps/website/templates/view-data/TeamDetailViewData.ts b/apps/website/lib/view-data/TeamDetailViewData.ts similarity index 100% rename from apps/website/templates/view-data/TeamDetailViewData.ts rename to apps/website/lib/view-data/TeamDetailViewData.ts diff --git a/apps/website/templates/view-data/TeamsViewData.ts b/apps/website/lib/view-data/TeamsViewData.ts similarity index 100% rename from apps/website/templates/view-data/TeamsViewData.ts rename to apps/website/lib/view-data/TeamsViewData.ts