import type { Metadata } from "next"; import Link from "next/link"; import { notFound } from "next/navigation"; import { PageHero } from "@/components/PageHero"; import { Pagination } from "@/components/Pagination"; import { ProductGrid } from "@/components/ProductGrid"; import { ProductTabs } from "@/components/ProductTabs"; import { ProductView } from "@/components/ProductView"; import { getCategories, getCategoryBySlug, getComments, getProduct, getStoreItemByProduct } from "@/lib/api"; import { listMappedProductsForCategory } from "@/lib/mappers"; import { SITE } from "@/lib/site"; type Props = { params: Promise<{ slug: string }>; searchParams: Promise<{ page?: string }>; }; export async function generateMetadata({ params }: Props): Promise { const { slug } = await params; try { const product = await getProduct(slug); if (product) { return { title: `${product.nameFa || product.title} | ${SITE.nameFa}`, description: product.summary || SITE.tagline, }; } const category = await getCategoryBySlug(slug); if (category) { return { title: `${category.nameFa || category.name} | ${SITE.nameFa}`, description: SITE.tagline, }; } } catch { // fall through } return { title: SITE.nameFa }; } export default async function ProductOrCategoryPage({ params, searchParams }: Props) { const { slug } = await params; const product = await getProduct(slug); if (product) { const [storeItem, comments] = await Promise.all([ getStoreItemByProduct(product.id), getComments("product", product.id), ]); return ( <>
); } const [category, categories] = await Promise.all([getCategoryBySlug(slug), getCategories()]); if (!category) notFound(); const { page: pageParam } = await searchParams; const page = Math.max(1, Number(pageParam) || 1); const children = categories.filter((item) => item.parentId === category.id); const data = await listMappedProductsForCategory( category.id, children.map((item) => item.id), page, 16, ); return ( <>
{children.length > 0 && (
{children.map((item) => ( {item.nameFa || item.name} ))}
)} (nextPage > 1 ? `/products/${slug}?page=${nextPage}` : `/products/${slug}`)} />
); }