w-funnel/src/app/[funnelId]/page.tsx
2025-09-26 02:46:48 +02:00

40 lines
926 B
TypeScript

import { notFound, redirect } from "next/navigation";
import {
listBakedFunnelIds,
peekBakedFunnelDefinition,
} from "@/lib/funnel/loadFunnelDefinition";
export const dynamic = "force-static";
export function generateStaticParams() {
return listBakedFunnelIds().map((funnelId) => ({ funnelId }));
}
interface FunnelRootPageProps {
params: Promise<{
funnelId: string;
}>;
}
export default async function FunnelRootPage({ params }: FunnelRootPageProps) {
const { funnelId } = await params;
let funnel: ReturnType<typeof peekBakedFunnelDefinition>;
try {
funnel = peekBakedFunnelDefinition(funnelId);
} catch (error) {
console.error(`Failed to load funnel '${funnelId}':`, error);
notFound();
}
const firstScreenId =
funnel.meta.firstScreenId ?? funnel.screens.at(0)?.id ?? "";
if (!firstScreenId) {
redirect("/");
}
redirect(`/${funnel.meta.id}/${firstScreenId}`);
}