From 9d1875f7c24161917e85006b9a43eb57acbb41b7 Mon Sep 17 00:00:00 2001 From: Florian Hammerschmidt Date: Tue, 20 Oct 2026 19:22:49 +0200 Subject: [PATCH 1/2] feat: link to v13 preview documentation in version menu Expose the v13 preview from the stable documentation selector and keep the current preview out of its own alternatives. Extend the ReScript dropdown test to check visibility and the destination URL. --- apps/docs/__tests__/VersionSelect_.test.res | 9 ++++++++- apps/docs/src/components/VersionSelect.res | 10 ++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/apps/docs/__tests__/VersionSelect_.test.res b/apps/docs/__tests__/VersionSelect_.test.res index 54943bdae..61ae8100f 100644 --- a/apps/docs/__tests__/VersionSelect_.test.res +++ b/apps/docs/__tests__/VersionSelect_.test.res @@ -10,7 +10,7 @@ test("renders current version label", async () => { await element(label)->toBeVisible }) -test("clicking button shows older versions", async () => { +test("clicking button shows the v13 preview and older versions", async () => { let screen = await render() // Menu should be hidden initially @@ -21,6 +21,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 diff --git a/apps/docs/src/components/VersionSelect.res b/apps/docs/src/components/VersionSelect.res index df8b957c4..f6745193f 100644 --- a/apps/docs/src/components/VersionSelect.res +++ b/apps/docs/src/components/VersionSelect.res @@ -5,7 +5,13 @@ type version = { let currentVersion = {label: DocsVersion.current ++ " (latest)", link: "#"} -let olderVersions = [ +let previewVersions = + DocsVersion.current === "v13" + ? [] + : [{label: "v13 (preview)", link: "https://v13.rescript-lang.org/docs/manual/introduction"}] + +let otherVersions = [ + ...previewVersions, {label: "v11", link: "https://v11.rescript-lang.org/docs/manual/v11.0.0/introduction"}, {label: "v9.1 - v10.1", link: "https://v11.rescript-lang.org/docs/manual/v10.0.0/introduction"}, {label: "v8.2 - v9.0", link: "https://v11.rescript-lang.org/docs/manual/v9.0.0/introduction"}, @@ -20,7 +26,7 @@ let make = () => { let id = React.useId() let popoverId = "older-versions-" ++ id - let children = Array.map(olderVersions, ver => { + let children = Array.map(otherVersions, ver => { {React.string(ver.label)} From ab6b6dd2047a0afcbdb95ace0be6b9a111dadd1d Mon Sep 17 00:00:00 2001 From: Florian Hammerschmidt Date: Tue, 20 Oct 2026 19:27:09 +0200 Subject: [PATCH 2/2] fix: preserve the current page when switching to v13 Build the preview link from React Router's current path, query, and fragment using the fixed v13 origin. Render selector tests within MemoryRouter and cover manual and API page navigation. --- apps/docs/__tests__/VersionSelect_.test.res | 60 +++++++++++++++++---- apps/docs/src/components/VersionSelect.res | 17 +++--- 2 files changed, 59 insertions(+), 18 deletions(-) diff --git a/apps/docs/__tests__/VersionSelect_.test.res b/apps/docs/__tests__/VersionSelect_.test.res index 61ae8100f..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 @@ -11,7 +15,11 @@ test("renders current version label", async () => { }) test("clicking button shows the v13 preview and older versions", async () => { - let screen = await render() + let screen = await render( + + + , + ) // Menu should be hidden initially let v11 = await screen->getByText("v11") @@ -43,7 +51,11 @@ test("clicking button shows the v13 preview and 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) @@ -60,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") @@ -85,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 f6745193f..90e8eca9e 100644 --- a/apps/docs/src/components/VersionSelect.res +++ b/apps/docs/src/components/VersionSelect.res @@ -5,13 +5,7 @@ type version = { let currentVersion = {label: DocsVersion.current ++ " (latest)", link: "#"} -let previewVersions = - DocsVersion.current === "v13" - ? [] - : [{label: "v13 (preview)", link: "https://v13.rescript-lang.org/docs/manual/introduction"}] - -let otherVersions = [ - ...previewVersions, +let olderVersions = [ {label: "v11", link: "https://v11.rescript-lang.org/docs/manual/v11.0.0/introduction"}, {label: "v9.1 - v10.1", link: "https://v11.rescript-lang.org/docs/manual/v10.0.0/introduction"}, {label: "v8.2 - v9.0", link: "https://v11.rescript-lang.org/docs/manual/v9.0.0/introduction"}, @@ -23,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(otherVersions, ver => { + let children = [...previewVersions, ...olderVersions]->Array.map(ver => { {React.string(ver.label)}