diff --git a/packages/next/README.md b/packages/next/README.md index fb4807e3..14da7cd0 100644 --- a/packages/next/README.md +++ b/packages/next/README.md @@ -13,9 +13,10 @@ npm install @json-render/core @json-render/react @json-render/next ### 1. Define your application spec ```typescript +// lib/spec.ts import type { NextAppSpec } from "@json-render/next"; -const spec: NextAppSpec = { +export const spec: NextAppSpec = { metadata: { title: { default: "My App", template: "%s | My App" }, }, @@ -49,19 +50,48 @@ const spec: NextAppSpec = { ```typescript // lib/app.ts import { createNextApp } from "@json-render/next/server"; +import { spec } from "./spec"; -export const { Page, generateMetadata, generateStaticParams } = createNextApp({ spec }); +export const { getPageData, generateMetadata, generateStaticParams } = createNextApp({ spec }); ``` ### 3. Wire up Next.js routes ```tsx // app/[[...slug]]/page.tsx -export { Page as default, generateMetadata, generateStaticParams } from "@/lib/app"; +import { notFound } from "next/navigation"; +import { getPageData } from "@/lib/app"; +import { SiteRenderer } from "./renderer"; + +export { generateMetadata, generateStaticParams } from "@/lib/app"; + +export default async function Page({ + params, +}: { + params: Promise<{ slug?: string[] }>; +}) { + const data = await getPageData({ params }); + if (!data) notFound(); + return ; +} +``` + +```tsx +// app/[[...slug]]/renderer.tsx +"use client"; + +import { PageRenderer } from "@json-render/next"; +import type { PageRendererProps } from "@json-render/next"; + +export function SiteRenderer(props: PageRendererProps) { + return ; +} ``` ```tsx // app/[[...slug]]/layout.tsx +"use client"; + import { NextAppProvider } from "@json-render/next"; import { registry, handlers } from "@/lib/registry";