49 lines
1.6 KiB
TypeScript
49 lines
1.6 KiB
TypeScript
import type { Metadata } from 'next';
|
|
import BuildingPageClient from '@/components/pages/BuildingPageClient';
|
|
import { getBuilding, getMod } from '@/lib/api-server';
|
|
import { IBuilding } from '@/src/types/IBuilding';
|
|
import { IMod } from '@/src/types/Imod';
|
|
|
|
export const dynamic = 'force-dynamic';
|
|
|
|
interface Props {
|
|
params: { modId: string; raceId: string; buildingId: string };
|
|
}
|
|
|
|
export async function generateMetadata({ params }: Props): Promise<Metadata> {
|
|
const [mod, building] = await Promise.all([getMod(params.modId), getBuilding(params.buildingId)]);
|
|
if (!mod || !building) {
|
|
return { title: 'Building' };
|
|
}
|
|
let buildingName = building.name;
|
|
if (!buildingName) {
|
|
buildingName = building.filename.replaceAll('_', ' ').replace('.rgd', '');
|
|
}
|
|
const title = `${buildingName} — ${mod.name}`;
|
|
const description = `${buildingName} building in ${mod.name} mod. Stats, production, researches.`;
|
|
return {
|
|
title,
|
|
description,
|
|
alternates: {
|
|
canonical: `/mod/${params.modId}/race/${params.raceId}/building/${params.buildingId}`,
|
|
},
|
|
openGraph: {
|
|
title,
|
|
description,
|
|
},
|
|
};
|
|
}
|
|
|
|
export default async function BuildingPage({ params }: Props) {
|
|
const [mod, building] = await Promise.all([
|
|
getMod(params.modId),
|
|
getBuilding(params.buildingId),
|
|
]);
|
|
return (
|
|
<BuildingPageClient
|
|
key={params.buildingId}
|
|
initialBuilding={building as IBuilding | null}
|
|
initialMod={mod as IMod | null}
|
|
/>
|
|
);
|
|
} |