website refactor
This commit is contained in:
@@ -2,6 +2,8 @@ import { notFound } from 'next/navigation';
|
||||
import { PageWrapper } from '@/components/shared/state/PageWrapper';
|
||||
import { RaceDetailPageQuery } from '@/lib/page-queries/races/RaceDetailPageQuery';
|
||||
import { RaceDetailPageClient } from '@/client-wrapper/RaceDetailPageClient';
|
||||
import { Metadata } from 'next';
|
||||
import { MetadataHelper } from '@/lib/seo/MetadataHelper';
|
||||
|
||||
interface RaceDetailPageProps {
|
||||
params: Promise<{
|
||||
@@ -9,6 +11,30 @@ interface RaceDetailPageProps {
|
||||
}>;
|
||||
}
|
||||
|
||||
export async function generateMetadata({ params }: RaceDetailPageProps): Promise<Metadata> {
|
||||
const { id: raceId } = await params;
|
||||
const result = await RaceDetailPageQuery.execute({ raceId, driverId: '' });
|
||||
|
||||
if (result.isErr()) {
|
||||
return MetadataHelper.generate({
|
||||
title: 'Race Not Found',
|
||||
description: 'The requested race details could not be found on GridPilot.',
|
||||
path: `/races/${raceId}`,
|
||||
});
|
||||
}
|
||||
|
||||
const viewData = result.unwrap();
|
||||
const race = viewData.race;
|
||||
const leagueName = viewData.league?.name;
|
||||
const title = leagueName ? `${race.track} - ${leagueName}` : `${race.track} - ${race.car}`;
|
||||
|
||||
return MetadataHelper.generate({
|
||||
title: `${title} | Race Results`,
|
||||
description: `Detailed race results, standings, and session reports for the ${race.car} race at ${race.track}${leagueName ? ` in ${leagueName}` : ''} on GridPilot. Professional iRacing event coverage with obsessive detail.`,
|
||||
path: `/races/${raceId}`,
|
||||
});
|
||||
}
|
||||
|
||||
export default async function RaceDetailPage({ params }: RaceDetailPageProps) {
|
||||
const { id: raceId } = await params;
|
||||
|
||||
|
||||
@@ -1,6 +1,14 @@
|
||||
import { notFound } from 'next/navigation';
|
||||
import { RacesPageQuery } from '@/lib/page-queries/races/RacesPageQuery';
|
||||
import { RacesPageClient } from '@/client-wrapper/RacesPageClient';
|
||||
import { Metadata } from 'next';
|
||||
import { MetadataHelper } from '@/lib/seo/MetadataHelper';
|
||||
|
||||
export const metadata: Metadata = MetadataHelper.generate({
|
||||
title: 'Upcoming & Recent Races',
|
||||
description: 'Stay updated with the latest sim racing action on GridPilot. View upcoming events, live race results, and detailed session reports from professional iRacing leagues.',
|
||||
path: '/races',
|
||||
});
|
||||
|
||||
export default async function Page() {
|
||||
const query = new RacesPageQuery();
|
||||
|
||||
Reference in New Issue
Block a user