Files
blitzkit/src/app/tools/tankopedia/[id]/layout.tsx
T
2024-07-30 13:24:55 -05:00

51 lines
2.0 KiB
TypeScript

import { ReactNode } from 'react';
import { modelDefinitions } from '../../../../core/blitzkit/modelDefinitions';
import { provisionDefinitions } from '../../../../core/blitzkit/provisionDefinitions';
import { tankDefinitions } from '../../../../core/blitzkit/tankDefinitions';
import { TIER_ROMAN_NUMERALS } from '../../../../core/blitzkit/tankDefinitions/constants';
import { tankIcon } from '../../../../core/blitzkit/tankIcon';
import strings from '../../../../lang/en-US.json';
import * as Duel from '../../../../stores/duel';
import * as TankFilters from '../../../../stores/tankFilters';
import * as TankopediaEphemeral from '../../../../stores/tankopediaEphemeral';
export default async function Layout({
children,
params,
}: {
children: ReactNode;
params: { id: string };
}) {
const id = Number(params.id);
const awaitedTankDefinitions = await tankDefinitions;
const awaitedModelDefinitions = await modelDefinitions;
const tankModelDefinition = awaitedModelDefinitions[id];
const awaitedProvisionDefinitions = await provisionDefinitions;
const tank = awaitedTankDefinitions[id];
const title = `${tank.name} - Tier ${TIER_ROMAN_NUMERALS[tank.tier]} ${
(strings.common.nations_adjectives as Record<string, string>)[tank.nation]
} ${strings.common.tank_class_short[tank.class]}`;
const description = `Statistics, armor, and equipment for ${tank.name}`;
return (
<TankopediaEphemeral.Provider data={tankModelDefinition}>
<TankFilters.Provider>
<Duel.Provider
data={{
tank: awaitedTankDefinitions[id],
provisionDefinitions: awaitedProvisionDefinitions,
}}
>
<title>{title}</title>
<meta name="description" content={description} />
<meta property="og:title" content={title} />
<meta property="og:image" content={tankIcon(id)} />
<meta property="og:description" content={description} />
{children}
</Duel.Provider>
</TankFilters.Provider>
</TankopediaEphemeral.Provider>
);
}