83 lines
2.5 KiB
TypeScript
83 lines
2.5 KiB
TypeScript
import { getProjectBySlug } from "@/app/actions";
|
||
import WorkDetailClient from "@/components/WorkDetailClient";
|
||
import { notFound } from "next/navigation";
|
||
import { Metadata } from "next";
|
||
|
||
export async function generateMetadata({ params }: { params: Promise<{ slug: string }> }): Promise<Metadata> {
|
||
const { slug } = await params;
|
||
const data = await getProjectBySlug(slug);
|
||
if (!data) return {};
|
||
|
||
const { project } = data;
|
||
return {
|
||
title: project.title,
|
||
description: project.subtitle,
|
||
openGraph: {
|
||
title: `${project.title} | Muğla Dijital`,
|
||
description: project.subtitle,
|
||
images: [project.hero_image],
|
||
},
|
||
};
|
||
}
|
||
|
||
export default async function ProjectDetailPage({ params }: { params: Promise<{ slug: string }> }) {
|
||
const { slug } = await params;
|
||
const data = await getProjectBySlug(slug);
|
||
if (!data) notFound();
|
||
|
||
const breadcrumbLd = {
|
||
"@context": "https://schema.org",
|
||
"@type": "BreadcrumbList",
|
||
"itemListElement": [
|
||
{
|
||
"@type": "ListItem",
|
||
"position": 1,
|
||
"name": "Ana Sayfa",
|
||
"item": "https://mugladijitalmedya.com"
|
||
},
|
||
{
|
||
"@type": "ListItem",
|
||
"position": 2,
|
||
"name": "Çalışmalarımız",
|
||
"item": "https://mugladijitalmedya.com/works"
|
||
},
|
||
{
|
||
"@type": "ListItem",
|
||
"position": 3,
|
||
"name": data.project.title,
|
||
"item": `https://mugladijitalmedya.com/works/${data.project.slug}`
|
||
}
|
||
]
|
||
};
|
||
|
||
const creativeWorkLd = {
|
||
"@context": "https://schema.org",
|
||
"@type": "CreativeWork",
|
||
"name": data.project.title,
|
||
"description": data.project.subtitle,
|
||
"image": data.project.hero_image,
|
||
"author": {
|
||
"@type": "Organization",
|
||
"name": "Muğla Dijital"
|
||
},
|
||
"publisher": {
|
||
"@type": "Organization",
|
||
"name": "Muğla Dijital"
|
||
}
|
||
};
|
||
|
||
return (
|
||
<>
|
||
<script
|
||
type="application/ld+json"
|
||
dangerouslySetInnerHTML={{ __html: JSON.stringify(breadcrumbLd) }}
|
||
/>
|
||
<script
|
||
type="application/ld+json"
|
||
dangerouslySetInnerHTML={{ __html: JSON.stringify(creativeWorkLd) }}
|
||
/>
|
||
<WorkDetailClient project={data.project} nextProject={data.nextProject} />
|
||
</>
|
||
);
|
||
}
|