diff --git a/src/ApiDocs.res b/src/ApiDocs.res
index fba3abf17..0dca67f9d 100644
--- a/src/ApiDocs.res
+++ b/src/ApiDocs.res
@@ -170,6 +170,7 @@ module SidebarTree = {
open Url
ReactEvent.Form.preventDefault(evt)
let version = (evt->ReactEvent.Form.target)["value"]
+ WebAPI.Storage.setItem(localStorage, ~key=(Manual :> string), ~value=version)
let url = Url.parse(router.asPath)
switch url.pagepath[1] {
| Some("core") | Some("stdlib") =>
diff --git a/src/DocsOverview.res b/src/DocsOverview.res
index cdc04d212..b847d148f 100644
--- a/src/DocsOverview.res
+++ b/src/DocsOverview.res
@@ -30,35 +30,8 @@ let default = (~showVersionSelect=true) => {
("Reanalyze", "https://github.com/rescript-lang/reanalyze"),
]
- let versionSelect = if showVersionSelect {
- let onChange = evt => {
- open Url
- ReactEvent.Form.preventDefault(evt)
- let version = (evt->ReactEvent.Form.target)["value"]
- let url = Url.parse(router.route)
-
- let targetUrl =
- "/" ++
- (Array.join(url.base, "/") ++
- ("/" ++ (version ++ ("/" ++ Array.join(url.pagepath, "/")))))
- router->Next.Router.push(targetUrl)
- }
-
-
-
-
- } else {
- React.null
- }
-
<>
- versionSelect
{React.string("Docs")}
diff --git a/src/Playground.res b/src/Playground.res
index bd20c5939..4e89cdbd7 100644
--- a/src/Playground.res
+++ b/src/Playground.res
@@ -886,7 +886,9 @@ module Settings = {
ReactEvent.Form.preventDefault(evt)
let id: string = (evt->ReactEvent.Form.target)["value"]
switch id->Semver.parse {
- | Some(v) => onCompilerSelect(v)
+ | Some(v) =>
+ onCompilerSelect(v)
+ WebAPI.Storage.setItem(localStorage, ~key=(Url.Playground :> string), ~value=id)
| None => ()
}
}}>
@@ -1417,7 +1419,11 @@ let make = (~versions: array) => {
let initialVersion = switch Dict.get(router.query, "version") {
| Some(version) => version->Semver.parse
- | None => lastStableVersion
+ | None =>
+ switch Url.getVersionFromStorage(Playground) {
+ | Some(v) => v->Semver.parse
+ | None => lastStableVersion
+ }
}
let initialLang = switch Dict.get(router.query, "ext") {
diff --git a/src/common/Url.res b/src/common/Url.res
index 4c28634f3..1e3b6b25d 100644
--- a/src/common/Url.res
+++ b/src/common/Url.res
@@ -81,6 +81,20 @@ let parse = (route: string): t => {
{fullpath, base, version, pagepath}
}
+@unboxed
+type storageKey =
+ | @as("manual_version") Manual
+ | @as("react_version") React
+ | @as("playground_version") Playground
+
+let getVersionFromStorage = (key: storageKey) => {
+ try {
+ WebAPI.Storage.getItem(window.localStorage, (key :> string))->Null.toOption
+ } catch {
+ | JsExn(_) => None
+ }
+}
+
let getVersionString = url =>
switch url.version {
| Next => Constants.versions.next
diff --git a/src/common/Url.resi b/src/common/Url.resi
index 57d1de25e..1c95d0924 100644
--- a/src/common/Url.resi
+++ b/src/common/Url.resi
@@ -21,4 +21,12 @@ let parse: string => t
let prettyString: string => string
+@unboxed
+type storageKey =
+ | @as("manual_version") Manual
+ | @as("react_version") React
+ | @as("playground_version") Playground
+
+let getVersionFromStorage: storageKey => option
+
let getVersionString: t => string
diff --git a/src/components/Navigation.res b/src/components/Navigation.res
index 1476fa627..25738b614 100644
--- a/src/components/Navigation.res
+++ b/src/components/Navigation.res
@@ -77,7 +77,10 @@ let make = (~fixed=true, ~isOverlayOpen: bool, ~setOverlayOpen: (bool => bool) =
let router = Next.Router.useRouter()
let route = router.route
let url = router.route->Url.parse
- let version = url->Url.getVersionString
+ let verionFromUrl = url->Url.getVersionString
+
+ let version = Url.getVersionFromStorage(Manual)->Option.getOr(Constants.versions.latest)
+ let reactVersion = Url.getVersionFromStorage(React)->Option.getOr(verionFromUrl)
let toggleOverlay = () => {
setOverlayOpen(prev => !prev)
@@ -188,7 +191,7 @@ let make = (~fixed=true, ~isOverlayOpen: bool, ~setOverlayOpen: (bool => bool) =
{React.string("Syntax Lookup")}
{React.string("React")}
diff --git a/src/layouts/ApiLayout.res b/src/layouts/ApiLayout.res
index 04289ee33..90724a724 100644
--- a/src/layouts/ApiLayout.res
+++ b/src/layouts/ApiLayout.res
@@ -105,6 +105,7 @@ let make = (
ReactEvent.Form.preventDefault(evt)
let version = (evt->ReactEvent.Form.target)["value"]
let url = Url.parse(route)
+ WebAPI.Storage.setItem(localStorage, ~key=(Url.Manual :> string), ~value=version)
let targetUrl =
"/" ++
diff --git a/src/layouts/DocsLayout.res b/src/layouts/DocsLayout.res
index 828bdd127..2914724a9 100644
--- a/src/layouts/DocsLayout.res
+++ b/src/layouts/DocsLayout.res
@@ -94,6 +94,14 @@ let make = (
ReactEvent.Form.preventDefault(evt)
let version = (evt->ReactEvent.Form.target)["value"]
let url = Url.parse(route)
+ WebAPI.Storage.setItem(
+ localStorage,
+ ~key=switch metaTitleCategory {
+ | "React" => (React :> string)
+ | _ => (Manual :> string)
+ },
+ ~value=version,
+ )
let targetUrl =
"/" ++