import Image from "next/image"; import { getProductBySlug, getProducts, getProductPrice, getProductImage, getLocalizedProduct, formatPrice } from "@/lib/saleor"; import Header from "@/components/layout/Header"; import Footer from "@/components/layout/Footer"; import type { Product } from "@/types/saleor"; interface ProductPageProps { params: Promise<{ slug: string; locale?: string }>; } // Generate static params for all products export async function generateStaticParams() { try { const products = await getProducts("SR", 100); const params: Array<{ slug: string; locale: string }> = []; products.forEach((product: Product) => { // Serbian slug params.push({ slug: product.slug, locale: "sr" }); // English slug (if translation exists) if (product.translation?.slug) { params.push({ slug: product.translation.slug, locale: "en" }); } }); return params; } catch (e) { return []; } } export async function generateMetadata({ params }: ProductPageProps) { const { slug, locale = "sr" } = await params; const product = await getProductBySlug(slug, locale.toUpperCase()); if (!product) { return { title: locale === "en" ? "Product Not Found" : "Proizvod nije pronađen", }; } const localized = getLocalizedProduct(product, locale.toUpperCase()); return { title: localized.name, description: localized.seoDescription || localized.description?.slice(0, 160), alternates: { canonical: `/products/${product.slug}`, languages: { "sr": `/products/${product.slug}`, "en": product.translation?.slug ? `/products/${product.translation.slug}` : `/products/${product.slug}`, }, }, }; } export default async function ProductPage({ params }: ProductPageProps) { const { slug, locale = "sr" } = await params; const product = await getProductBySlug(slug, locale.toUpperCase()); if (!product) { return ( {locale === "en" ? "Product not found" : "Proizvod nije pronađen"} ); } const localized = getLocalizedProduct(product, locale.toUpperCase()); const image = getProductImage(product); const price = getProductPrice(product); const variant = product.variants?.[0]; const isAvailable = variant?.quantityAvailable > 0; // Determine language based on which slug matched const isEnglishSlug = slug === product.translation?.slug; const currentLocale = isEnglishSlug ? "en" : "sr"; // URLs for language switcher const serbianUrl = `/products/${product.slug}`; const englishUrl = product.translation?.slug ? `/products/${product.translation.slug}` : serbianUrl; return ( {/* Product Image */} {/* Product Info */} {localized.name} {price && ( {price} )} {localized.description && ( )} {/* Add to Cart Button */} {isAvailable ? (currentLocale === "en" ? "Add to Cart" : "Dodaj u korpu") : (currentLocale === "en" ? "Out of Stock" : "Nema na stanju") } {/* SKU */} {variant?.sku && ( SKU: {variant.sku} )} {/* Language Switcher */} {currentLocale === "en" ? "Language:" : "Jezik:"} 🇷🇸 Srpski 🇬🇧 English ); }
SKU: {variant.sku}
{currentLocale === "en" ? "Language:" : "Jezik:"}