Skip to content

Commit 573c4aa

Browse files
neewampthatbot-copy[bot]
authored andcommitted
Persist Interactive Docs state across page navigation
GitOrigin-RevId: 8a8f85c171f30b76b7a8068cb355068aff50f072
1 parent bfd5bb0 commit 573c4aa

2 files changed

Lines changed: 62 additions & 6 deletions

File tree

quine-browser/src/main/scala/com/thatdot/quine/webapp/components/HybridViewsRenderer.scala

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,17 @@ object HybridViewsRenderer {
1313
flex := "1",
1414
div(
1515
cls := "h-100",
16-
display <-- renderStrategy.map({
17-
case RenderAlwaysMountedPage => "block"
16+
position := "absolute",
17+
top := "0",
18+
left := "0",
19+
right := "0",
20+
bottom := "0",
21+
visibility <-- renderStrategy.map({
22+
case RenderAlwaysMountedPage => "visible"
23+
case RenderRegularlyMountedPages => "hidden"
24+
}),
25+
pointerEvents <-- renderStrategy.map({
26+
case RenderAlwaysMountedPage => "auto"
1827
case RenderRegularlyMountedPages => "none"
1928
}),
2029
alwaysRenderedView,

quine-browser/src/main/scala/com/thatdot/quine/webapp/views/QuineOssViews.scala

Lines changed: 51 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,66 @@ class QuineOssViews(
1919
) {
2020
val staticViews: Signal[HtmlElement] = SplitRender(router.currentPageSignal)
2121
.collectStatic(ExplorerUi)(div(): HtmlElement)
22-
.collectStatic(DocsV1)(DocsV1View(options))
23-
.collectStatic(DocsV2)(DocsV2View(options))
22+
.collectStatic(DocsV1)(div(): HtmlElement)
23+
.collectStatic(DocsV2)(div(): HtmlElement)
2424
.collectStatic(Metrics)(MetricsView(routes, queryMethod))
2525
.collectStatic(Streams)(StreamsView(options))
2626
.collectStatic(Landing)(LandingView(routes))
2727
.signal
2828

29+
val alwaysMountedWrapper: HtmlElement = div(
30+
cls := "h-100",
31+
position := "relative",
32+
div(
33+
cls := "h-100",
34+
display <-- router.currentPageSignal.map {
35+
case ExplorerUi => "block"
36+
case _ => "none"
37+
},
38+
ExplorationUiView(options = options, routes = routes),
39+
),
40+
div(
41+
position := "absolute",
42+
top := "0",
43+
left := "0",
44+
right := "0",
45+
bottom := "0",
46+
overflow := "auto",
47+
visibility <-- router.currentPageSignal.map {
48+
case DocsV1 => "visible"
49+
case _ => "hidden"
50+
},
51+
pointerEvents <-- router.currentPageSignal.map {
52+
case DocsV1 => "auto"
53+
case _ => "none"
54+
},
55+
DocsV1View(options),
56+
),
57+
div(
58+
position := "absolute",
59+
top := "0",
60+
left := "0",
61+
right := "0",
62+
bottom := "0",
63+
overflow := "auto",
64+
visibility <-- router.currentPageSignal.map {
65+
case DocsV2 => "visible"
66+
case _ => "hidden"
67+
},
68+
pointerEvents <-- router.currentPageSignal.map {
69+
case DocsV2 => "auto"
70+
case _ => "none"
71+
},
72+
DocsV2View(options),
73+
),
74+
)
75+
2976
val views: HtmlElement =
3077
HybridViewsRenderer(
31-
alwaysRenderedView = ExplorationUiView(options = options, routes = routes),
78+
alwaysRenderedView = alwaysMountedWrapper,
3279
regularlyRenderedViews = staticViews,
3380
renderStrategy = router.currentPageSignal.map({
34-
case ExplorerUi => RenderAlwaysMountedPage
81+
case ExplorerUi | DocsV1 | DocsV2 => RenderAlwaysMountedPage
3582
case _ => RenderRegularlyMountedPages
3683
}),
3784
)

0 commit comments

Comments
 (0)