From b1d3feb95bffeda22d9e76706776e036b4cbc3c6 Mon Sep 17 00:00:00 2001 From: xiejay97 Date: Wed, 1 Mar 2023 14:20:49 +0800 Subject: [PATCH] chore(site): support multiple versions --- .../site/src/app/routes/layout/Header.tsx | 4 ++ .../site/src/app/routes/layout/Versions.tsx | 46 +++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 packages/site/src/app/routes/layout/Versions.tsx diff --git a/packages/site/src/app/routes/layout/Header.tsx b/packages/site/src/app/routes/layout/Header.tsx index f504fe25..be7091fe 100644 --- a/packages/site/src/app/routes/layout/Header.tsx +++ b/packages/site/src/app/routes/layout/Header.tsx @@ -10,6 +10,9 @@ import { DCustomIcon, GithubOutlined } from '@react-devui/icons'; import { DDropdown, DMenu, DSeparator } from '@react-devui/ui'; import { getClassName } from '@react-devui/utils'; +import { environment } from '../../../environments/environment'; +import { AppVersions } from './Versions'; + export interface AppHeaderProps { menuOpen: boolean; onMenuOpenChange: (open: boolean) => void; @@ -46,6 +49,7 @@ export function AppHeader(props: AppHeaderProps): JSX.Element | null {
+ {environment.production && } { + const v = window.location.host.match(/^v[0-9]+/); + return v ? v[0] : 'main'; + })(); + const [versions, setVersions] = useState(() => { + if (version === 'main') { + return ['main']; + } else { + return ['main', version]; + } + }); + useMount(() => { + axios.get('/api/versions').then((response) => { + setVersions(['main', ...(response.data as number[]).map((v) => `v${v}`)]); + }); + }); + + return ( + ({ id: v, label: v, type: 'item' }))} + onItemClick={(id) => { + window.location = ((id === 'main' ? 'https://react-devui.com' : `https://${id}.react-devui.com`) + location.pathname) as any; + }} + > + +
+ {version} + + + +
+
+
+ ); +}