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)}