website cleanup

This commit is contained in:
2025-12-24 21:44:58 +01:00
parent 9b683a59d3
commit d78854a4c6
277 changed files with 6141 additions and 2693 deletions

View File

@@ -1,8 +1,22 @@
'use client';
import type { LeagueScoringConfigDTO } from '@core/racing/application/dto/LeagueScoringConfigDTO';
import type { LeagueScoringConfigDTO } from '@/lib/types/generated/LeagueScoringConfigDTO';
import { Trophy, Clock, Target, Zap, Info } from 'lucide-react';
type LeagueScoringConfigUi = LeagueScoringConfigDTO & {
scoringPresetName?: string;
dropPolicySummary?: string;
championships?: Array<{
id: string;
name: string;
type: 'driver' | 'team' | 'nations' | 'trophy' | string;
sessionTypes: string[];
pointsPreview: Array<{ sessionType: string; position: number; points: number }>;
bonusSummary: string[];
dropPolicyDescription?: string;
}>;
};
interface LeagueScoringTabProps {
scoringConfig: LeagueScoringConfigDTO | null;
practiceMinutes?: number;
@@ -32,9 +46,12 @@ export default function LeagueScoringTab({
);
}
const ui = scoringConfig as unknown as LeagueScoringConfigUi;
const championships = ui.championships ?? [];
const primaryChampionship =
scoringConfig.championships.find((c) => c.type === 'driver') ??
scoringConfig.championships[0];
championships.find((c) => c.type === 'driver') ??
championships[0];
const resolvedPractice = practiceMinutes ?? 20;
const resolvedQualifying = qualifyingMinutes ?? 30;
@@ -54,10 +71,10 @@ export default function LeagueScoringTab({
</h2>
<p className="text-sm text-gray-400">
{scoringConfig.gameName}{' '}
{scoringConfig.scoringPresetName
? `${scoringConfig.scoringPresetName}`
{ui.scoringPresetName
? `${ui.scoringPresetName}`
: '• Custom scoring'}{' '}
{scoringConfig.dropPolicySummary}
{ui.dropPolicySummary ? `${ui.dropPolicySummary}` : ''}
</p>
</div>
</div>
@@ -71,7 +88,7 @@ export default function LeagueScoringTab({
</h3>
</div>
<div className="flex flex-wrap gap-2 text-xs">
{primaryChampionship.sessionTypes.map((session) => (
{primaryChampionship.sessionTypes.map((session: string) => (
<span
key={session}
className="px-3 py-1 rounded-full bg-primary-blue/10 text-primary-blue border border-primary-blue/20 font-medium"
@@ -106,7 +123,7 @@ export default function LeagueScoringTab({
)}
</div>
{scoringConfig.championships.map((championship) => (
{championships.map((championship) => (
<div
key={championship.id}
className="border border-charcoal-outline rounded-lg bg-iron-gray/40 p-4 space-y-4"
@@ -128,7 +145,7 @@ export default function LeagueScoringTab({
</div>
{championship.sessionTypes.length > 0 && (
<div className="flex flex-wrap gap-1 justify-end">
{championship.sessionTypes.map((session) => (
{championship.sessionTypes.map((session: string) => (
<span
key={session}
className="px-2 py-0.5 rounded-full bg-charcoal-outline/60 text-xs text-gray-200"
@@ -161,7 +178,7 @@ export default function LeagueScoringTab({
</tr>
</thead>
<tbody>
{championship.pointsPreview.map((row, index) => (
{championship.pointsPreview.map((row, index: number) => (
<tr
key={`${row.sessionType}-${row.position}-${index}`}
className="border-b border-charcoal-outline/30"
@@ -192,7 +209,7 @@ export default function LeagueScoringTab({
</h4>
</div>
<ul className="list-disc list-inside text-xs text-gray-300 space-y-1">
{championship.bonusSummary.map((item, index) => (
{championship.bonusSummary.map((item: string, index: number) => (
<li key={index}>{item}</li>
))}
</ul>
@@ -207,11 +224,11 @@ export default function LeagueScoringTab({
</h4>
</div>
<p className="text-xs text-gray-300">
{championship.dropPolicyDescription}
{championship.dropPolicyDescription ?? ''}
</p>
</div>
</div>
))}
</div>
);
}
}