Files
reacord/packages/website/app/routes/api/$name.tsx
2022-01-14 15:58:06 -06:00

52 lines
1.3 KiB
TypeScript

import type { LoaderFunction } from "remix"
import { useLoaderData } from "remix"
import { inspect } from "node:util"
import { loadApiData } from "~/modules/api/api-data.server"
import { renderMarkdown } from "~/modules/markdown/render-markdown.server"
type LoaderData = {
title: string
description?: { __html: string }
}
export const loader: LoaderFunction = async ({ params }) => {
const apiData = await loadApiData()
const entityName = params.name!
const info = apiData.children?.find((child) => child.name === entityName)
console.log(inspect(info, { depth: Number.POSITIVE_INFINITY }))
const description = [
info?.comment?.shortText,
info?.comment?.text,
info?.signatures?.[0]?.comment?.shortText,
info?.signatures?.[0]?.comment?.text,
]
.filter(Boolean)
.join("\n\n")
const data: LoaderData = {
title: entityName,
description: description ? await renderMarkdown(description) : undefined,
}
return data
}
export default function ApiDetailPage() {
const data = useLoaderData<LoaderData>()
return (
<>
<h1>{data.title}</h1>
{data.description ? (
<section dangerouslySetInnerHTML={data.description} />
) : undefined}
</>
)
}
function addDefined<Value extends number | string>(
...values: Array<Value | undefined>
): Value | undefined {}