74 lines
2.5 KiB
TypeScript
74 lines
2.5 KiB
TypeScript
import { Metadata } from 'next';
|
|
import { notFound } from 'next/navigation';
|
|
import { getProductBySlug, getProducts } from '@/content/products';
|
|
import { companyDetails } from '@/content/company';
|
|
import { ProductPageClient } from '@/components/shop/ProductPageClient';
|
|
import { getProductVariants } from '@/content/product-variants';
|
|
|
|
interface Props {
|
|
params: Promise<{ slug: string }>;
|
|
}
|
|
|
|
export async function generateStaticParams() {
|
|
return getProducts().map(p => ({ slug: p.slug }));
|
|
}
|
|
|
|
export async function generateMetadata({ params }: Props): Promise<Metadata> {
|
|
const { slug } = await params;
|
|
const product = getProductBySlug(slug);
|
|
if (!product) return { title: 'Produkt nie znaleziony' };
|
|
return {
|
|
title: `${product.brand} ${product.name} | Sklep ThermCool`,
|
|
description: product.shortDescription || `Klimatyzator ${product.name} — sprawdź specyfikację i cenę. Profesjonalny montaż na Dolnym Śląsku.`,
|
|
alternates: { canonical: `/sklep/${product.slug}` },
|
|
};
|
|
}
|
|
|
|
export default async function ProductPage({ params }: Props) {
|
|
const { slug } = await params;
|
|
const product = getProductBySlug(slug);
|
|
if (!product) notFound();
|
|
|
|
// Pobierz wszystkie produkty serii dla wariantów
|
|
const variants = getProductVariants(slug);
|
|
const allProducts = getProducts();
|
|
const seriesProducts = variants
|
|
? allProducts.filter(p => getProductVariants(p.slug)?.series === variants.series)
|
|
: [product];
|
|
|
|
const baseUrl = process.env.NEXT_PUBLIC_BASE_URL || 'https://thermcool.pl';
|
|
|
|
const productJsonLd = product.price ? {
|
|
"@context": "https://schema.org",
|
|
"@type": "Product",
|
|
"name": product.name,
|
|
"description": product.shortDescription,
|
|
"sku": product.sku,
|
|
"brand": { "@type": "Brand", "name": product.brand },
|
|
"image": product.image.startsWith('http') ? product.image : `${baseUrl}${product.image}`,
|
|
"offers": {
|
|
"@type": "Offer",
|
|
"url": `${baseUrl}/sklep/${product.slug}`,
|
|
"priceCurrency": "PLN",
|
|
"price": product.price,
|
|
"priceValidUntil": "2027-12-31",
|
|
"availability": "https://schema.org/InStock",
|
|
"seller": { "@type": "Organization", "name": "ThermCool" },
|
|
},
|
|
} : null;
|
|
|
|
return (
|
|
<>
|
|
{productJsonLd && (
|
|
<script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(productJsonLd) }} />
|
|
)}
|
|
<ProductPageClient
|
|
product={product}
|
|
seriesProducts={seriesProducts}
|
|
companyPhone={companyDetails.phone}
|
|
companyPhoneRaw={companyDetails.phoneRaw}
|
|
/>
|
|
</>
|
|
);
|
|
}
|