Skip to content

Commit 01b7117

Browse files
authored
[codex] Add typed route slots (#197)
* Add typed route slots * Format route slot changes * Normalize router package bin * Add route slots changeset
1 parent a5b066d commit 01b7117

38 files changed

Lines changed: 1258 additions & 371 deletions

.changeset/typed-route-slots.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
"rescript-relay-router": minor
3+
---
4+
5+
Add typed route slots for rendering descendant route branches into named parent outlets.
6+
7+
Routes can now declare `slots`, descendant routes can target an ancestor slot with `outlet`, and generated route modules expose typed slot components such as `Routes.Root.Slots.Overlay`.

examples/client-rendering/src/components/Layout.res

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@ module Query = %relay(`
44
}
55
`)
66

7-
let links = [("Todos", Routes.Root.Todos.Route.makeLink())]
7+
let links = [
8+
("Todos", Routes.Root.Todos.Route.makeLink()),
9+
("Settings overlay", Routes.Root.Settings.Route.makeLink()),
10+
]
811

912
@react.component
1013
let make = (~queryRef, ~children) => {
@@ -22,5 +25,6 @@ let make = (~queryRef, ~children) => {
2225
<React.Suspense fallback={<div> {React.string("Loading...")} </div>}>
2326
<LayoutDisplay query={data.fragmentRefs}> {children} </LayoutDisplay>
2427
</React.Suspense>
28+
<Routes.Root.Slots.Overlay />
2529
</div>
2630
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
let renderer = Route__Root__Settings_route.makeRenderer(
2+
~prepare=_props => (),
3+
~render=_props => {
4+
<aside>
5+
<h2> {React.string("Settings")} </h2>
6+
<p> {React.string("This route renders through Routes.Root.Slots.Overlay.")} </p>
7+
</aside>
8+
},
9+
)

0 commit comments

Comments
 (0)