Skip to content

Commit 44b1ad1

Browse files
committed
[website] added logic to version switcher
1 parent 74866cd commit 44b1ad1

File tree

6 files changed

+78
-25
lines changed

6 files changed

+78
-25
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: 35 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,41 @@
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/'),
18-
title: 'Intergalactic',
33+
base: viteConfig.base,
34+
outDir: resolvePath(
35+
__dirname,
36+
`dist/intergalactic/${currentBuildVersion !== LATEST ? `${currentBuildVersion}/` : ''}`,
37+
),
38+
title: 'Intergalactic Design System',
1939
description: 'Design System',
2040
markdown: {
2141
config(md) {
@@ -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',
@@ -131,12 +150,12 @@ export default defineConfig({
131150
{
132151
icon: 'github',
133152
link: 'https://github.com/semrush/intergalactic',
134-
ariaLabel: 'Go to GitHub repository',
153+
ariaLabel: 'GitHub repository',
135154
},
136155
{
137156
icon: { svg: figmaIcon },
138157
link: 'https://figma.com/@semrush',
139-
ariaLabel: 'Go to Intergalactic Design System Figma libraries',
158+
ariaLabel: 'Figma libraries',
140159
},
141160
],
142161
},

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

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,42 @@
11
<script lang="ts" setup>
2-
import { useData } from 'vitepress'
2+
import { computed } from 'vue'
3+
import { useData } 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
import VPFlyout from 'vitepress/dist/client/theme-default/components/VPFlyout.vue'
67
import PreferenceSwitch from './PreferenceSwitch.vue';
78
import { preferSemcoreUi } from './preferences'
89
9-
const { theme } = useData()
10+
const { theme, page } = useData()
11+
12+
const versionSwitcherSettings = computed(() => {
13+
if (!theme.value.versions) {
14+
return null;
15+
}
16+
17+
const currentVersion = theme.value.versions.currentVersion;
18+
19+
return {
20+
text: currentVersion,
21+
items: theme.value.versions.items.map((v: string) => {
22+
const link = `${window.location.origin}/intergalactic/${v === 'latest' ? '' : `${v}/`}${page.value.relativePath}`;
23+
24+
return {
25+
text: v,
26+
target: '_blank',
27+
link,
28+
}
29+
}),
30+
}
31+
32+
});
33+
1034
</script>
1135

1236
<template>
1337
<nav v-if="theme.nav" aria-labelledby="main-nav-aria-label" class="VPNavBarMenu">
1438
<span id="main-nav-aria-label" class="visually-hidden">Main Navigation</span>
39+
<VPNavBarMenuGroup v-if="versionSwitcherSettings" :item="versionSwitcherSettings" />
1540
<template v-for="item in theme.nav" :key="item.text">
1641
<VPNavBarMenuLink v-if="'link' in item" :item="item" />
1742
<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
createUnplugin<{}>(() => ({
@@ -62,6 +65,7 @@ export const viteConfig = defineConfig({
6265
],
6366
build: {
6467
chunkSizeWarningLimit: 1500,
68+
emptyOutDir: false,
6569
},
6670
resolve: {
6771
alias: [

0 commit comments

Comments
 (0)