diff --git a/apps/docs/__tests__/VersionSelect_.test.res b/apps/docs/__tests__/VersionSelect_.test.res
index 54943bdae..14b989876 100644
--- a/apps/docs/__tests__/VersionSelect_.test.res
+++ b/apps/docs/__tests__/VersionSelect_.test.res
@@ -1,7 +1,11 @@
open Vitest
test("renders current version label", async () => {
- let screen = await render()
+ let screen = await render(
+
+
+ ,
+ )
let el = await screen->getByTestId("version-select")
await element(el)->toBeVisible
@@ -10,8 +14,12 @@ test("renders current version label", async () => {
await element(label)->toBeVisible
})
-test("clicking button shows older versions", async () => {
- let screen = await render()
+test("clicking button shows the v13 preview and older versions", async () => {
+ let screen = await render(
+
+
+ ,
+ )
// Menu should be hidden initially
let v11 = await screen->getByText("v11")
@@ -21,6 +29,13 @@ test("clicking button shows older versions", async () => {
let button = await screen->getByRole(#button)
await button->click
+ let preview = await screen->getByText("v13 (preview)")
+ await element(preview)->toBeVisible
+ await element(preview)->toHaveAttribute(
+ "href",
+ "https://v13.rescript-lang.org/docs/manual/introduction",
+ )
+
// Older versions should now be visible
let v11After = await screen->getByText("v11")
await element(v11After)->toBeVisible
@@ -36,7 +51,11 @@ test("clicking button shows older versions", async () => {
})
test("clicking button again closes older versions", async () => {
- let screen = await render()
+ let screen = await render(
+
+
+ ,
+ )
let button = await screen->getByRole(#button)
@@ -53,14 +72,16 @@ test("clicking button again closes older versions", async () => {
test("multiple instances have unique popover IDs", async () => {
let screen = await render(
-
-
-
-
-
,
+ ,
)
let first = await screen->getByTestId("first")
@@ -78,3 +99,29 @@ test("multiple instances have unique popover IDs", async () => {
let secondV11 = await second->getByText("v11")
await element(secondV11)->notToBeVisible
})
+
+test("switching to v13 preserves the manual page, query, and anchor", async () => {
+ let path = "/docs/manual/array-and-list?view=full#immutable-lists"
+ let screen = await render(
+
+
+ ,
+ )
+ let button = await screen->getByRole(#button)
+ await button->click
+ let preview = await screen->getByText("v13 (preview)")
+ await element(preview)->toHaveAttribute("href", "https://v13.rescript-lang.org" ++ path)
+})
+
+test("switching to v13 preserves the API module", async () => {
+ let path = "/docs/manual/api/stdlib/array#value-map"
+ let screen = await render(
+
+
+ ,
+ )
+ let button = await screen->getByRole(#button)
+ await button->click
+ let preview = await screen->getByText("v13 (preview)")
+ await element(preview)->toHaveAttribute("href", "https://v13.rescript-lang.org" ++ path)
+})
diff --git a/apps/docs/src/components/VersionSelect.res b/apps/docs/src/components/VersionSelect.res
index df8b957c4..90e8eca9e 100644
--- a/apps/docs/src/components/VersionSelect.res
+++ b/apps/docs/src/components/VersionSelect.res
@@ -17,10 +17,17 @@ let version = DocsVersion.current
@react.component
let make = () => {
+ let location = ReactRouter.useLocation()
+ let search = location.search->Option.getOr("")
+ let hash = location.hash->Option.getOr("")
+ let previewHref =
+ "https://v13.rescript-lang.org" ++ (location.pathname :> string) ++ search ++ hash
+ let previewVersions =
+ DocsVersion.current === "v13" ? [] : [{label: "v13 (preview)", link: previewHref}]
let id = React.useId()
let popoverId = "older-versions-" ++ id
- let children = Array.map(olderVersions, ver => {
+ let children = [...previewVersions, ...olderVersions]->Array.map(ver => {
{React.string(ver.label)}