import Link from "next/link"; import { notFound } from "next/navigation"; import { ContentCard } from "@/components/public/ui"; import { prisma } from "@/lib/prisma"; import { siteSettings } from "@/lib/services/site-settings"; export const dynamic = "force-dynamic"; // Asset path matches AtomCMS's Blade view: asset('/assets/images/help-center/'). const HELP_IMAGE_BASE = "/assets/images/help-center"; type HelpCategory = { id: bigint; name: string; content: string; position: number; imageUrl: string | null; buttonText: string | null; buttonUrl: string | null; buttonColor: string; buttonBorderColor: string; smallBox: boolean; }; type HelpCategoryLink = { id: bigint; name: string; position: number; }; // Faithful to AtomCMS: name / content / button_text carry a `:hotel` placeholder // replaced with the configured hotel name before display. function withHotel(text: string | null | undefined, hotelName: string): string { return (text ?? "").split(":hotel").join(hotelName); } export default async function HelpCategoryPage({ params, }: { params: Promise<{ category: string }>; }) { const { category } = await params; let categoryId: bigint; try { categoryId = BigInt(category); } catch { notFound(); } let cat: HelpCategory | null = null; try { cat = await prisma.websiteHelpCenterCategories.findUnique({ where: { id: categoryId! }, select: { id: true, name: true, content: true, position: true, imageUrl: true, buttonText: true, buttonUrl: true, buttonColor: true, buttonBorderColor: true, smallBox: true, }, }); } catch { cat = null; } if (!cat) notFound(); const hotelName = (await siteSettings.get("hotel_name", "Atom")) ?? "Atom"; // Sibling help topics, so the reader can jump between categories. Isolated // query: a DB hiccup degrades this list to empty rather than 500-ing. let siblings: HelpCategoryLink[] = []; try { siblings = await prisma.websiteHelpCenterCategories.findMany({ where: { id: { not: categoryId! } }, orderBy: { position: "asc" }, select: { id: true, name: true, position: true }, take: 50, }); } catch { siblings = []; } const title = withHotel(cat.name, hotelName); const content = withHotel(cat.content, hotelName); const buttonText = withHotel(cat.buttonText, hotelName); const imageSrc = cat.imageUrl ? `${HELP_IMAGE_BASE}/${cat.imageUrl}` : ""; const hasButton = Boolean(cat.buttonText && cat.buttonText.trim() !== ""); return (

← Help Center

{imageSrc ? ( // eslint-disable-next-line @next/next/no-img-element ) : null} {/* content is author-supplied HTML in AtomCMS (rendered raw with {!! !!}). */}
{hasButton ? (
{buttonText}
) : null} {siblings.length > 0 ? (
{siblings.map((s) => ( {withHotel(s.name, hotelName)} ))}
) : null}
); }