diff --git a/apps/web/src/app/status-page/[domain]/events/page.tsx b/apps/web/src/app/status-page/[domain]/events/page.tsx index a266e30e5..2467fbede 100644 --- a/apps/web/src/app/status-page/[domain]/events/page.tsx +++ b/apps/web/src/app/status-page/[domain]/events/page.tsx @@ -5,6 +5,7 @@ import { api } from "@/trpc/server"; import { notFound } from "next/navigation"; import { searchParamsCache } from "./search-params"; import { formatter } from "./utils"; +import type { Metadata } from "next"; export const metadata: Metadata = { title: "Events", diff --git a/apps/web/src/app/status-page/[domain]/events/report/[id]/page.tsx b/apps/web/src/app/status-page/[domain]/events/report/[id]/page.tsx index 7e93306b1..4ab616014 100644 --- a/apps/web/src/app/status-page/[domain]/events/report/[id]/page.tsx +++ b/apps/web/src/app/status-page/[domain]/events/report/[id]/page.tsx @@ -6,10 +6,21 @@ import { StatusReportUpdates } from "@/components/status-page/status-report"; import { api } from "@/trpc/server"; import { Badge } from "@openstatus/ui/src/components/badge"; import { CopyLinkButton } from "./_components/copy-link-button"; +import { Metadata } from "next"; -export const metadata: Metadata = { - title: "Report", -}; +export async function generateMetadata(props: { + params: Promise<{ domain: string; id: string }>; +}): Promise { + const { domain, id } = await props.params; + const report = await api.statusReport.getPublicStatusReportById.query({ + slug: domain, + id: Number(id), + }); + + if (!report) return notFound(); + + return { title: report.title }; +} export default async function IncidentPage(props: { params: Promise<{ domain: string; id: string }>; @@ -23,7 +34,7 @@ export default async function IncidentPage(props: { if (!report) return notFound(); const affectedMonitors = report.monitorsToStatusReports.map( - ({ monitor }) => monitor, + ({ monitor }) => monitor ); const firstUpdate = diff --git a/apps/web/src/app/status-page/[domain]/layout.tsx b/apps/web/src/app/status-page/[domain]/layout.tsx index 1ce62fc0a..928b01017 100644 --- a/apps/web/src/app/status-page/[domain]/layout.tsx +++ b/apps/web/src/app/status-page/[domain]/layout.tsx @@ -78,10 +78,12 @@ export async function generateMetadata(props: Props): Promise { const params = await props.params; const page = await api.page.getPageBySlug.query({ slug: params.domain }); + if (!page) return notFound(); + return { ...defaultMetadata, title: { - template: `%s | ${page?.title}`, + template: `%s | ${page.title}`, default: page?.title, }, description: page?.description, diff --git a/apps/web/src/app/status-page/[domain]/monitors/[id]/page.tsx b/apps/web/src/app/status-page/[domain]/monitors/[id]/page.tsx index 16553587a..d60d44e40 100644 --- a/apps/web/src/app/status-page/[domain]/monitors/[id]/page.tsx +++ b/apps/web/src/app/status-page/[domain]/monitors/[id]/page.tsx @@ -24,12 +24,23 @@ import { periods, searchParamsCache, } from "./search-params"; +import type { Metadata } from "next"; export const revalidate = 120; -export const metadata: Metadata = { - title: "Monitor", -}; +export async function generateMetadata(props: { + params: Promise<{ domain: string; id: string }>; +}): Promise { + const { domain, id } = await props.params; + const monitor = await api.monitor.getPublicMonitorById.query({ + id: Number(id), + slug: domain, + }); + + if (!monitor) return notFound(); + + return { title: monitor.name }; +} export default async function Page(props: { params: Promise<{ domain: string; id: string }>; diff --git a/apps/web/src/app/status-page/[domain]/monitors/page.tsx b/apps/web/src/app/status-page/[domain]/monitors/page.tsx index a5694d47b..11715a126 100644 --- a/apps/web/src/app/status-page/[domain]/monitors/page.tsx +++ b/apps/web/src/app/status-page/[domain]/monitors/page.tsx @@ -11,6 +11,7 @@ import { groupDataByTimestamp } from "@/components/monitor-charts/utils"; import { prepareMetricByIntervalByPeriod } from "@/lib/tb"; import { api } from "@/trpc/server"; import { searchParamsCache } from "./search-params"; +import type { Metadata } from "next"; // Add loading page @@ -42,14 +43,14 @@ export default async function Page(props: { const type = monitor.jobType as "http" | "tcp"; const data = await prepareMetricByIntervalByPeriod( period, - type, + type ).getData({ monitorId: String(monitor.id), interval: 60, }); return { monitor, data }; - }), + }) ) : undefined;