diff --git a/packages/docs-new/server.ts b/packages/docs-new/server.ts index f40c9c2..e54680b 100644 --- a/packages/docs-new/server.ts +++ b/packages/docs-new/server.ts @@ -1,3 +1,4 @@ +import compression from "compression" import express from "express" import { dirname, join } from "node:path" import { fileURLToPath } from "node:url" @@ -8,6 +9,8 @@ const root = dirname(fileURLToPath(import.meta.url)) const app = express() +app.use(compression()) + let viteDevServer if (isProduction) { app.use(express.static(join(root, "dist/client"))) diff --git a/packages/docs-new/src/_default.page.client.tsx b/packages/docs-new/src/_default.page.client.tsx index 26fb252..cff7dde 100644 --- a/packages/docs-new/src/_default.page.client.tsx +++ b/packages/docs-new/src/_default.page.client.tsx @@ -10,7 +10,7 @@ const context = await getPage() createRoot(document.querySelector("#app")!).render( - + diff --git a/packages/docs-new/src/_default.page.server.tsx b/packages/docs-new/src/_default.page.server.tsx index 8194b05..5d4f847 100644 --- a/packages/docs-new/src/_default.page.server.tsx +++ b/packages/docs-new/src/_default.page.server.tsx @@ -6,7 +6,7 @@ import { dangerouslySkipEscape, escapeInject } from "vite-plugin-ssr" import { App } from "./app" import { RouteContextProvider } from "./route-context" -export const passToClient = ["routeParams"] +export const passToClient = ["routeParams", "pageData"] export function render(context: PageContextBuiltIn) { const headTags: React.ReactElement[] = [] diff --git a/packages/docs-new/src/pages/docs.page.server.tsx b/packages/docs-new/src/pages/docs.page.server.tsx new file mode 100644 index 0000000..14d637a --- /dev/null +++ b/packages/docs-new/src/pages/docs.page.server.tsx @@ -0,0 +1,23 @@ +import type { OnBeforeRenderFn } from "../router-types" + +export type DocsPageProps = { + title?: string + description?: string + content: string +} + +export const onBeforeRender: OnBeforeRenderFn = async ( + context, +) => { + const documentPath = context.routeParams["*"] + const document = await import(`../docs/${documentPath}.md`) + return { + pageContext: { + pageData: { + title: document.attributes.title, + description: document.attributes.description, + content: document.html, + }, + }, + } +} diff --git a/packages/docs-new/src/pages/docs.page.tsx b/packages/docs-new/src/pages/docs.page.tsx index b747f2e..f897d1a 100644 --- a/packages/docs-new/src/pages/docs.page.tsx +++ b/packages/docs-new/src/pages/docs.page.tsx @@ -1,19 +1,23 @@ import clsx from "clsx" +import { Meta, Title } from "react-head" import { AppLink } from "../components/app-link" import { MainNavigation } from "../components/main-navigation" import { guideLinks } from "../data/guide-links.preval" import { useScrolled } from "../hooks/dom/use-scrolled" -import { useRouteParams } from "../route-context" +import { usePageData } from "../route-context" import { docsProseClass, linkClass, maxWidthContainer, } from "../styles/components" +import type { DocsPageProps } from "./docs.page.server" export default function DocsPage() { - const params = useRouteParams() + const data = usePageData() return ( <> + {data.title} | Reacord +
@@ -30,10 +34,10 @@ export default function DocsPage() { ))} -
- {/* todo */} - {JSON.stringify(params, undefined, 2)} -
+
) diff --git a/packages/docs-new/src/route-context.tsx b/packages/docs-new/src/route-context.tsx index 369b139..0f2f4c4 100644 --- a/packages/docs-new/src/route-context.tsx +++ b/packages/docs-new/src/route-context.tsx @@ -2,6 +2,7 @@ import { createContext, useContext } from "react" export type RouteContextValue = { routeParams: Record + pageData?: Record } const Context = createContext() @@ -11,3 +12,7 @@ export const RouteContextProvider = Context.Provider export function useRouteParams() { return useContext(Context)?.routeParams ?? {} } + +export function usePageData() { + return useContext(Context)?.pageData as T +} diff --git a/packages/docs-new/src/router-types.ts b/packages/docs-new/src/router-types.ts new file mode 100644 index 0000000..6cdbbe4 --- /dev/null +++ b/packages/docs-new/src/router-types.ts @@ -0,0 +1,10 @@ +import type { Promisable } from "type-fest" +import type { PageContextBuiltIn } from "vite-plugin-ssr" + +export type OnBeforeRenderFn = ( + context: PageContextBuiltIn, +) => Promisable<{ + pageContext: { + pageData: PageProps + } +}>