import type { Metadata } from "next"; import { notFound } from "next/navigation"; import PlaceExplorer from "@/app/sted/[slug]/PlaceExplorer"; import { type FacilityRecord, enrichFacilities, filterFacilitiesByArea, getAvailablePlaceConfigs, getPlaceConfigFromSlug, } from "@/app/facilityData"; import { API_URL } from "@/config/constants"; import { createBreadcrumbJsonLd, createCollectionPageJsonLd, createItemListJsonLd, createPageMetadata, } from "@/app/seo"; export const dynamicParams = true; export const dynamic = "force-dynamic"; export async function generateStaticParams() { return getAvailablePlaceConfigs().map((slug) => ({ slug })); } export async function generateMetadata({ params, }: { params: Promise<{ slug: string }>; }): Promise { const { slug } = await params; const place = getPlaceConfigFromSlug(slug); if (!place) { return createPageMetadata({ title: "Sted ikke funnet", description: "Denne stedssiden finnes ikke på TeeOff.", path: `/sted/${slug}`, }); } return createPageMetadata({ title: place.title, description: `${place.intro} TeeOff samler golfbaner i ${place.label} med oppdatert banestatus og baneprofiler.`, path: `/sted/${slug}`, }); } export default async function PlacePage({ params }: { params: Promise<{ slug: string }> }) { const { slug } = await params; const place = getPlaceConfigFromSlug(slug); if (!place) { notFound(); } let facilities: FacilityRecord[] = []; try { const res = await fetch(`${API_URL}/facilities`, { next: { revalidate: 0 }, cache: "no-store", }); if (!res.ok) { throw new Error(`API returnerte status ${res.status}`); } facilities = await res.json(); } catch (error) { console.error("Kritisk feil ved henting av sted-data:", error); facilities = []; } const safeData = Array.isArray(facilities) ? facilities : []; const facilitiesInPlace = filterFacilitiesByArea(enrichFacilities(safeData), place.areaFilter); const collectionJsonLd = createCollectionPageJsonLd({ name: place.title, description: place.intro, path: `/sted/${slug}`, }); const itemListJsonLd = createItemListJsonLd({ name: place.title, path: `/sted/${slug}`, items: facilitiesInPlace .filter((facility) => facility?.slug && facility?.name) .map((facility) => ({ name: facility.name, path: `/golfbaner/${facility.slug}`, description: facility.description, })), }); const breadcrumbJsonLd = createBreadcrumbJsonLd([ { name: "Hjem", path: "/" }, { name: "Steder", path: "/sted/norge" }, { name: place.label, path: `/sted/${slug}` }, ]); return ( <>