From 840afe977f2e4fc830070b2c104722639c1fd275 Mon Sep 17 00:00:00 2001 From: Jan Kassens Date: Tue, 23 Apr 2024 18:05:25 -0400 Subject: [PATCH] RFC for a docs version selector An idea how we could do versioning of docs that I think might be sustainable. - In the reference we have a version selector (design TBD) - `sidebarReference.json` can contain a version now to conditionally include entries - a `` component allows to conditionally include content in a doc when APIs change over time Code quality is very rough. Would probably put the version into the path somewhere, but that needs some more changes. --- package.json | 4 +++- .../Layout/Sidebar/SidebarRouteTree.tsx | 18 ++++++++++++++---- .../Layout/SidebarNav/SidebarNav.tsx | 15 +++++++++++++++ src/components/Layout/getRouteMeta.tsx | 4 ++-- src/components/MDX/MDXComponents.tsx | 13 +++++++++++++ src/content/reference/react/useCallback.md | 8 ++++++++ src/sidebarReference.json | 8 ++++---- yarn.lock | 12 ++++++++++++ 8 files changed, 71 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index d7520178082..b567db4a0d3 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,8 @@ "react-collapsed": "4.0.4", "react-dom": "^0.0.0-experimental-16d053d59-20230506", "remark-frontmatter": "^4.0.1", - "remark-gfm": "^3.0.1" + "remark-gfm": "^3.0.1", + "semver": "^7.6.0" }, "devDependencies": { "@babel/core": "^7.12.9", @@ -54,6 +55,7 @@ "@types/parse-numeric-range": "^0.0.1", "@types/react": "^18.0.9", "@types/react-dom": "^18.0.5", + "@types/semver": "^7.5.8", "@typescript-eslint/eslint-plugin": "^5.36.2", "@typescript-eslint/parser": "^5.36.2", "asyncro": "^3.0.0", diff --git a/src/components/Layout/Sidebar/SidebarRouteTree.tsx b/src/components/Layout/Sidebar/SidebarRouteTree.tsx index a9fa575b510..f2c51745f7f 100644 --- a/src/components/Layout/Sidebar/SidebarRouteTree.tsx +++ b/src/components/Layout/Sidebar/SidebarRouteTree.tsx @@ -5,6 +5,7 @@ import {useRef, useLayoutEffect, Fragment} from 'react'; import cn from 'classnames'; +import * as Semver from 'semver'; import {useRouter} from 'next/router'; import {SidebarLink} from './SidebarLink'; import {useCollapse} from 'react-collapsed'; @@ -77,6 +78,8 @@ export function SidebarRouteTree({ }: SidebarRouteTreeProps) { const slug = useRouter().asPath.split(/[\?\#]/)[0]; const pendingRoute = usePendingRoute(); + const selectedVersion: string = + (useRouter().query.version as string) ?? '19.0.0'; const currentRoutes = routeTree.routes as RouteItem[]; return (