Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,4 @@ section: "Build System"
order: 3
---

<Suspense>
<Docson tag="master" />
</Suspense>
<Docson tag="master" />
26 changes: 25 additions & 1 deletion apps/docs/src/components/DocsonLazy.res
Original file line number Diff line number Diff line change
@@ -1 +1,25 @@
let make = React.lazy_(() => import(Docson.make))
module Internal = {
let make = React.lazy_(() => import(Docson.make))
}

let fallback = <div id="docson-root" />

@react.component
let make = (~tag) => {
let (isMounted, setMounted) = React.useState(_ => false)

React.useEffect(() => {
setMounted(_ => true)
None
}, [])

// Docson mutates the DOM and depends on browser globals, so keep the first
// client render identical to the prerendered HTML and load it after hydration.
if isMounted {
<React.Suspense fallback>
<Internal tag />
</React.Suspense>
} else {
fallback
}
}
5 changes: 5 additions & 0 deletions apps/docs/vite.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,11 @@ const excludedFiles = ["lib/**", "**/*.res", "**/*.resi"];

export default defineConfig({
envDir: "../..",
// Some older browser-targeted dependencies, notably docson, still reference
// Node's `global` identifier. Rewrite it to the standards-based browser global.
define: {
global: "globalThis",
},
plugins: [
tailwindcss(),
reactRouter(),
Expand Down
Loading