Decorative images on the marketing pages stay quiet, and every dialog close button is named Close. Co-authored-by: Cursor <cursoragent@cursor.com>
37 lines
1.2 KiB
TypeScript
37 lines
1.2 KiB
TypeScript
import type { Metadata } from "next";
|
|
import type { ReactNode } from "react";
|
|
import messages from "../../../../../messages/en/index";
|
|
import { routeMetadata } from "../../../../../lib/siteMetadata";
|
|
import { getRuleTemplateBySlug } from "../../../../../lib/server/ruleTemplates";
|
|
import { templateReviewDocument } from "../../../../../lib/templates/governanceTemplateCatalog";
|
|
|
|
type LayoutProps = {
|
|
children: ReactNode;
|
|
params: Promise<{ slug: string }>;
|
|
};
|
|
|
|
export async function generateMetadata({
|
|
params,
|
|
}: LayoutProps): Promise<Metadata> {
|
|
const { slug: raw } = await params;
|
|
const slug = decodeURIComponent(raw);
|
|
const row = await getRuleTemplateBySlug(slug);
|
|
const document = templateReviewDocument(slug, row);
|
|
|
|
const title = document?.title ?? messages.metadata.create.title;
|
|
const description =
|
|
document?.description || messages.metadata.create.description;
|
|
return routeMetadata(`/create/review-template/${encodeURIComponent(slug)}`, {
|
|
title: {
|
|
absolute: messages.metadata.titleTemplate.replace("%s", title),
|
|
},
|
|
description,
|
|
openGraph: { title, description },
|
|
twitter: { title, description },
|
|
});
|
|
}
|
|
|
|
export default function TemplateReviewLayout({ children }: LayoutProps) {
|
|
return children;
|
|
}
|