Skip to content

Commit abfb6c7

Browse files
committed
[website] added logic to version switcher
1 parent 0ec1a88 commit abfb6c7

File tree

6 files changed

+78
-21
lines changed

6 files changed

+78
-21
lines changed

website/algoliaConfig.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
11
export const algoliaConfig = {
22
appName: 'PDUJZB0TBK',
33
openKey: '9ad1935d853b24ce3fe9c0039bcf7b40',
4-
mainSearchIndexName: 'intergalactic-docs',
5-
iconsSearchIndexName: 'intergalactic-docs-icons',
6-
illustrationsSearchIndexName: 'intergalactic-docs-illustrations',
74
};

website/algoliaIndexes.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { currentBuildVersion } from './docs/.vitepress/vite.config';
2+
3+
export const algoliaIndexes = {
4+
mainSearchIndexName: `${currentBuildVersion}_intergalactic-docs`,
5+
iconsSearchIndexName: `${currentBuildVersion}_intergalactic-docs-icons`,
6+
illustrationsSearchIndexName: `${currentBuildVersion}_intergalactic-docs-illustrations`,
7+
};

website/docs/.vitepress/buildHooks.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import illustrationsList from '../style/illustration/illustrations-list.js';
1010

1111
import 'dotenv/config';
1212
import { algoliaConfig } from '../../algoliaConfig.js';
13+
import { algoliaIndexes } from '../../algoliaIndexes.js';
1314

1415
const excludeFromSearch = ['a11y-report'];
1516

@@ -158,9 +159,9 @@ const buildEnd: UserConfig<DefaultTheme.Config>['buildEnd'] = async ({ outDir })
158159
if (process.env.CI) {
159160
// await fs.writeFile('search-index.json', JSON.stringify(searchObjects, null, 2));
160161
const client = algoliasearch(algoliaConfig.appName, process.env.ALGOLIA_SECRET_KEY!);
161-
const mainSearchIndex = client.initIndex(algoliaConfig.mainSearchIndexName);
162-
const iconsSearchIndex = client.initIndex(algoliaConfig.iconsSearchIndexName);
163-
const illustrationsSearchIndex = client.initIndex(algoliaConfig.illustrationsSearchIndexName!);
162+
const mainSearchIndex = client.initIndex(algoliaIndexes.mainSearchIndexName);
163+
const iconsSearchIndex = client.initIndex(algoliaIndexes.iconsSearchIndexName);
164+
const illustrationsSearchIndex = client.initIndex(algoliaIndexes.illustrationsSearchIndexName!);
164165

165166
const iconsSearchObjects = iconsList.icons.map((o, i) => ({ objectID: i, ...o }));
166167
const illustrationsSearchObjects = illustrationsList.illustrations.map((o, i) => ({

website/docs/.vitepress/config.ts

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,40 @@
11
import 'dotenv/config';
22

3+
import { resolve as resolvePath } from 'path';
4+
35
import { defineConfig } from 'vitepress';
6+
7+
import { buildHooks } from './buildHooks';
8+
import { figmaIcon } from './figma-icon';
49
import { configureMarkdownIt } from './markdown-it-config';
5-
import { viteConfig } from './vite.config';
610
import { sideBarConfig } from './sidebarConfig';
7-
import { buildHooks } from './buildHooks';
11+
import { viteConfig, currentBuildVersion, LATEST } from './vite.config';
812
import { algoliaConfig } from '../../algoliaConfig';
9-
import { figmaIcon } from './figma-icon';
10-
import { resolve as resolvePath } from 'path';
13+
import { algoliaIndexes } from '../../algoliaIndexes';
1114

15+
const availableVersions = (process.env.AVAILABLE_VERSIONS ?? '').split(',');
1216
const gtmKey = 'GTM-PP7RKT7';
1317

18+
const links = availableVersions.filter((version) => {
19+
return version !== currentBuildVersion;
20+
});
21+
22+
let versions: any = null;
23+
24+
if (links.length > 0) {
25+
versions = {
26+
currentVersion: currentBuildVersion,
27+
items: links.reverse(),
28+
};
29+
}
30+
1431
// https://vitepress.dev/reference/site-config
1532
export default defineConfig({
16-
base: '/intergalactic/',
17-
outDir: resolvePath(__dirname, 'dist/intergalactic/'),
33+
base: viteConfig.base,
34+
outDir: resolvePath(
35+
__dirname,
36+
`dist/intergalactic/${currentBuildVersion !== LATEST ? `${currentBuildVersion}/` : ''}`,
37+
),
1838
title: 'Intergalactic Design System',
1939
description: 'Design System',
2040
markdown: {
@@ -87,7 +107,7 @@ export default defineConfig({
87107
options: {
88108
appId: algoliaConfig.appName,
89109
apiKey: algoliaConfig.openKey,
90-
indexName: algoliaConfig.mainSearchIndexName,
110+
indexName: algoliaIndexes.mainSearchIndexName,
91111
searchParameters: {
92112
attributesToRetrieve: [
93113
'hierarchy',
@@ -103,16 +123,15 @@ export default defineConfig({
103123
},
104124
},
105125
editLink: {
106-
pattern: 'https://github.com/semrush/intergalactic/edit/master/website/docs/:path',
126+
pattern: `https://github.com/semrush/intergalactic/edit/${currentBuildVersion}/website/docs/:path`,
107127
text: 'Edit this page on GitHub',
108128
},
129+
130+
// @ts-ignore. Need this for custom versions switcher
131+
versions,
132+
109133
// https://vitepress.dev/reference/default-theme-config
110134
nav: [
111-
// {
112-
// text: 'Roadmap',
113-
// link: 'https://github.com/orgs/semrush/projects/3/views/2',
114-
// target: '_blank',
115-
// },
116135
{
117136
text: 'Releases',
118137
link: 'https://github.com/semrush/intergalactic/releases',

website/docs/.vitepress/theme/VPNavBarMenu.vue

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,43 @@
11
<script lang="ts" setup>
2-
import { useData } from 'vitepress'
2+
import { computed } from 'vue'
3+
import { useData, useRouter } from 'vitepress';
34
import VPNavBarMenuLink from 'vitepress/dist/client/theme-default/components/VPNavBarMenuLink.vue'
45
import VPNavBarMenuGroup from 'vitepress/dist/client/theme-default/components/VPNavBarMenuGroup.vue'
56
67
const { theme } = useData()
8+
const router = useRouter()
9+
const origin = typeof window !== 'undefined' ? window.location.origin : '';
10+
11+
const versionSwitcherSettings = computed(() => {
12+
if (!theme.value.versions) {
13+
return null;
14+
}
15+
16+
const currentVersion = theme.value.versions.currentVersion;
17+
const path = router.route.path.split('/');
18+
const isVersion = /v[0-9]+\.[0-9]+\.[0-9]+/.test(path[2]);
19+
20+
return {
21+
text: currentVersion,
22+
items: theme.value.versions.items.map((v: string) => {
23+
const link = `${origin}/intergalactic/${v === 'latest' ? '' : `${v}/`}${path.slice(isVersion ? 3 : 2).join('/')}`;
24+
25+
return {
26+
text: v,
27+
target: '_blank',
28+
link,
29+
}
30+
}),
31+
}
32+
33+
});
34+
735
</script>
836

937
<template>
1038
<nav v-if="theme.nav" aria-labelledby="main-nav-aria-label" class="VPNavBarMenu">
1139
<span id="main-nav-aria-label" class="visually-hidden">Main Navigation</span>
40+
<VPNavBarMenuGroup v-if="versionSwitcherSettings" :item="versionSwitcherSettings" />
1241
<template v-for="item in theme.nav" :key="item.text">
1342
<VPNavBarMenuLink v-if="'link' in item" :item="item" />
1443
<VPNavBarMenuGroup v-else :item="item" />

website/docs/.vitepress/vite.config.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,11 @@ import { unpluginStatic } from './unplugins/unplugin-static';
99
import { unpluginIllustrations } from './unplugins/unplugin-illustrations';
1010
import { fileURLToPath, URL } from 'url';
1111

12+
export const LATEST = 'latest';
13+
export const currentBuildVersion = process.env.DOCS_VERSION ?? LATEST;
14+
1215
export const viteConfig = defineConfig({
13-
base: '/intergalactic/',
16+
base: `/intergalactic${currentBuildVersion !== LATEST ? `/${currentBuildVersion}` : ''}/`,
1417
plugins: [
1518
pluginReact({
1619
babel: {
@@ -74,6 +77,7 @@ export const viteConfig = defineConfig({
7477
],
7578
build: {
7679
chunkSizeWarningLimit: 1500,
80+
emptyOutDir: false,
7781
},
7882
resolve: {
7983
alias: [

0 commit comments

Comments
 (0)