website refactor

This commit is contained in:
2026-01-16 01:00:03 +01:00
parent ce7be39155
commit a98e3e3166
286 changed files with 5522 additions and 5261 deletions

View File

@@ -3,15 +3,18 @@
import React, { useState, useMemo } from 'react';
import { SponsorLeaguesTemplate, type SortOption, type TierFilter, type AvailabilityFilter } from '@/templates/SponsorLeaguesTemplate';
export default function SponsorLeaguesPageClient({ data }: { data: any }) {
export default function SponsorLeaguesPageClient({ data }: { data: unknown }) {
const [searchQuery, setSearchQuery] = useState('');
const [tierFilter, setTierFilter] = useState<TierFilter>('all');
const [availabilityFilter, setAvailabilityFilter] = useState<AvailabilityFilter>('all');
const [sortBy, setSortBy] = useState<SortOption>('rating');
const [tierFilter] = useState<TierFilter>('all');
const [availabilityFilter] = useState<AvailabilityFilter>('all');
const [sortBy] = useState<SortOption>('rating');
const filteredLeagues = useMemo(() => {
if (!data?.leagues) return [];
return data.leagues
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const d = data as any;
if (!d?.leagues) return [];
return d.leagues
// eslint-disable-next-line @typescript-eslint/no-explicit-any
.filter((league: any) => {
if (searchQuery && !league.name.toLowerCase().includes(searchQuery.toLowerCase())) {
return false;
@@ -27,6 +30,7 @@ export default function SponsorLeaguesPageClient({ data }: { data: any }) {
}
return true;
})
// eslint-disable-next-line @typescript-eslint/no-explicit-any
.sort((a: any, b: any) => {
switch (sortBy) {
case 'rating': return b.rating - a.rating;
@@ -36,20 +40,15 @@ export default function SponsorLeaguesPageClient({ data }: { data: any }) {
default: return 0;
}
});
}, [data?.leagues, searchQuery, tierFilter, availabilityFilter, sortBy]);
}, [data, searchQuery, tierFilter, availabilityFilter, sortBy]);
return (
<SponsorLeaguesTemplate
viewData={data}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
viewData={data as any}
filteredLeagues={filteredLeagues}
searchQuery={searchQuery}
setSearchQuery={setSearchQuery}
tierFilter={tierFilter}
setTierFilter={setTierFilter}
availabilityFilter={availabilityFilter}
setAvailabilityFilter={setAvailabilityFilter}
sortBy={sortBy}
setSortBy={setSortBy}
/>
);
}

View File

@@ -29,10 +29,14 @@ export default async function Page() {
// Calculate summary stats (business logic moved from view model)
const stats = {
total: leaguesData.length,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
mainAvailable: leaguesData.filter((l: any) => l.mainSponsorSlot.available).length,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
secondaryAvailable: leaguesData.reduce((sum: number, l: any) => sum + l.secondarySlots.available, 0),
// eslint-disable-next-line @typescript-eslint/no-explicit-any
totalDrivers: leaguesData.reduce((sum: number, l: any) => sum + l.drivers, 0),
avgCpm: Math.round(
// eslint-disable-next-line @typescript-eslint/no-explicit-any
leaguesData.reduce((sum: number, l: any) => sum + l.cpm, 0) / leaguesData.length
),
};