61 lines
1.6 KiB
TypeScript
61 lines
1.6 KiB
TypeScript
'use client';
|
|
|
|
import { useRouter } from 'next/navigation';
|
|
import { LeaderboardsTemplate } from '@/templates/LeaderboardsTemplate';
|
|
import type { LeaderboardsViewData } from '@/lib/view-data/LeaderboardsViewData';
|
|
import { routes } from '@/lib/routing/RouteConfig';
|
|
|
|
export function LeaderboardsPageWrapper({ data }: { data: LeaderboardsViewData | null }) {
|
|
const router = useRouter();
|
|
|
|
if (!data || (!data.drivers && !data.teams)) {
|
|
return null;
|
|
}
|
|
|
|
const handleDriverClick = (driverId: string) => {
|
|
router.push(routes.driver.detail(driverId));
|
|
};
|
|
|
|
const handleTeamClick = (teamId: string) => {
|
|
router.push(routes.team.detail(teamId));
|
|
};
|
|
|
|
const handleNavigateToDrivers = () => {
|
|
router.push(routes.leaderboards.drivers);
|
|
};
|
|
|
|
const handleNavigateToTeams = () => {
|
|
router.push(routes.team.leaderboard);
|
|
};
|
|
|
|
// Transform ViewData to template props (simple field mapping only)
|
|
const templateData = {
|
|
drivers: data.drivers.map(d => ({
|
|
id: d.id,
|
|
name: d.name,
|
|
rating: d.rating,
|
|
skillLevel: d.skillLevel,
|
|
nationality: d.nationality,
|
|
wins: d.wins,
|
|
rank: d.rank,
|
|
avatarUrl: d.avatarUrl,
|
|
position: d.position,
|
|
})),
|
|
teams: data.teams.map(t => ({
|
|
id: t.id,
|
|
name: t.name,
|
|
tag: t.tag,
|
|
memberCount: t.memberCount,
|
|
category: t.category,
|
|
totalWins: t.totalWins,
|
|
logoUrl: t.logoUrl,
|
|
position: t.position,
|
|
})),
|
|
onDriverClick: handleDriverClick,
|
|
onTeamClick: handleTeamClick,
|
|
onNavigateToDrivers: handleNavigateToDrivers,
|
|
onNavigateToTeams: handleNavigateToTeams,
|
|
};
|
|
|
|
return <LeaderboardsTemplate {...templateData} />;
|
|
} |