46 lines
1.4 KiB
TypeScript
46 lines
1.4 KiB
TypeScript
import type { Metadata } from 'next';
|
|
import RacePageClient from '@/components/pages/RacePageClient';
|
|
import { getMod, getRace, getRaceUnits, getRaceBuildings } from '@/lib/api-server';
|
|
|
|
export const dynamic = 'force-dynamic';
|
|
|
|
interface Props {
|
|
params: { modId: string; raceId: string };
|
|
}
|
|
|
|
export async function generateMetadata({ params }: Props): Promise<Metadata> {
|
|
const [mod, race] = await Promise.all([getMod(params.modId), getRace(params.raceId)]);
|
|
if (!mod || !race) {
|
|
return { title: 'Race' };
|
|
}
|
|
const title = `${race.name} — ${mod.name}`;
|
|
const description = `${race.name} race in ${mod.name} mod. Units, buildings and stats.`;
|
|
return {
|
|
title,
|
|
description,
|
|
alternates: {
|
|
canonical: `/mod/${params.modId}/race/${params.raceId}`,
|
|
},
|
|
openGraph: {
|
|
title,
|
|
description,
|
|
},
|
|
};
|
|
}
|
|
|
|
export default async function RacePage({ params }: Props) {
|
|
const [mod, race, raceUnits, raceBuildings] = await Promise.all([
|
|
getMod(params.modId),
|
|
getRace(params.raceId),
|
|
getRaceUnits(params.modId, params.raceId),
|
|
getRaceBuildings(params.modId, params.raceId),
|
|
]);
|
|
return (
|
|
<RacePageClient
|
|
initialMod={mod}
|
|
initialRace={race}
|
|
raceUnits={raceUnits}
|
|
raceBuildings={raceBuildings}
|
|
/>
|
|
);
|
|
} |