From f2bd80ccd392374047db553513dddefcebbf1c18 Mon Sep 17 00:00:00 2001 From: Marc Mintel Date: Mon, 26 Jan 2026 17:56:11 +0100 Subject: [PATCH] code quality --- .../leaderboards/RankingsPodium.tsx | 1 + .../profile/ProfileDetailsPanel.tsx | 1 + .../website/hooks/league/useLeagueSchedule.ts | 5 +- .../league/useLeagueScheduleAdminPageData.ts | 4 +- apps/website/lib/adapters/MediaAdapter.ts | 2 +- .../AdminDashboardViewDataBuilder.ts | 6 +- .../ForgotPasswordViewDataBuilder.ts | 4 +- .../view-data/HealthViewDataBuilder.ts | 8 ++- .../view-data/LeagueCoverViewDataBuilder.ts | 2 +- .../view-data/LeagueLogoViewDataBuilder.ts | 6 +- .../LeagueRosterAdminViewDataBuilder.ts | 2 +- .../LeagueScheduleViewDataBuilder.ts | 8 +-- .../LeagueSettingsViewDataBuilder.ts | 4 +- .../LeagueSponsorshipsViewDataBuilder.ts | 24 +++---- .../LeagueStandingsViewDataBuilder.ts | 8 +-- .../view-data/LeagueWalletViewDataBuilder.ts | 6 +- .../view-data/LeaguesViewDataBuilder.ts | 6 +- .../view-data/LoginViewDataBuilder.ts | 6 +- .../view-data/SponsorLogoViewDataBuilder.ts | 2 +- .../view-data/TeamLogoViewDataBuilder.ts | 2 +- .../view-data/TrackImageViewDataBuilder.ts | 2 +- .../auth/types/ForgotPasswordPageDTO.ts | 8 +++ apps/website/lib/types/MediaBinaryDTO.ts | 9 +++ .../lib/view-data/LeagueScheduleViewData.ts | 2 +- .../lib/view-data/LeagueStandingsViewData.ts | 3 + .../templates/AdminDashboardTemplate.tsx | 20 +++--- apps/website/templates/AdminUsersTemplate.tsx | 10 ++- .../templates/CreateLeagueWizardTemplate.tsx | 50 +++++++------- apps/website/templates/DashboardTemplate.tsx | 2 +- .../templates/DriverProfileTemplate.tsx | 2 +- .../templates/DriverRankingsTemplate.tsx | 18 ++--- apps/website/templates/DriversTemplate.tsx | 3 +- apps/website/templates/HomeTemplate.tsx | 2 +- .../templates/LeagueAdminScheduleTemplate.tsx | 10 +-- .../templates/LeagueDetailTemplate.tsx | 14 ++-- .../templates/LeagueOverviewTemplate.tsx | 4 +- .../templates/LeagueRulebookTemplate.tsx | 4 +- .../templates/LeagueScheduleTemplate.tsx | 4 +- .../templates/LeagueSettingsTemplate.tsx | 2 +- .../templates/LeagueSponsorshipsTemplate.tsx | 2 +- .../templates/LeagueStandingsTemplate.tsx | 10 +-- .../templates/LeagueWalletTemplate.tsx | 2 +- apps/website/templates/LeaguesTemplate.tsx | 42 ++++++------ apps/website/templates/MediaTemplate.tsx | 4 +- apps/website/templates/NotFoundTemplate.tsx | 2 +- .../templates/ProfileLeaguesTemplate.tsx | 2 +- .../templates/ProfileLiveriesTemplate.tsx | 2 +- .../templates/ProfileLiveryUploadTemplate.tsx | 12 ++-- .../templates/ProfileSettingsTemplate.tsx | 2 +- .../templates/ProfileSidebarTemplate.tsx | 12 ++-- apps/website/templates/ProfileTemplate.tsx | 2 +- .../templates/ProtestDetailTemplate.tsx | 65 +++++++++---------- apps/website/templates/RaceDetailTemplate.tsx | 4 +- .../website/templates/RaceResultsTemplate.tsx | 2 +- .../templates/RaceStewardingTemplate.tsx | 2 +- apps/website/templates/RacesAllTemplate.tsx | 8 +-- apps/website/templates/RacesIndexTemplate.tsx | 13 ++-- apps/website/templates/RacesTemplate.tsx | 3 +- .../website/templates/RosterAdminTemplate.tsx | 2 +- apps/website/templates/RulebookTemplate.tsx | 2 +- .../website/templates/ServerErrorTemplate.tsx | 2 +- .../templates/SponsorBillingTemplate.tsx | 4 +- .../templates/SponsorDashboardTemplate.tsx | 30 ++++----- .../templates/SponsorLeagueDetailTemplate.tsx | 2 +- .../templates/SponsorLeaguesTemplate.tsx | 4 +- .../templates/SponsorshipRequestsTemplate.tsx | 2 +- apps/website/templates/StewardingTemplate.tsx | 2 +- apps/website/templates/TeamDetailTemplate.tsx | 25 ++++--- .../templates/TeamLeaderboardTemplate.tsx | 9 +-- .../templates/TeamRankingsTemplate.tsx | 16 ++--- apps/website/templates/TeamsTemplate.tsx | 16 ++--- .../templates/actions/ActionsTemplate.tsx | 2 +- .../templates/auth/ForgotPasswordTemplate.tsx | 2 +- .../templates/auth/LoginLoadingTemplate.tsx | 4 +- apps/website/templates/auth/LoginTemplate.tsx | 2 +- .../templates/auth/ResetPasswordTemplate.tsx | 2 +- .../website/templates/auth/SignupTemplate.tsx | 2 +- .../layout/GlobalSidebarTemplate.tsx | 3 +- .../templates/layout/RootAppShellTemplate.tsx | 2 +- .../onboarding/OnboardingTemplate.tsx | 4 +- .../templates/shared/StatusTemplates.tsx | 6 +- 81 files changed, 301 insertions(+), 311 deletions(-) create mode 100644 apps/website/lib/services/auth/types/ForgotPasswordPageDTO.ts create mode 100644 apps/website/lib/types/MediaBinaryDTO.ts diff --git a/apps/website/components/leaderboards/RankingsPodium.tsx b/apps/website/components/leaderboards/RankingsPodium.tsx index b1d7afb59..f551ccb82 100644 --- a/apps/website/components/leaderboards/RankingsPodium.tsx +++ b/apps/website/components/leaderboards/RankingsPodium.tsx @@ -2,6 +2,7 @@ import { RatingFormatter } from '@/lib/formatters/RatingFormatter'; import { Avatar } from '@/ui/Avatar'; import { Group } from '@/ui/Group'; import { Surface } from '@/ui/Surface'; +import { Text } from '@/ui/Text'; interface PodiumDriver { id: string; diff --git a/apps/website/components/profile/ProfileDetailsPanel.tsx b/apps/website/components/profile/ProfileDetailsPanel.tsx index 9269c1873..e9e02c3c3 100644 --- a/apps/website/components/profile/ProfileDetailsPanel.tsx +++ b/apps/website/components/profile/ProfileDetailsPanel.tsx @@ -5,6 +5,7 @@ import { Group } from '@/ui/Group'; import { Input } from '@/ui/Input'; import { Panel } from '@/ui/Panel'; import { Stack } from '@/ui/Stack'; +import { Text } from '@/ui/Text'; import { TextArea } from '@/ui/TextArea'; interface ProfileDetailsPanelProps { diff --git a/apps/website/hooks/league/useLeagueSchedule.ts b/apps/website/hooks/league/useLeagueSchedule.ts index a911ef7a8..d9580ecb9 100644 --- a/apps/website/hooks/league/useLeagueSchedule.ts +++ b/apps/website/hooks/league/useLeagueSchedule.ts @@ -3,10 +3,11 @@ import { enhanceQueryResult } from '@/lib/di/hooks/useReactQueryWithApiError'; import { LEAGUE_SERVICE_TOKEN } from '@/lib/di/tokens'; import { DateFormatter } from '@/lib/formatters/DateFormatter'; import type { RaceDTO } from '@/lib/types/generated/RaceDTO'; -import { LeagueScheduleRaceViewModel, LeagueScheduleViewModel } from '@/lib/view-models/LeagueScheduleViewModel'; +import { LeagueScheduleViewModel } from '@/lib/view-models/LeagueScheduleViewModel'; +import type { ILeagueScheduleRaceViewModel } from '@/lib/view-models/LeagueScheduleRaceViewModel'; import { useQuery } from '@tanstack/react-query'; -function mapRaceDtoToViewModel(race: RaceDTO): LeagueScheduleRaceViewModel { +function mapRaceDtoToViewModel(race: RaceDTO): ILeagueScheduleRaceViewModel { const scheduledAt = race.date ? new Date(race.date) : new Date(0); const now = new Date(); const isPast = scheduledAt.getTime() < now.getTime(); diff --git a/apps/website/hooks/league/useLeagueScheduleAdminPageData.ts b/apps/website/hooks/league/useLeagueScheduleAdminPageData.ts index 4834dec6a..37c5c8dbf 100644 --- a/apps/website/hooks/league/useLeagueScheduleAdminPageData.ts +++ b/apps/website/hooks/league/useLeagueScheduleAdminPageData.ts @@ -6,10 +6,10 @@ import type { LeagueSeasonSummaryDTO } from '@/lib/types/generated/LeagueSeasonS import type { RaceDTO } from '@/lib/types/generated/RaceDTO'; import { LeagueRoleUtility } from '@/lib/utilities/LeagueRoleUtility'; import { LeagueAdminScheduleViewModel } from '@/lib/view-models/LeagueAdminScheduleViewModel'; -import { LeagueScheduleRaceViewModel } from '@/lib/view-models/LeagueScheduleViewModel'; import { LeagueSeasonSummaryViewModel } from '@/lib/view-models/LeagueSeasonSummaryViewModel'; +import type { ILeagueScheduleRaceViewModel } from '@/lib/view-models/LeagueScheduleRaceViewModel'; -function mapRaceDtoToViewModel(race: RaceDTO): LeagueScheduleRaceViewModel { +function mapRaceDtoToViewModel(race: RaceDTO): ILeagueScheduleRaceViewModel { const scheduledAt = race.date ? new Date(race.date) : new Date(0); const now = new Date(); const isPast = scheduledAt.getTime() < now.getTime(); diff --git a/apps/website/lib/adapters/MediaAdapter.ts b/apps/website/lib/adapters/MediaAdapter.ts index 0e39dff99..7e3d95774 100644 --- a/apps/website/lib/adapters/MediaAdapter.ts +++ b/apps/website/lib/adapters/MediaAdapter.ts @@ -8,7 +8,7 @@ import { getWebsiteApiBaseUrl } from '@/lib/config/apiBaseUrl'; import { Result } from '@/lib/contracts/Result'; import { DomainError } from '@/lib/contracts/services/Service'; -import { MediaBinaryDTO } from '@/lib/types/generated/MediaBinaryDTO'; +import { MediaBinaryDTO } from '@/lib/types/MediaBinaryDTO'; // TODO why is this an adapter? diff --git a/apps/website/lib/builders/view-data/AdminDashboardViewDataBuilder.ts b/apps/website/lib/builders/view-data/AdminDashboardViewDataBuilder.ts index 041693cc7..046699aae 100644 --- a/apps/website/lib/builders/view-data/AdminDashboardViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/AdminDashboardViewDataBuilder.ts @@ -1,5 +1,5 @@ import type { ViewDataBuilder } from '../../contracts/builders/ViewDataBuilder'; -import type { DashboardStatsResponseDto } from '../../types/generated/DashboardStatsResponseDTO'; +import type { DashboardStatsResponseDTO } from '../../types/generated/DashboardStatsResponseDTO'; import type { AdminDashboardViewData } from '../../view-data/AdminDashboardViewData'; export class AdminDashboardViewDataBuilder { @@ -9,7 +9,7 @@ export class AdminDashboardViewDataBuilder { * @param apiDto - The DTO from the service * @returns ViewData for the admin dashboard */ - public static build(apiDto: DashboardStatsResponseDto): AdminDashboardViewData { + public static build(apiDto: DashboardStatsResponseDTO): AdminDashboardViewData { return { stats: { totalUsers: apiDto.totalUsers, @@ -24,4 +24,4 @@ export class AdminDashboardViewDataBuilder { } } -AdminDashboardViewDataBuilder satisfies ViewDataBuilder; +AdminDashboardViewDataBuilder satisfies ViewDataBuilder; diff --git a/apps/website/lib/builders/view-data/ForgotPasswordViewDataBuilder.ts b/apps/website/lib/builders/view-data/ForgotPasswordViewDataBuilder.ts index 3c7ee27a5..bc92d6137 100644 --- a/apps/website/lib/builders/view-data/ForgotPasswordViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/ForgotPasswordViewDataBuilder.ts @@ -1,13 +1,13 @@ import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; -import type { ForgotPasswordPageDTO } from '@/lib/types/generated/ForgotPasswordPageDTO'; +import type { ForgotPasswordPageDTO } from '@/lib/services/auth/types/ForgotPasswordPageDTO'; import type { ForgotPasswordViewData } from '@/lib/view-data/ForgotPasswordViewData'; export class ForgotPasswordViewDataBuilder { public static build(apiDto: ForgotPasswordPageDTO): ForgotPasswordViewData { return { - returnTo: apiDto.returnTo, + returnTo: apiDto.returnTo || '', showSuccess: false, formState: { fields: { diff --git a/apps/website/lib/builders/view-data/HealthViewDataBuilder.ts b/apps/website/lib/builders/view-data/HealthViewDataBuilder.ts index 32d1cd5f9..80b25188b 100644 --- a/apps/website/lib/builders/view-data/HealthViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/HealthViewDataBuilder.ts @@ -5,9 +5,11 @@ import { HealthAlertFormatter } from '@/lib/formatters/HealthAlertFormatter'; import { HealthComponentFormatter } from '@/lib/formatters/HealthComponentFormatter'; import { HealthMetricFormatter } from '@/lib/formatters/HealthMetricFormatter'; import { HealthStatusFormatter } from '@/lib/formatters/HealthStatusFormatter'; -import type { HealthDTO } from '@/lib/types/generated/HealthDTO'; +import type { HealthDTO } from '../../../../api/src/domain/health/HealthDTO'; import type { HealthAlert, HealthComponent, HealthMetrics, HealthStatus, HealthViewData } from '@/lib/view-data/HealthViewData'; +export type { HealthDTO }; + export class HealthViewDataBuilder { public static build(apiDto: HealthDTO): HealthViewData { const now = new Date(); @@ -38,7 +40,7 @@ export class HealthViewDataBuilder { }; // Build components - const components: HealthComponent[] = (apiDto.components || []).map((component) => ({ + const components: HealthComponent[] = (apiDto.components || []).map((component: { name: string; status: 'ok' | 'degraded' | 'error' | 'unknown'; lastCheck?: string; responseTime?: number; errorRate?: number; }) => ({ name: component.name, status: component.status, statusLabel: HealthComponentFormatter.formatStatusLabel(component.status), @@ -51,7 +53,7 @@ export class HealthViewDataBuilder { })); // Build alerts - const alerts: HealthAlert[] = (apiDto.alerts || []).map((alert) => ({ + const alerts: HealthAlert[] = (apiDto.alerts || []).map((alert: { id: string; type: 'critical' | 'warning' | 'info'; title: string; message: string; timestamp: string; }) => ({ id: alert.id, type: alert.type, title: alert.title, diff --git a/apps/website/lib/builders/view-data/LeagueCoverViewDataBuilder.ts b/apps/website/lib/builders/view-data/LeagueCoverViewDataBuilder.ts index 3cd304fd0..803f10662 100644 --- a/apps/website/lib/builders/view-data/LeagueCoverViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/LeagueCoverViewDataBuilder.ts @@ -1,7 +1,7 @@ import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; -import type { MediaBinaryDTO } from '@/lib/types/generated/MediaBinaryDTO'; +import type { MediaBinaryDTO } from '@/lib/types/MediaBinaryDTO'; import type { LeagueCoverViewData } from '@/lib/view-data/LeagueCoverViewData'; export class LeagueCoverViewDataBuilder { diff --git a/apps/website/lib/builders/view-data/LeagueLogoViewDataBuilder.ts b/apps/website/lib/builders/view-data/LeagueLogoViewDataBuilder.ts index e1df96ed3..ab7f9445e 100644 --- a/apps/website/lib/builders/view-data/LeagueLogoViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/LeagueLogoViewDataBuilder.ts @@ -1,8 +1,8 @@ -'use client'; -import type { MediaBinaryDTO } from '@/lib/types/generated/MediaBinaryDTO'; -import type { LeagueLogoViewData } from '@/lib/view-data/LeagueLogoViewData'; + import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; +import type { MediaBinaryDTO } from '@/lib/types/MediaBinaryDTO'; +import type { LeagueLogoViewData } from '@/lib/view-data/LeagueLogoViewData'; export class LeagueLogoViewDataBuilder { public static build(apiDto: MediaBinaryDTO): LeagueLogoViewData { diff --git a/apps/website/lib/builders/view-data/LeagueRosterAdminViewDataBuilder.ts b/apps/website/lib/builders/view-data/LeagueRosterAdminViewDataBuilder.ts index febe79c25..80ca24a5f 100644 --- a/apps/website/lib/builders/view-data/LeagueRosterAdminViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/LeagueRosterAdminViewDataBuilder.ts @@ -1,4 +1,4 @@ -'use client'; + import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; import { DateFormatter } from '@/lib/formatters/DateFormatter'; diff --git a/apps/website/lib/builders/view-data/LeagueScheduleViewDataBuilder.ts b/apps/website/lib/builders/view-data/LeagueScheduleViewDataBuilder.ts index b0d1ece3a..1e80619ad 100644 --- a/apps/website/lib/builders/view-data/LeagueScheduleViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/LeagueScheduleViewDataBuilder.ts @@ -1,8 +1,8 @@ -'use client'; -import type { LeagueScheduleViewData } from '@/lib/view-data/LeagueScheduleViewData'; -import type { LeagueScheduleDTO } from '@/lib/types/generated/LeagueScheduleDTO'; + import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; +import type { LeagueScheduleDTO } from '@/lib/types/generated/LeagueScheduleDTO'; +import type { LeagueScheduleViewData } from '@/lib/view-data/LeagueScheduleViewData'; export class LeagueScheduleViewDataBuilder { public static build(apiDto: LeagueScheduleDTO, currentDriverId?: string, isAdmin: boolean = false): LeagueScheduleViewData { @@ -24,7 +24,7 @@ export class LeagueScheduleViewDataBuilder { sessionType: race.sessionType || 'race', isPast, isUpcoming, - status: race.status || (isPast ? 'completed' : 'scheduled'), + status: (race.status || (isPast ? 'completed' : 'scheduled')) as 'scheduled' | 'completed', // Registration info (would come from API in real implementation) isUserRegistered: false, canRegister: isUpcoming, diff --git a/apps/website/lib/builders/view-data/LeagueSettingsViewDataBuilder.ts b/apps/website/lib/builders/view-data/LeagueSettingsViewDataBuilder.ts index 5b9e78844..3b223b1dc 100644 --- a/apps/website/lib/builders/view-data/LeagueSettingsViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/LeagueSettingsViewDataBuilder.ts @@ -1,7 +1,7 @@ -'use client'; -import type { LeagueSettingsViewData } from '@/lib/view-data/LeagueSettingsViewData'; + import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; +import type { LeagueSettingsViewData } from '@/lib/view-data/LeagueSettingsViewData'; type LeagueSettingsInputDTO = { league: { id: string; name: string; ownerId: string; createdAt: string }; diff --git a/apps/website/lib/builders/view-data/LeagueSponsorshipsViewDataBuilder.ts b/apps/website/lib/builders/view-data/LeagueSponsorshipsViewDataBuilder.ts index dfd31c5bc..a493e06a5 100644 --- a/apps/website/lib/builders/view-data/LeagueSponsorshipsViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/LeagueSponsorshipsViewDataBuilder.ts @@ -1,16 +1,12 @@ -'use client'; + +import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; import { DateFormatter } from '@/lib/formatters/DateFormatter'; import { StatusFormatter } from '@/lib/formatters/StatusFormatter'; +import type { LeagueSponsorshipsApiDto } from '@/lib/types/tbd/LeagueSponsorshipsApiDto'; import type { LeagueSponsorshipsViewData } from '@/lib/view-data/LeagueSponsorshipsViewData'; -import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; -import type { GetSeasonSponsorshipsOutputDTO } from '@/lib/types/generated/GetSeasonSponsorshipsOutputDTO'; -type LeagueSponsorshipsInputDTO = GetSeasonSponsorshipsOutputDTO & { - leagueId: string; - league: { id: string; name: string; description: string }; - sponsorshipSlots: LeagueSponsorshipsViewData['sponsorshipSlots']; -} +type LeagueSponsorshipsInputDTO = LeagueSponsorshipsApiDto; export class LeagueSponsorshipsViewDataBuilder { public static build(apiDto: LeagueSponsorshipsInputDTO): LeagueSponsorshipsViewData { @@ -20,13 +16,13 @@ export class LeagueSponsorshipsViewDataBuilder { onTabChange: () => {}, league: apiDto.league, sponsorshipSlots: apiDto.sponsorshipSlots, - sponsorshipRequests: apiDto.sponsorships.map(r => ({ + sponsorshipRequests: apiDto.sponsorshipRequests.map(r => ({ id: r.id, - slotId: '', // Missing in DTO - sponsorId: '', // Missing in DTO - sponsorName: '', // Missing in DTO - requestedAt: r.createdAt, - formattedRequestedAt: DateFormatter.formatShort(r.createdAt), + slotId: r.slotId, + sponsorId: r.sponsorId, + sponsorName: r.sponsorName, + requestedAt: r.requestedAt, + formattedRequestedAt: DateFormatter.formatShort(r.requestedAt), status: r.status as 'pending' | 'approved' | 'rejected', statusLabel: StatusFormatter.protestStatus(r.status), })), diff --git a/apps/website/lib/builders/view-data/LeagueStandingsViewDataBuilder.ts b/apps/website/lib/builders/view-data/LeagueStandingsViewDataBuilder.ts index 87a94265e..f9c5fae1c 100644 --- a/apps/website/lib/builders/view-data/LeagueStandingsViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/LeagueStandingsViewDataBuilder.ts @@ -1,9 +1,9 @@ -'use client'; -import type { LeagueStandingsViewData } from '@/lib/view-data/LeagueStandingsViewData'; -import type { LeagueStandingDTO } from '@/lib/types/generated/LeagueStandingDTO'; -import type { LeagueMemberDTO } from '@/lib/types/generated/LeagueMemberDTO'; + import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; +import type { LeagueMemberDTO } from '@/lib/types/generated/LeagueMemberDTO'; +import type { LeagueStandingDTO } from '@/lib/types/generated/LeagueStandingDTO'; +import type { LeagueStandingsViewData } from '@/lib/view-data/LeagueStandingsViewData'; interface LeagueStandingsApiDto { standings: LeagueStandingDTO[]; diff --git a/apps/website/lib/builders/view-data/LeagueWalletViewDataBuilder.ts b/apps/website/lib/builders/view-data/LeagueWalletViewDataBuilder.ts index 8f7b04f88..d2afd77cf 100644 --- a/apps/website/lib/builders/view-data/LeagueWalletViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/LeagueWalletViewDataBuilder.ts @@ -1,10 +1,10 @@ -'use client'; + +import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; +import { NumberFormatter } from '@/lib/formatters/NumberFormatter'; import type { GetLeagueWalletOutputDTO } from '@/lib/types/generated/GetLeagueWalletOutputDTO'; import type { LeagueWalletViewData } from '@/lib/view-data/LeagueWalletViewData'; import type { WalletTransactionViewData } from '@/lib/view-data/WalletTransactionViewData'; -import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; -import { NumberFormatter } from '@/lib/formatters/NumberFormatter'; type LeagueWalletInputDTO = GetLeagueWalletOutputDTO & { leagueId: string; diff --git a/apps/website/lib/builders/view-data/LeaguesViewDataBuilder.ts b/apps/website/lib/builders/view-data/LeaguesViewDataBuilder.ts index ed9ea6b59..66fca39a7 100644 --- a/apps/website/lib/builders/view-data/LeaguesViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/LeaguesViewDataBuilder.ts @@ -1,8 +1,8 @@ -'use client'; + +import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; import type { AllLeaguesWithCapacityAndScoringDTO } from '@/lib/types/generated/AllLeaguesWithCapacityAndScoringDTO'; import type { LeaguesViewData } from '@/lib/view-data/LeaguesViewData'; -import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; export class LeaguesViewDataBuilder { public static build(apiDto: AllLeaguesWithCapacityAndScoringDTO): LeaguesViewData { @@ -29,7 +29,7 @@ export class LeaguesViewDataBuilder { scoring: league.scoring ? { gameId: league.scoring.gameId, gameName: league.scoring.gameName, - primaryChampionshipType: league.scoring.primaryChampionshipType, + primaryChampionshipType: league.scoring.primaryChampionshipType as "driver" | "team" | "nations" | "trophy", scoringPresetId: league.scoring.scoringPresetId, scoringPresetName: league.scoring.scoringPresetName, dropPolicySummary: league.scoring.dropPolicySummary, diff --git a/apps/website/lib/builders/view-data/LoginViewDataBuilder.ts b/apps/website/lib/builders/view-data/LoginViewDataBuilder.ts index 62ec1476c..15c373c26 100644 --- a/apps/website/lib/builders/view-data/LoginViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/LoginViewDataBuilder.ts @@ -1,8 +1,8 @@ -'use client'; -import type { LoginPageDTO } from '@/lib/types/generated/LoginPageDTO'; -import type { LoginViewData } from '@/lib/view-data/LoginViewData'; + import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; +import type { LoginPageDTO } from '@/lib/services/auth/types/LoginPageDTO'; +import type { LoginViewData } from '@/lib/view-data/LoginViewData'; export class LoginViewDataBuilder { public static build(apiDto: LoginPageDTO): LoginViewData { diff --git a/apps/website/lib/builders/view-data/SponsorLogoViewDataBuilder.ts b/apps/website/lib/builders/view-data/SponsorLogoViewDataBuilder.ts index fc5437d63..5da224aab 100644 --- a/apps/website/lib/builders/view-data/SponsorLogoViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/SponsorLogoViewDataBuilder.ts @@ -5,7 +5,7 @@ */ import type { SponsorLogoViewData } from '@/lib/view-data/SponsorLogoViewData'; -import { MediaBinaryDTO } from '@/lib/types/generated/MediaBinaryDTO'; +import { MediaBinaryDTO } from '@/lib/types/MediaBinaryDTO'; import { GetMediaOutputDTO } from '@/lib/types/generated/GetMediaOutputDTO'; import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder"; diff --git a/apps/website/lib/builders/view-data/TeamLogoViewDataBuilder.ts b/apps/website/lib/builders/view-data/TeamLogoViewDataBuilder.ts index 73287017c..a5751a2fd 100644 --- a/apps/website/lib/builders/view-data/TeamLogoViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/TeamLogoViewDataBuilder.ts @@ -5,7 +5,7 @@ */ import type { TeamLogoViewData } from '@/lib/view-data/TeamLogoViewData'; -import { MediaBinaryDTO } from '@/lib/types/generated/MediaBinaryDTO'; +import { MediaBinaryDTO } from '@/lib/types/MediaBinaryDTO'; import { GetMediaOutputDTO } from '@/lib/types/generated/GetMediaOutputDTO'; import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder"; diff --git a/apps/website/lib/builders/view-data/TrackImageViewDataBuilder.ts b/apps/website/lib/builders/view-data/TrackImageViewDataBuilder.ts index fb2789881..e6dcbce72 100644 --- a/apps/website/lib/builders/view-data/TrackImageViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/TrackImageViewDataBuilder.ts @@ -5,7 +5,7 @@ * Deterministic; side-effect free; no HTTP calls. */ -import type { MediaBinaryDTO } from '@/lib/types/generated/MediaBinaryDTO'; +import type { MediaBinaryDTO } from '@/lib/types/MediaBinaryDTO'; import type { TrackImageViewData } from '@/lib/view-data/TrackImageViewData'; import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder"; diff --git a/apps/website/lib/services/auth/types/ForgotPasswordPageDTO.ts b/apps/website/lib/services/auth/types/ForgotPasswordPageDTO.ts new file mode 100644 index 000000000..5f0ea47ad --- /dev/null +++ b/apps/website/lib/services/auth/types/ForgotPasswordPageDTO.ts @@ -0,0 +1,8 @@ +/** + * ForgotPasswordPageDTO + * + * DTO for the forgot password page. + */ +export interface ForgotPasswordPageDTO { + returnTo?: string; +} \ No newline at end of file diff --git a/apps/website/lib/types/MediaBinaryDTO.ts b/apps/website/lib/types/MediaBinaryDTO.ts new file mode 100644 index 000000000..096993256 --- /dev/null +++ b/apps/website/lib/types/MediaBinaryDTO.ts @@ -0,0 +1,9 @@ +/** + * MediaBinaryDTO + * + * Represents binary media data fetched from the API. + */ +export interface MediaBinaryDTO { + buffer: ArrayBuffer; + contentType: string; +} \ No newline at end of file diff --git a/apps/website/lib/view-data/LeagueScheduleViewData.ts b/apps/website/lib/view-data/LeagueScheduleViewData.ts index 3c35b52c8..aadfca6a2 100644 --- a/apps/website/lib/view-data/LeagueScheduleViewData.ts +++ b/apps/website/lib/view-data/LeagueScheduleViewData.ts @@ -15,7 +15,7 @@ export interface LeagueScheduleViewData extends ViewData { sessionType: string; isPast: boolean; isUpcoming: boolean; - status: string; + status: 'scheduled' | 'completed'; strengthOfField?: number; isUserRegistered: boolean; canRegister: boolean; diff --git a/apps/website/lib/view-data/LeagueStandingsViewData.ts b/apps/website/lib/view-data/LeagueStandingsViewData.ts index 6a9f9db15..7f27c4d3a 100644 --- a/apps/website/lib/view-data/LeagueStandingsViewData.ts +++ b/apps/website/lib/view-data/LeagueStandingsViewData.ts @@ -8,9 +8,12 @@ export interface StandingEntryViewData { driverId: string; position: number; points: number; + totalPoints: number; wins: number; podiums: number; races: number; + racesStarted: number; + avgFinish: number; leaderPoints: number; nextPoints: number; currentUserId: string; diff --git a/apps/website/templates/AdminDashboardTemplate.tsx b/apps/website/templates/AdminDashboardTemplate.tsx index fa715eddb..f6c27d30a 100644 --- a/apps/website/templates/AdminDashboardTemplate.tsx +++ b/apps/website/templates/AdminDashboardTemplate.tsx @@ -1,29 +1,29 @@ -'use client'; + import { AdminDangerZonePanel } from '@/components/admin/AdminDangerZonePanel'; import { AdminHeaderPanel } from '@/components/admin/AdminHeaderPanel'; import { AdminSectionHeader } from '@/components/admin/AdminSectionHeader'; import { AdminStatsPanel } from '@/components/admin/AdminStatsPanel'; +import { TemplateProps } from '@/lib/contracts/components/ComponentContracts'; import { routes } from '@/lib/routing/RouteConfig'; import { AdminDashboardViewData } from '@/lib/view-data/AdminDashboardViewData'; +import { Badge } from '@/ui/Badge'; import { Box } from '@/ui/Box'; import { Button } from '@/ui/Button'; import { Card } from '@/ui/Card'; import { Container } from '@/ui/Container'; -import { Icon } from '@/ui/Icon'; import { Grid } from '@/ui/Grid'; +import { Icon } from '@/ui/Icon'; +import { QuickActionLink } from '@/ui/QuickActionLink'; import { Stack } from '@/ui/Stack'; import { Text } from '@/ui/Text'; -import { Badge } from '@/ui/Badge'; -import { QuickActionLink } from '@/ui/QuickActionLink'; import { - Activity, - Clock, - RefreshCw, - Shield, - Users + Activity, + Clock, + RefreshCw, + Shield, + Users } from 'lucide-react'; -import { TemplateProps } from '@/lib/contracts/components/ComponentContracts'; /** * AdminDashboardTemplate diff --git a/apps/website/templates/AdminUsersTemplate.tsx b/apps/website/templates/AdminUsersTemplate.tsx index 3c5c408ae..4ec3f5d73 100644 --- a/apps/website/templates/AdminUsersTemplate.tsx +++ b/apps/website/templates/AdminUsersTemplate.tsx @@ -1,4 +1,4 @@ -'use client'; + import { AdminDataTable } from '@/components/admin/AdminDataTable'; import { AdminEmptyState } from '@/components/admin/AdminEmptyState'; @@ -7,16 +7,14 @@ import { AdminStatsPanel } from '@/components/admin/AdminStatsPanel'; import { AdminUsersTable } from '@/components/admin/AdminUsersTable'; import { BulkActionBar } from '@/components/admin/BulkActionBar'; import { UserFilters } from '@/components/admin/UserFilters'; +import { TemplateProps } from '@/lib/contracts/components/ComponentContracts'; import { AdminUsersViewData } from '@/lib/view-data/AdminUsersViewData'; +import { Box } from '@/ui/Box'; import { Button } from '@/ui/Button'; import { Container } from '@/ui/Container'; -import { Icon } from '@/ui/Icon'; -import { Stack } from '@/ui/Stack'; -import { Box } from '@/ui/Box'; -import { Text } from '@/ui/Text'; import { ErrorBanner } from '@/ui/ErrorBanner'; +import { Stack } from '@/ui/Stack'; import { RefreshCw, ShieldAlert, Users } from 'lucide-react'; -import { TemplateProps } from '@/lib/contracts/components/ComponentContracts'; // We need to add InlineNotice to UIComponents if it's used // For now I'll assume it's a component or I'll add it to UIComponents diff --git a/apps/website/templates/CreateLeagueWizardTemplate.tsx b/apps/website/templates/CreateLeagueWizardTemplate.tsx index dfb5a74d2..23372529b 100644 --- a/apps/website/templates/CreateLeagueWizardTemplate.tsx +++ b/apps/website/templates/CreateLeagueWizardTemplate.tsx @@ -1,39 +1,39 @@ -'use client'; -import { FormEvent } from 'react'; -import { LeagueReviewSummary } from '@/components/leagues/LeagueReviewSummary'; -import { Card } from '@/ui/Card'; -import { Heading } from '@/ui/Heading'; -import { Input } from '@/ui/Input'; -import { Box } from '@/ui/Box'; -import { Button } from '@/ui/Button'; -import { Grid } from '@/ui/Grid'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Icon } from '@/ui/Icon'; -import { - AlertCircle, - Check, - ChevronLeft, - ChevronRight, - FileText, - Loader2, - Sparkles, -} from 'lucide-react'; + import { LeagueBasicsSection } from '@/components/leagues/LeagueBasicsSection'; import { LeagueDropSection } from '@/components/leagues/LeagueDropSection'; +import { LeagueReviewSummary } from '@/components/leagues/LeagueReviewSummary'; import { - ChampionshipsSection, - ScoringPatternSection + ChampionshipsSection, + ScoringPatternSection } from '@/components/leagues/LeagueScoringSection'; import { LeagueStewardingSection } from '@/components/leagues/LeagueStewardingSection'; import { LeagueStructureSection } from '@/components/leagues/LeagueStructureSection'; import { LeagueTimingsSection } from '@/components/leagues/LeagueTimingsSection'; import { LeagueVisibilitySection } from '@/components/leagues/LeagueVisibilitySection'; -import type { LeagueScoringPresetViewModel } from '@/lib/view-models/LeagueScoringPresetViewModel'; -import type { WizardErrors } from '@/lib/types/WizardErrors'; import { TemplateProps } from '@/lib/contracts/components/ComponentContracts'; import { ViewData } from '@/lib/contracts/view-data/ViewData'; +import type { WizardErrors } from '@/lib/types/WizardErrors'; +import type { LeagueScoringPresetViewModel } from '@/lib/view-models/LeagueScoringPresetViewModel'; +import { Box } from '@/ui/Box'; +import { Button } from '@/ui/Button'; +import { Card } from '@/ui/Card'; +import { Grid } from '@/ui/Grid'; +import { Heading } from '@/ui/Heading'; +import { Icon } from '@/ui/Icon'; +import { Input } from '@/ui/Input'; +import { Stack } from '@/ui/Stack'; +import { Text } from '@/ui/Text'; +import { + AlertCircle, + Check, + ChevronLeft, + ChevronRight, + FileText, + Loader2, + Sparkles, +} from 'lucide-react'; +import { FormEvent } from 'react'; export type Step = 1 | 2 | 3 | 4 | 5 | 6 | 7; diff --git a/apps/website/templates/DashboardTemplate.tsx b/apps/website/templates/DashboardTemplate.tsx index 5b32005b8..679e8bb5f 100644 --- a/apps/website/templates/DashboardTemplate.tsx +++ b/apps/website/templates/DashboardTemplate.tsx @@ -1,4 +1,4 @@ -'use client'; + import { DashboardKpiRow } from '@/components/dashboard/DashboardKpiRow'; import { RecentActivityTable, type ActivityItem } from '@/components/dashboard/RecentActivityTable'; diff --git a/apps/website/templates/DriverProfileTemplate.tsx b/apps/website/templates/DriverProfileTemplate.tsx index 622afc247..0dba8da48 100644 --- a/apps/website/templates/DriverProfileTemplate.tsx +++ b/apps/website/templates/DriverProfileTemplate.tsx @@ -1,4 +1,4 @@ -'use client'; + import { AchievementGrid } from '@/components/achievements/AchievementGrid'; import { RatingBreakdown } from '@/components/drivers/RatingBreakdown'; diff --git a/apps/website/templates/DriverRankingsTemplate.tsx b/apps/website/templates/DriverRankingsTemplate.tsx index e3328923e..195924afb 100644 --- a/apps/website/templates/DriverRankingsTemplate.tsx +++ b/apps/website/templates/DriverRankingsTemplate.tsx @@ -1,15 +1,15 @@ -'use client'; -import React from 'react'; -import { Trophy, ChevronLeft } from 'lucide-react'; -import { Container } from '@/ui/Container'; -import { PageHeader } from '@/ui/PageHeader'; -import { RankingsPodium } from '@/components/leaderboards/RankingsPodium'; -import { LeaderboardTable } from '@/components/leaderboards/LeaderboardTable'; -import { Button } from '@/ui/Button'; -import { Icon } from '@/ui/Icon'; + import { LeaderboardFiltersBar } from '@/components/leaderboards/LeaderboardFiltersBar'; +import { LeaderboardTable } from '@/components/leaderboards/LeaderboardTable'; +import { RankingsPodium } from '@/components/leaderboards/RankingsPodium'; import type { DriverRankingsViewData } from '@/lib/view-data/DriverRankingsViewData'; +import { Button } from '@/ui/Button'; +import { Container } from '@/ui/Container'; +import { Icon } from '@/ui/Icon'; +import { PageHeader } from '@/ui/PageHeader'; +import { ChevronLeft, Trophy } from 'lucide-react'; +import React from 'react'; interface DriverRankingsTemplateProps { viewData: DriverRankingsViewData; diff --git a/apps/website/templates/DriversTemplate.tsx b/apps/website/templates/DriversTemplate.tsx index dde6879f5..ceadf37bc 100644 --- a/apps/website/templates/DriversTemplate.tsx +++ b/apps/website/templates/DriversTemplate.tsx @@ -1,4 +1,4 @@ -'use client'; + import { DriverCard } from '@/components/drivers/DriverCard'; import { DriverGrid } from '@/components/drivers/DriverGrid'; @@ -9,6 +9,7 @@ import { EmptyState } from '@/ui/EmptyState'; import { Input } from '@/ui/Input'; import { PageHeader } from '@/ui/PageHeader'; import { Section } from '@/ui/Section'; +import { Stack } from '@/ui/Stack'; import { Search, Users } from 'lucide-react'; interface DriversTemplateProps { diff --git a/apps/website/templates/HomeTemplate.tsx b/apps/website/templates/HomeTemplate.tsx index 0c8d02035..b68c71080 100644 --- a/apps/website/templates/HomeTemplate.tsx +++ b/apps/website/templates/HomeTemplate.tsx @@ -1,4 +1,4 @@ -'use client'; + import { CtaSection } from '@/components/home/CtaSection'; import { Hero } from '@/components/home/Hero'; diff --git a/apps/website/templates/LeagueAdminScheduleTemplate.tsx b/apps/website/templates/LeagueAdminScheduleTemplate.tsx index ba3813655..ae2d4f772 100644 --- a/apps/website/templates/LeagueAdminScheduleTemplate.tsx +++ b/apps/website/templates/LeagueAdminScheduleTemplate.tsx @@ -1,15 +1,15 @@ -'use client'; -import { InlineNotice } from '@/ui/InlineNotice'; + import type { LeagueAdminScheduleViewData } from '@/lib/view-data/LeagueAdminScheduleViewData'; import { Box } from '@/ui/Box'; import { Button } from '@/ui/Button'; import { Card } from '@/ui/Card'; -import { Heading } from '@/ui/Heading'; -import { Input } from '@/ui/Input'; import { Grid } from '@/ui/Grid'; -import { Stack } from '@/ui/Stack'; +import { Heading } from '@/ui/Heading'; +import { InlineNotice } from '@/ui/InlineNotice'; +import { Input } from '@/ui/Input'; import { Select } from '@/ui/Select'; +import { Stack } from '@/ui/Stack'; import { Surface } from '@/ui/Surface'; import { Text } from '@/ui/Text'; diff --git a/apps/website/templates/LeagueDetailTemplate.tsx b/apps/website/templates/LeagueDetailTemplate.tsx index dd1710f45..97d92c455 100644 --- a/apps/website/templates/LeagueDetailTemplate.tsx +++ b/apps/website/templates/LeagueDetailTemplate.tsx @@ -1,17 +1,15 @@ -'use client'; -import { usePathname } from 'next/navigation'; -import { LeagueCard } from '@/components/leagues/LeagueCardWrapper'; -import { routes } from '@/lib/routing/RouteConfig'; + +import { TemplateProps } from '@/lib/contracts/components/ComponentContracts'; import type { LeagueDetailViewData } from '@/lib/view-data/LeagueDetailViewData'; import { Box } from '@/ui/Box'; -import { Link } from '@/ui/Link'; -import { Text } from '@/ui/Text'; -import { Stack } from '@/ui/Stack'; import { Container } from '@/ui/Container'; import { Icon } from '@/ui/Icon'; +import { Link } from '@/ui/Link'; +import { Stack } from '@/ui/Stack'; +import { Text } from '@/ui/Text'; import { ChevronRight } from 'lucide-react'; -import { TemplateProps } from '@/lib/contracts/components/ComponentContracts'; +import { usePathname } from 'next/navigation'; export function LeagueDetailTemplate({ viewData, children, tabs }: TemplateProps & { children?: React.ReactNode, tabs?: any[] }) { const pathname = usePathname(); diff --git a/apps/website/templates/LeagueOverviewTemplate.tsx b/apps/website/templates/LeagueOverviewTemplate.tsx index 35c7ca4d8..fbafa6609 100644 --- a/apps/website/templates/LeagueOverviewTemplate.tsx +++ b/apps/website/templates/LeagueOverviewTemplate.tsx @@ -1,4 +1,4 @@ -'use client'; + import { AdminQuickViewWidgets } from '@/components/leagues/AdminQuickViewWidgets'; import { LeagueActivityFeed } from '@/components/leagues/LeagueActivityFeed'; @@ -7,9 +7,9 @@ import { NextRaceCountdownWidget } from '@/components/leagues/NextRaceCountdownW import { SeasonProgressWidget } from '@/components/leagues/SeasonProgressWidget'; import type { LeagueDetailViewData } from '@/lib/view-data/LeagueDetailViewData'; import { Box } from '@/ui/Box'; +import { Link } from '@/ui/Link'; import { Stack } from '@/ui/Stack'; import { Text } from '@/ui/Text'; -import { Link } from '@/ui/Link'; import { Calendar, Shield, Trophy, Users, type LucideIcon } from 'lucide-react'; interface LeagueOverviewTemplateProps { diff --git a/apps/website/templates/LeagueRulebookTemplate.tsx b/apps/website/templates/LeagueRulebookTemplate.tsx index 358159197..90b1cc355 100644 --- a/apps/website/templates/LeagueRulebookTemplate.tsx +++ b/apps/website/templates/LeagueRulebookTemplate.tsx @@ -1,12 +1,12 @@ -'use client'; + import { RulebookTabs, type RulebookSection } from '@/components/leagues/RulebookTabs'; import { PointsTable } from '@/components/races/PointsTable'; import type { LeagueRulebookViewData } from '@/lib/view-data/LeagueRulebookViewData'; import { Box } from '@/ui/Box'; +import { Grid } from '@/ui/Grid'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; -import { Grid } from '@/ui/Grid'; import { Stack } from '@/ui/Stack'; import { Surface } from '@/ui/Surface'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/ui/Table'; diff --git a/apps/website/templates/LeagueScheduleTemplate.tsx b/apps/website/templates/LeagueScheduleTemplate.tsx index 67715065f..9a3069d09 100644 --- a/apps/website/templates/LeagueScheduleTemplate.tsx +++ b/apps/website/templates/LeagueScheduleTemplate.tsx @@ -1,5 +1,3 @@ -'use client'; - import { navigateToEditRaceAction, navigateToRaceResultsAction, @@ -48,7 +46,7 @@ export function LeagueScheduleTemplate({ car: race.car, sessionType: race.sessionType, scheduledAt: race.scheduledAt, - status: race.status, + status: race.status as 'scheduled' | 'completed', strengthOfField: race.strengthOfField, isUserRegistered: race.isUserRegistered, canRegister: race.canRegister, diff --git a/apps/website/templates/LeagueSettingsTemplate.tsx b/apps/website/templates/LeagueSettingsTemplate.tsx index 15540d810..dafe4e0af 100644 --- a/apps/website/templates/LeagueSettingsTemplate.tsx +++ b/apps/website/templates/LeagueSettingsTemplate.tsx @@ -1,4 +1,4 @@ -'use client'; + import type { LeagueSettingsViewData } from '@/lib/view-data/LeagueSettingsViewData'; import { Box } from '@/ui/Box'; diff --git a/apps/website/templates/LeagueSponsorshipsTemplate.tsx b/apps/website/templates/LeagueSponsorshipsTemplate.tsx index 7888c9730..13ab84f36 100644 --- a/apps/website/templates/LeagueSponsorshipsTemplate.tsx +++ b/apps/website/templates/LeagueSponsorshipsTemplate.tsx @@ -1,4 +1,4 @@ -'use client'; + import { LeagueDecalPlacementEditor } from '@/components/leagues/LeagueDecalPlacementEditor'; import { SponsorshipRequestCard } from '@/components/leagues/SponsorshipRequestCard'; diff --git a/apps/website/templates/LeagueStandingsTemplate.tsx b/apps/website/templates/LeagueStandingsTemplate.tsx index 88e706a2b..887667c3e 100644 --- a/apps/website/templates/LeagueStandingsTemplate.tsx +++ b/apps/website/templates/LeagueStandingsTemplate.tsx @@ -1,15 +1,15 @@ -'use client'; -import { useState } from 'react'; + import { LeagueStandingsTable } from '@/components/leagues/LeagueStandingsTable'; import type { LeagueStandingsViewData } from '@/lib/view-data/LeagueStandingsViewData'; import { Box } from '@/ui/Box'; -import { Text } from '@/ui/Text'; -import { Group } from '@/ui/Group'; import { Button } from '@/ui/Button'; +import { Group } from '@/ui/Group'; import { Icon } from '@/ui/Icon'; import { Surface } from '@/ui/Surface'; -import { Trophy, Users, Calendar, Award } from 'lucide-react'; +import { Text } from '@/ui/Text'; +import { Award, Calendar, Trophy, Users } from 'lucide-react'; +import { useState } from 'react'; interface LeagueStandingsTemplateProps { viewData: LeagueStandingsViewData; diff --git a/apps/website/templates/LeagueWalletTemplate.tsx b/apps/website/templates/LeagueWalletTemplate.tsx index 451134cd4..5ff9f054d 100644 --- a/apps/website/templates/LeagueWalletTemplate.tsx +++ b/apps/website/templates/LeagueWalletTemplate.tsx @@ -1,4 +1,4 @@ -'use client'; + import { WalletSummaryPanel } from '@/components/leagues/WalletSummaryPanel'; import { TemplateProps } from '@/lib/contracts/components/ComponentContracts'; diff --git a/apps/website/templates/LeaguesTemplate.tsx b/apps/website/templates/LeaguesTemplate.tsx index e9f51ef40..04a6e04c0 100644 --- a/apps/website/templates/LeaguesTemplate.tsx +++ b/apps/website/templates/LeaguesTemplate.tsx @@ -1,35 +1,33 @@ -'use client'; + import { LeagueCard } from '@/components/leagues/LeagueCardWrapper'; -import type { LeaguesViewData } from '@/lib/view-data/LeaguesViewData'; +import { CategoryId, LeagueCategory } from '@/lib/config/leagueCategories'; +import { TemplateProps } from '@/lib/contracts/components/ComponentContracts'; +import { LeaguesViewData } from '@/lib/view-data/LeaguesViewData'; import { LeagueSummaryViewModel } from '@/lib/view-models/LeagueSummaryViewModel'; -import { LEAGUE_CATEGORIES, CategoryId, LeagueCategory } from '@/lib/config/leagueCategories'; -import { PageHeader } from '@/ui/PageHeader'; -import { Heading } from '@/ui/Heading'; -import { Input } from '@/ui/Input'; -import { Button } from '@/ui/Button'; -import { Group } from '@/ui/Group'; import { Box } from '@/ui/Box'; -import { Container } from '@/ui/Container'; +import { Button } from '@/ui/Button'; +import { ControlBar } from '@/ui/ControlBar'; +import { FeatureGrid } from '@/ui/FeatureGrid'; +import { Group } from '@/ui/Group'; +import { Heading } from '@/ui/Heading'; +import { Icon } from '@/ui/Icon'; +import { Input } from '@/ui/Input'; +import { MetricCard } from '@/ui/MetricCard'; +import { PageHeader } from '@/ui/PageHeader'; +import { Section } from '@/ui/Section'; +import { SegmentedControl } from '@/ui/SegmentedControl'; import { Stack } from '@/ui/Stack'; import { Surface } from '@/ui/Surface'; import { Text } from '@/ui/Text'; -import { Icon } from '@/ui/Icon'; -import { Section } from '@/ui/Section'; -import { ControlBar } from '@/ui/ControlBar'; -import { SegmentedControl } from '@/ui/SegmentedControl'; -import { MetricCard } from '@/ui/MetricCard'; -import { FeatureGrid } from '@/ui/FeatureGrid'; import { - Plus, - Search, - Trophy, - Filter, - Sparkles, - type LucideIcon, + Filter, + Plus, + Search, + Sparkles, + Trophy } from 'lucide-react'; import React from 'react'; -import { TemplateProps } from '@/lib/contracts/components/ComponentContracts'; interface LeaguesTemplateProps extends TemplateProps { searchQuery: string; diff --git a/apps/website/templates/MediaTemplate.tsx b/apps/website/templates/MediaTemplate.tsx index 8182ad05b..2b260229f 100644 --- a/apps/website/templates/MediaTemplate.tsx +++ b/apps/website/templates/MediaTemplate.tsx @@ -1,10 +1,10 @@ -'use client'; + import { MediaGallery } from '@/components/media/MediaGallery'; +import { TemplateProps } from '@/lib/contracts/components/ComponentContracts'; import { MediaViewData } from '@/lib/view-data/MediaViewData'; import { Box } from '@/ui/Box'; import { Container } from '@/ui/Container'; -import { TemplateProps } from '@/lib/contracts/components/ComponentContracts'; export function MediaTemplate({ viewData }: TemplateProps) { const { assets, categories, title, description } = viewData; diff --git a/apps/website/templates/NotFoundTemplate.tsx b/apps/website/templates/NotFoundTemplate.tsx index c15086ec3..29c7546a5 100644 --- a/apps/website/templates/NotFoundTemplate.tsx +++ b/apps/website/templates/NotFoundTemplate.tsx @@ -1,4 +1,4 @@ -'use client'; + import { NotFoundScreen } from '@/components/errors/NotFoundScreen'; import { ViewData } from '@/lib/contracts/view-data/ViewData'; diff --git a/apps/website/templates/ProfileLeaguesTemplate.tsx b/apps/website/templates/ProfileLeaguesTemplate.tsx index 08f7c420d..7feac147e 100644 --- a/apps/website/templates/ProfileLeaguesTemplate.tsx +++ b/apps/website/templates/ProfileLeaguesTemplate.tsx @@ -1,4 +1,4 @@ -'use client'; + import { MembershipPanel } from '@/components/profile/MembershipPanel'; import type { ProfileLeaguesViewData } from '@/lib/view-data/ProfileLeaguesViewData'; diff --git a/apps/website/templates/ProfileLiveriesTemplate.tsx b/apps/website/templates/ProfileLiveriesTemplate.tsx index 92052c398..79ed99cd9 100644 --- a/apps/website/templates/ProfileLiveriesTemplate.tsx +++ b/apps/website/templates/ProfileLiveriesTemplate.tsx @@ -1,4 +1,4 @@ -'use client'; + import { LiveryGallery } from '@/components/profile/LiveryGallery'; import { routes } from '@/lib/routing/RouteConfig'; diff --git a/apps/website/templates/ProfileLiveryUploadTemplate.tsx b/apps/website/templates/ProfileLiveryUploadTemplate.tsx index 417f9e187..c4ef079a8 100644 --- a/apps/website/templates/ProfileLiveryUploadTemplate.tsx +++ b/apps/website/templates/ProfileLiveryUploadTemplate.tsx @@ -1,19 +1,17 @@ -'use client'; + import { UploadDropzone } from '@/components/shared/UploadDropzone'; +import { TemplateProps } from '@/lib/contracts/components/ComponentContracts'; +import { ViewData } from '@/lib/contracts/view-data/ViewData'; import { routes } from '@/lib/routing/RouteConfig'; -import { Box } from '@/ui/Box'; import { Button } from '@/ui/Button'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Container } from '@/ui/Container'; import { Card } from '@/ui/Card'; +import { Container } from '@/ui/Container'; import { Heading } from '@/ui/Heading'; import { MediaMetaPanel, mapMediaMetadata } from '@/ui/MediaMetaPanel'; import { MediaPreviewCard } from '@/ui/MediaPreviewCard'; +import { Text } from '@/ui/Text'; import Link from 'next/link'; -import { TemplateProps } from '@/lib/contracts/components/ComponentContracts'; -import { ViewData } from '@/lib/contracts/view-data/ViewData'; interface ProfileLiveryUploadTemplateProps extends TemplateProps { selectedFile: File | null; diff --git a/apps/website/templates/ProfileSettingsTemplate.tsx b/apps/website/templates/ProfileSettingsTemplate.tsx index a48ab210f..bec469524 100644 --- a/apps/website/templates/ProfileSettingsTemplate.tsx +++ b/apps/website/templates/ProfileSettingsTemplate.tsx @@ -1,4 +1,4 @@ -'use client'; + import { ConnectedAccountsPanel } from '@/components/profile/ConnectedAccountsPanel'; import { PreferencesPanel } from '@/components/profile/PreferencesPanel'; diff --git a/apps/website/templates/ProfileSidebarTemplate.tsx b/apps/website/templates/ProfileSidebarTemplate.tsx index 34eccf554..a776f5999 100644 --- a/apps/website/templates/ProfileSidebarTemplate.tsx +++ b/apps/website/templates/ProfileSidebarTemplate.tsx @@ -1,4 +1,4 @@ -'use client'; + import { routes } from '@/lib/routing/RouteConfig'; import { Box } from '@/ui/Box'; @@ -6,11 +6,11 @@ import { Icon } from '@/ui/Icon'; import { Stack } from '@/ui/Stack'; import { Text } from '@/ui/Text'; import { - Handshake, - Palette, - Settings, - Trophy, - User + Handshake, + Palette, + Settings, + Trophy, + User } from 'lucide-react'; import Link from 'next/link'; import { usePathname } from 'next/navigation'; diff --git a/apps/website/templates/ProfileTemplate.tsx b/apps/website/templates/ProfileTemplate.tsx index a3d5e9811..c7a120470 100644 --- a/apps/website/templates/ProfileTemplate.tsx +++ b/apps/website/templates/ProfileTemplate.tsx @@ -1,4 +1,4 @@ -'use client'; + import { AchievementGrid } from '@/components/achievements/AchievementGrid'; import { CreateDriverForm } from '@/components/drivers/CreateDriverForm'; diff --git a/apps/website/templates/ProtestDetailTemplate.tsx b/apps/website/templates/ProtestDetailTemplate.tsx index 45246d89b..de15c392a 100644 --- a/apps/website/templates/ProtestDetailTemplate.tsx +++ b/apps/website/templates/ProtestDetailTemplate.tsx @@ -1,42 +1,35 @@ -'use client'; -import { Box } from '@/ui/Box'; -import { Button } from '@/ui/Button'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Icon } from '@/ui/Icon'; -import { Card } from '@/ui/Card'; -import { Container } from '@/ui/Container'; -import { Heading } from '@/ui/Heading'; -import { Link as UILink } from '@/ui/Link'; -import { Grid } from '@/ui/Grid'; -import { GridItem } from '@/ui/GridItem'; -import { - AlertCircle, - AlertTriangle, - ArrowLeft, - Calendar, - CheckCircle, - ChevronDown, - Clock, - ExternalLink, - Flag, - Gavel, - Grid3x3, - MapPin, - MessageCircle, - Send, - Shield, - ShieldAlert, - TrendingDown, - User, - Video, - XCircle, - type LucideIcon -} from 'lucide-react'; -import { routes } from '@/lib/routing/RouteConfig'; + import { TemplateProps } from '@/lib/contracts/components/ComponentContracts'; import { ViewData } from '@/lib/contracts/view-data/ViewData'; +import { routes } from '@/lib/routing/RouteConfig'; +import { Box } from '@/ui/Box'; +import { Button } from '@/ui/Button'; +import { Card } from '@/ui/Card'; +import { Container } from '@/ui/Container'; +import { Grid } from '@/ui/Grid'; +import { GridItem } from '@/ui/GridItem'; +import { Heading } from '@/ui/Heading'; +import { Icon } from '@/ui/Icon'; +import { Link as UILink } from '@/ui/Link'; +import { Stack } from '@/ui/Stack'; +import { Text } from '@/ui/Text'; +import { + AlertCircle, + AlertTriangle, + ArrowLeft, + CheckCircle, + ChevronDown, + ExternalLink, + Flag, + Gavel, + MapPin, + MessageCircle, + Send, + User, + Video, + XCircle +} from 'lucide-react'; interface ProtestDetailTemplateProps extends TemplateProps { protestDetail: any; diff --git a/apps/website/templates/RaceDetailTemplate.tsx b/apps/website/templates/RaceDetailTemplate.tsx index 9a8808b8e..c9f066f9d 100644 --- a/apps/website/templates/RaceDetailTemplate.tsx +++ b/apps/website/templates/RaceDetailTemplate.tsx @@ -1,4 +1,4 @@ -'use client'; + import { LeagueSummaryCard } from '@/components/leagues/LeagueSummaryCardWrapper'; import { EntrantsTable } from '@/components/races/EntrantsTable'; @@ -7,6 +7,7 @@ import { RaceDetailsHeader } from '@/components/races/RaceDetailsHeader'; import { RaceUserResult } from '@/components/races/RaceUserResultWrapper'; import type { SessionStatus } from '@/components/races/SessionStatusBadge'; import { TrackConditionsPanel } from '@/components/races/TrackConditionsPanel'; +import { ViewData } from '@/lib/contracts/view-data/ViewData'; import { Box } from '@/ui/Box'; import { Container } from '@/ui/Container'; import { Grid } from '@/ui/Grid'; @@ -14,7 +15,6 @@ import { GridItem } from '@/ui/GridItem'; import { Skeleton } from '@/ui/Skeleton'; import { Stack } from '@/ui/Stack'; import { Text } from '@/ui/Text'; -import { ViewData } from '@/lib/contracts/view-data/ViewData'; export interface RaceDetailEntryViewModel { id: string; diff --git a/apps/website/templates/RaceResultsTemplate.tsx b/apps/website/templates/RaceResultsTemplate.tsx index 8439c8617..35b1e37bc 100644 --- a/apps/website/templates/RaceResultsTemplate.tsx +++ b/apps/website/templates/RaceResultsTemplate.tsx @@ -1,4 +1,4 @@ -'use client'; + import { RaceDetailsHeader } from '@/components/races/RaceDetailsHeader'; import { RaceResultsTable } from '@/components/races/RaceResultsTable'; diff --git a/apps/website/templates/RaceStewardingTemplate.tsx b/apps/website/templates/RaceStewardingTemplate.tsx index 47ec89837..a8789408c 100644 --- a/apps/website/templates/RaceStewardingTemplate.tsx +++ b/apps/website/templates/RaceStewardingTemplate.tsx @@ -1,4 +1,4 @@ -'use client'; + import { ProtestCard } from '@/components/leagues/ProtestCardWrapper'; import { StewardingTabs } from '@/components/leagues/StewardingTabs'; diff --git a/apps/website/templates/RacesAllTemplate.tsx b/apps/website/templates/RacesAllTemplate.tsx index 2cc2c6f17..68b5dc720 100644 --- a/apps/website/templates/RacesAllTemplate.tsx +++ b/apps/website/templates/RacesAllTemplate.tsx @@ -1,4 +1,4 @@ -'use client'; + import { RaceFilterModal } from '@/components/races/RaceFilterModal'; import { RacePageHeader } from '@/components/races/RacePageHeader'; @@ -6,11 +6,11 @@ import { RaceScheduleTable } from '@/components/races/RaceScheduleTable'; import { RacesAllLayout, RacesAllStats } from '@/components/races/RacesAllLayout'; import { RaceScheduleSection } from '@/components/races/RacesLayout'; import type { SessionStatus } from '@/components/races/SessionStatusBadge'; +import { TemplateProps } from '@/lib/contracts/components/ComponentContracts'; import type { RacesViewData } from '@/lib/view-data/RacesViewData'; +import { Box } from '@/ui/Box'; import { Pagination } from '@/ui/Pagination'; import { Text } from '@/ui/Text'; -import { Box } from '@/ui/Box'; -import { TemplateProps } from '@/lib/contracts/components/ComponentContracts'; export type StatusFilter = 'scheduled' | 'running' | 'completed' | 'cancelled' | 'all'; @@ -44,10 +44,8 @@ export function RacesAllTemplate({ viewData, races, totalFilteredCount, - isLoading, currentPage, totalPages, - itemsPerPage, onPageChange, statusFilter, setStatusFilter, diff --git a/apps/website/templates/RacesIndexTemplate.tsx b/apps/website/templates/RacesIndexTemplate.tsx index a40ccb155..605bc8770 100644 --- a/apps/website/templates/RacesIndexTemplate.tsx +++ b/apps/website/templates/RacesIndexTemplate.tsx @@ -1,18 +1,15 @@ -'use client'; -import React from 'react'; -import { Container } from '@/ui/Container'; -import { Section } from '@/ui/Section'; -import { RacesLiveRail } from '@/components/races/RacesLiveRail'; -import { RacesCommandBar } from '@/components/races/RacesCommandBar'; + import { NextUpRacePanel } from '@/components/races/NextUpRacePanel'; +import { RacesCommandBar } from '@/components/races/RacesCommandBar'; import { RacesDayGroup } from '@/components/races/RacesDayGroup'; import { RacesEmptyState } from '@/components/races/RacesEmptyState'; -import { RaceFilterModal } from '@/components/races/RaceFilterModal'; +import { RacesLiveRail } from '@/components/races/RacesLiveRail'; +import type { RacesViewData, RaceViewData } from '@/lib/view-data/RacesViewData'; import { PageHeader } from '@/ui/PageHeader'; +import { Section } from '@/ui/Section'; import { Stack } from '@/ui/Stack'; import { Flag } from 'lucide-react'; -import type { RacesViewData, RaceViewData } from '@/lib/view-data/RacesViewData'; export interface RacesIndexTemplateProps { viewData: RacesViewData & { diff --git a/apps/website/templates/RacesTemplate.tsx b/apps/website/templates/RacesTemplate.tsx index 5621a1456..aec2b1210 100644 --- a/apps/website/templates/RacesTemplate.tsx +++ b/apps/website/templates/RacesTemplate.tsx @@ -1,4 +1,4 @@ -'use client'; + import { LiveRacesBanner } from '@/components/races/LiveRacesBanner'; import { RaceFilterBar } from '@/components/races/RaceFilterBar'; @@ -12,7 +12,6 @@ import { Container } from '@/ui/Container'; import { Grid } from '@/ui/Grid'; import { GridItem } from '@/ui/GridItem'; import { Stack } from '@/ui/Stack'; -import React from 'react'; export type TimeFilter = 'all' | 'upcoming' | 'live' | 'past'; export type RaceStatusFilter = 'scheduled' | 'running' | 'completed' | 'cancelled' | 'all'; diff --git a/apps/website/templates/RosterAdminTemplate.tsx b/apps/website/templates/RosterAdminTemplate.tsx index 3c05caf7d..5a6e345c2 100644 --- a/apps/website/templates/RosterAdminTemplate.tsx +++ b/apps/website/templates/RosterAdminTemplate.tsx @@ -1,4 +1,4 @@ -'use client'; + import type { MembershipRole } from '@/lib/types/MembershipRole'; import type { LeagueRosterAdminViewData } from '@/lib/view-data/LeagueRosterAdminViewData'; diff --git a/apps/website/templates/RulebookTemplate.tsx b/apps/website/templates/RulebookTemplate.tsx index 68a084baf..1077b2752 100644 --- a/apps/website/templates/RulebookTemplate.tsx +++ b/apps/website/templates/RulebookTemplate.tsx @@ -1,4 +1,4 @@ -'use client'; + import { RulebookTabs, type RulebookSection } from '@/components/leagues/RulebookTabs'; import { PointsTable } from '@/components/races/PointsTable'; diff --git a/apps/website/templates/ServerErrorTemplate.tsx b/apps/website/templates/ServerErrorTemplate.tsx index 1311f7310..482467b88 100644 --- a/apps/website/templates/ServerErrorTemplate.tsx +++ b/apps/website/templates/ServerErrorTemplate.tsx @@ -1,4 +1,4 @@ -'use client'; + import { ErrorDetails } from '@/components/errors/ErrorDetails'; import { RecoveryActions } from '@/components/errors/RecoveryActions'; diff --git a/apps/website/templates/SponsorBillingTemplate.tsx b/apps/website/templates/SponsorBillingTemplate.tsx index dfa6446a9..27aa4d83c 100644 --- a/apps/website/templates/SponsorBillingTemplate.tsx +++ b/apps/website/templates/SponsorBillingTemplate.tsx @@ -1,8 +1,9 @@ -'use client'; + import { BillingSummaryPanel } from '@/components/sponsors/BillingSummaryPanel'; import { SponsorDashboardHeader } from '@/components/sponsors/SponsorDashboardHeader'; import { PayoutItem, SponsorPayoutQueueTable } from '@/components/sponsors/SponsorPayoutQueueTable'; +import { ViewData } from '@/lib/contracts/view-data/ViewData'; import { siteConfig } from '@/lib/siteConfig'; import type { InvoiceDTO, PaymentMethodDTO } from '@/lib/types/tbd/SponsorBillingDTO'; import { Box } from '@/ui/Box'; @@ -14,7 +15,6 @@ import { Icon } from '@/ui/Icon'; import { InfoBanner } from '@/ui/InfoBanner'; import { Stack } from '@/ui/Stack'; import { Text } from '@/ui/Text'; -import { ViewData } from '@/lib/contracts/view-data/ViewData'; import { Building2, CreditCard, diff --git a/apps/website/templates/SponsorDashboardTemplate.tsx b/apps/website/templates/SponsorDashboardTemplate.tsx index 534a2478b..c0c6e499c 100644 --- a/apps/website/templates/SponsorDashboardTemplate.tsx +++ b/apps/website/templates/SponsorDashboardTemplate.tsx @@ -1,4 +1,4 @@ -'use client'; + import { BillingSummaryPanel } from '@/components/sponsors/BillingSummaryPanel'; import { MetricCard } from '@/components/sponsors/MetricCard'; @@ -13,26 +13,26 @@ import { Box } from '@/ui/Box'; import { Button } from '@/ui/Button'; import { Card } from '@/ui/Card'; import { Container } from '@/ui/Container'; +import { Grid } from '@/ui/Grid'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; import { Link } from '@/ui/Link'; -import { Grid } from '@/ui/Grid'; import { Stack } from '@/ui/Stack'; import { Text } from '@/ui/Text'; import { - Bell, - Car, - ChevronRight, - Clock, - DollarSign, - Eye, - Flag, - LucideIcon, - Megaphone, - Plus, - TrendingUp, - Trophy, - Users + Bell, + Car, + ChevronRight, + Clock, + DollarSign, + Eye, + Flag, + LucideIcon, + Megaphone, + Plus, + TrendingUp, + Trophy, + Users } from 'lucide-react'; interface SponsorDashboardTemplateProps { diff --git a/apps/website/templates/SponsorLeagueDetailTemplate.tsx b/apps/website/templates/SponsorLeagueDetailTemplate.tsx index 00890f447..2a76cd5e6 100644 --- a/apps/website/templates/SponsorLeagueDetailTemplate.tsx +++ b/apps/website/templates/SponsorLeagueDetailTemplate.tsx @@ -1,4 +1,4 @@ -'use client'; + import { BillingSummaryPanel } from '@/components/sponsors/BillingSummaryPanel'; import { PricingTableShell, PricingTier } from '@/components/sponsors/PricingTableShell'; diff --git a/apps/website/templates/SponsorLeaguesTemplate.tsx b/apps/website/templates/SponsorLeaguesTemplate.tsx index 8d68f7ed7..3933f4ccb 100644 --- a/apps/website/templates/SponsorLeaguesTemplate.tsx +++ b/apps/website/templates/SponsorLeaguesTemplate.tsx @@ -1,7 +1,8 @@ -'use client'; + import { AvailableLeagueCard } from '@/components/sponsors/AvailableLeagueCard'; import { SponsorDashboardHeader } from '@/components/sponsors/SponsorDashboardHeader'; +import { ViewData } from '@/lib/contracts/view-data/ViewData'; import { routes } from '@/lib/routing/RouteConfig'; import { siteConfig } from '@/lib/siteConfig'; import { Box } from '@/ui/Box'; @@ -17,7 +18,6 @@ import { Link } from '@/ui/Link'; import { Stack } from '@/ui/Stack'; import { Surface } from '@/ui/Surface'; import { Text } from '@/ui/Text'; -import { ViewData } from '@/lib/contracts/view-data/ViewData'; import { Car, Megaphone, diff --git a/apps/website/templates/SponsorshipRequestsTemplate.tsx b/apps/website/templates/SponsorshipRequestsTemplate.tsx index 2e11d4264..9525e8db6 100644 --- a/apps/website/templates/SponsorshipRequestsTemplate.tsx +++ b/apps/website/templates/SponsorshipRequestsTemplate.tsx @@ -1,4 +1,4 @@ -'use client'; + import { SponsorshipRequestsPanel } from '@/components/profile/SponsorshipRequestsPanel'; import type { SponsorshipRequestsViewData } from '@/lib/view-data/SponsorshipRequestsViewData'; diff --git a/apps/website/templates/StewardingTemplate.tsx b/apps/website/templates/StewardingTemplate.tsx index b3e6bfe92..ad72647c0 100644 --- a/apps/website/templates/StewardingTemplate.tsx +++ b/apps/website/templates/StewardingTemplate.tsx @@ -1,4 +1,4 @@ -'use client'; + import { PenaltyHistoryList } from '@/components/leagues/PenaltyHistoryList'; import { QuickPenaltyModal } from '@/components/leagues/QuickPenaltyModal'; diff --git a/apps/website/templates/TeamDetailTemplate.tsx b/apps/website/templates/TeamDetailTemplate.tsx index b9a993221..d90476496 100644 --- a/apps/website/templates/TeamDetailTemplate.tsx +++ b/apps/website/templates/TeamDetailTemplate.tsx @@ -1,21 +1,18 @@ -'use client'; -import React from 'react'; -import { useRouter } from 'next/navigation'; -import { Box } from '@/ui/Box'; -import { Container } from '@/ui/Container'; -import { Heading } from '@/ui/Heading'; -import { Text } from '@/ui/Text'; -import { Stack } from '@/ui/Stack'; -import { Grid } from '@/ui/Grid'; -import { Button } from '@/ui/Button'; -import { Panel } from '@/ui/Panel'; -import { Breadcrumbs } from '@/ui/Breadcrumbs'; -import { TeamDetailsHeader } from '@/components/teams/TeamDetailsHeader'; + +import { TeamAdmin } from '@/components/teams/TeamAdmin'; import { TeamMembersTable } from '@/components/teams/TeamMembersTable'; import { TeamStandingsPanel } from '@/components/teams/TeamStandingsPanel'; -import { TeamAdmin } from '@/components/teams/TeamAdmin'; import type { TeamDetailViewData } from '@/lib/view-data/TeamDetailViewData'; +import { Box } from '@/ui/Box'; +import { Breadcrumbs } from '@/ui/Breadcrumbs'; +import { Button } from '@/ui/Button'; +import { Container } from '@/ui/Container'; +import { Grid } from '@/ui/Grid'; +import { Heading } from '@/ui/Heading'; +import { Panel } from '@/ui/Panel'; +import { Stack } from '@/ui/Stack'; +import { Text } from '@/ui/Text'; type Tab = 'overview' | 'roster' | 'standings' | 'admin'; diff --git a/apps/website/templates/TeamLeaderboardTemplate.tsx b/apps/website/templates/TeamLeaderboardTemplate.tsx index 33b2db381..ca4dd40f6 100644 --- a/apps/website/templates/TeamLeaderboardTemplate.tsx +++ b/apps/website/templates/TeamLeaderboardTemplate.tsx @@ -1,20 +1,17 @@ -'use client'; + import { LeaderboardFiltersBar } from '@/components/leaderboards/LeaderboardFiltersBar'; import type { SkillLevel, SortBy } from '@/lib/view-data/TeamLeaderboardViewData'; import type { TeamSummaryViewModel } from '@/lib/view-models/TeamSummaryViewModel'; import { Button } from '@/ui/Button'; -import { Container } from '@/ui/Container'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; -import { Group } from '@/ui/Group'; -import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/ui/Table'; -import { Text } from '@/ui/Text'; import { Panel } from '@/ui/Panel'; import { Section } from '@/ui/Section'; import { Select } from '@/ui/Select'; +import { Table, TableBody, TableCell, TableHead, TableRow } from '@/ui/Table'; +import { Text } from '@/ui/Text'; import { Award, ChevronLeft, Users } from 'lucide-react'; -import React from 'react'; interface TeamLeaderboardTemplateProps { viewData: { diff --git a/apps/website/templates/TeamRankingsTemplate.tsx b/apps/website/templates/TeamRankingsTemplate.tsx index a2bb30027..8818e660a 100644 --- a/apps/website/templates/TeamRankingsTemplate.tsx +++ b/apps/website/templates/TeamRankingsTemplate.tsx @@ -1,14 +1,14 @@ -'use client'; -import React from 'react'; -import { Users, ChevronLeft } from 'lucide-react'; -import { Container } from '@/ui/Container'; -import { PageHeader } from '@/ui/PageHeader'; -import { TeamLeaderboardTable } from '@/components/leaderboards/TeamLeaderboardTable'; -import { Button } from '@/ui/Button'; -import { Icon } from '@/ui/Icon'; + import { LeaderboardFiltersBar } from '@/components/leaderboards/LeaderboardFiltersBar'; +import { TeamLeaderboardTable } from '@/components/leaderboards/TeamLeaderboardTable'; import type { TeamRankingsViewData } from '@/lib/view-data/TeamRankingsViewData'; +import { Button } from '@/ui/Button'; +import { Container } from '@/ui/Container'; +import { Icon } from '@/ui/Icon'; +import { PageHeader } from '@/ui/PageHeader'; +import { ChevronLeft, Users } from 'lucide-react'; +import React from 'react'; interface TeamRankingsTemplateProps { viewData: TeamRankingsViewData; diff --git a/apps/website/templates/TeamsTemplate.tsx b/apps/website/templates/TeamsTemplate.tsx index 8e814615b..37fce58b5 100644 --- a/apps/website/templates/TeamsTemplate.tsx +++ b/apps/website/templates/TeamsTemplate.tsx @@ -1,20 +1,16 @@ -'use client'; -import React, { useMemo } from 'react'; -import { Users } from 'lucide-react'; -import { TemplateProps } from '@/lib/contracts/components/ComponentContracts'; -import { TeamsViewData, TeamSummaryData } from '@/lib/view-data/TeamsViewData'; -import { TeamsDirectoryHeader } from '@/components/teams/TeamsDirectoryHeader'; -import { TeamGrid } from '@/components/teams/TeamGrid'; + +import { Carousel } from '@/components/shared/Carousel'; import { TeamCard } from '@/components/teams/TeamCard'; import { TeamSearchBar } from '@/components/teams/TeamSearchBar'; -import { PageHeader } from '@/ui/PageHeader'; +import { TeamsViewData } from '@/lib/view-data/TeamsViewData'; import { Button } from '@/ui/Button'; import { EmptyState } from '@/ui/EmptyState'; -import { Container } from '@/ui/Container'; +import { PageHeader } from '@/ui/PageHeader'; import { Section } from '@/ui/Section'; import { Stack } from '@/ui/Stack'; -import { Carousel } from '@/components/shared/Carousel'; +import { Users } from 'lucide-react'; +import { useMemo } from 'react'; interface TeamsTemplateProps extends TemplateProps { searchQuery: string; diff --git a/apps/website/templates/actions/ActionsTemplate.tsx b/apps/website/templates/actions/ActionsTemplate.tsx index a0af0013f..00b9ccfbf 100644 --- a/apps/website/templates/actions/ActionsTemplate.tsx +++ b/apps/website/templates/actions/ActionsTemplate.tsx @@ -1,4 +1,4 @@ -'use client'; + import { ActionFiltersBar } from '@/components/actions/ActionFiltersBar'; import { ActionList } from '@/components/actions/ActionList'; diff --git a/apps/website/templates/auth/ForgotPasswordTemplate.tsx b/apps/website/templates/auth/ForgotPasswordTemplate.tsx index c74ef9794..2e420f79e 100644 --- a/apps/website/templates/auth/ForgotPasswordTemplate.tsx +++ b/apps/website/templates/auth/ForgotPasswordTemplate.tsx @@ -1,4 +1,4 @@ -'use client'; + import { AuthCard } from '@/components/auth/AuthCard'; import { AuthFooterLinks } from '@/components/auth/AuthFooterLinks'; diff --git a/apps/website/templates/auth/LoginLoadingTemplate.tsx b/apps/website/templates/auth/LoginLoadingTemplate.tsx index cfa1fa612..31fcdf098 100644 --- a/apps/website/templates/auth/LoginLoadingTemplate.tsx +++ b/apps/website/templates/auth/LoginLoadingTemplate.tsx @@ -1,9 +1,9 @@ -'use client'; + import { AuthLoading } from '@/components/auth/AuthLoading'; import { TemplateProps } from '@/lib/contracts/components/ComponentContracts'; import { ViewData } from '@/lib/contracts/view-data/ViewData'; -export function LoginLoadingTemplate({ viewData }: TemplateProps) { +export function LoginLoadingTemplate({ }: TemplateProps) { return ; } diff --git a/apps/website/templates/auth/LoginTemplate.tsx b/apps/website/templates/auth/LoginTemplate.tsx index 156a3d283..72a0fb2d2 100644 --- a/apps/website/templates/auth/LoginTemplate.tsx +++ b/apps/website/templates/auth/LoginTemplate.tsx @@ -1,4 +1,4 @@ -'use client'; + import { AuthCard } from '@/components/auth/AuthCard'; import { AuthFooterLinks } from '@/components/auth/AuthFooterLinks'; diff --git a/apps/website/templates/auth/ResetPasswordTemplate.tsx b/apps/website/templates/auth/ResetPasswordTemplate.tsx index 9762a0b34..ade6f5b8e 100644 --- a/apps/website/templates/auth/ResetPasswordTemplate.tsx +++ b/apps/website/templates/auth/ResetPasswordTemplate.tsx @@ -1,4 +1,4 @@ -'use client'; + import { AuthCard } from '@/components/auth/AuthCard'; import { AuthFooterLinks } from '@/components/auth/AuthFooterLinks'; diff --git a/apps/website/templates/auth/SignupTemplate.tsx b/apps/website/templates/auth/SignupTemplate.tsx index 194a8a5d9..5af0a5891 100644 --- a/apps/website/templates/auth/SignupTemplate.tsx +++ b/apps/website/templates/auth/SignupTemplate.tsx @@ -1,4 +1,4 @@ -'use client'; + import { AuthCard } from '@/components/auth/AuthCard'; import { AuthFooterLinks } from '@/components/auth/AuthFooterLinks'; diff --git a/apps/website/templates/layout/GlobalSidebarTemplate.tsx b/apps/website/templates/layout/GlobalSidebarTemplate.tsx index 3e33469de..20831198a 100644 --- a/apps/website/templates/layout/GlobalSidebarTemplate.tsx +++ b/apps/website/templates/layout/GlobalSidebarTemplate.tsx @@ -1,9 +1,10 @@ -'use client'; + import { DashboardRail } from '@/components/dashboard/DashboardRail'; import { AuthedNav } from '@/components/layout/AuthedNav'; import { PublicNav } from '@/components/layout/PublicNav'; import { useCurrentSession } from '@/hooks/auth/useCurrentSession'; +import { ViewData } from '@/lib/contracts/view-data/ViewData'; import { Box } from '@/ui/Box'; import { Surface } from '@/ui/Surface'; import { Text } from '@/ui/Text'; diff --git a/apps/website/templates/layout/RootAppShellTemplate.tsx b/apps/website/templates/layout/RootAppShellTemplate.tsx index f6b322a0e..49507b4df 100644 --- a/apps/website/templates/layout/RootAppShellTemplate.tsx +++ b/apps/website/templates/layout/RootAppShellTemplate.tsx @@ -1,4 +1,4 @@ -'use client'; + import { AppFooter } from '@/components/layout/AppFooter'; import { AppHeader } from '@/components/layout/AppHeader'; diff --git a/apps/website/templates/onboarding/OnboardingTemplate.tsx b/apps/website/templates/onboarding/OnboardingTemplate.tsx index cead68d16..d80de0fd0 100644 --- a/apps/website/templates/onboarding/OnboardingTemplate.tsx +++ b/apps/website/templates/onboarding/OnboardingTemplate.tsx @@ -1,4 +1,4 @@ -'use client'; + import { AvatarInfo, AvatarStep } from '@/components/onboarding/AvatarStep'; import { OnboardingError } from '@/components/onboarding/OnboardingError'; @@ -8,11 +8,11 @@ import { OnboardingShell } from '@/components/onboarding/OnboardingShell'; import { OnboardingStepPanel } from '@/components/onboarding/OnboardingStepPanel'; import { OnboardingStepper } from '@/components/onboarding/OnboardingStepper'; import { PersonalInfo, PersonalInfoStep } from '@/components/onboarding/PersonalInfoStep'; +import { ViewData } from '@/lib/contracts/view-data/ViewData'; import { Box } from '@/ui/Box'; import { Stack } from '@/ui/Stack'; import { Text } from '@/ui/Text'; import { FormEvent } from 'react'; -import { ViewData } from '@/lib/contracts/view-data/ViewData'; type OnboardingStep = 1 | 2; diff --git a/apps/website/templates/shared/StatusTemplates.tsx b/apps/website/templates/shared/StatusTemplates.tsx index 10d63f3fa..dbbb6de30 100644 --- a/apps/website/templates/shared/StatusTemplates.tsx +++ b/apps/website/templates/shared/StatusTemplates.tsx @@ -1,10 +1,10 @@ -'use client'; + +import { TemplateProps } from '@/lib/contracts/components/ComponentContracts'; +import { ViewData } from '@/lib/contracts/view-data/ViewData'; import { Container } from '@/ui/Container'; import { Stack } from '@/ui/Stack'; import { Text } from '@/ui/Text'; -import { TemplateProps } from '@/lib/contracts/components/ComponentContracts'; -import { ViewData } from '@/lib/contracts/view-data/ViewData'; interface ErrorTemplateProps extends TemplateProps { message?: string;