Skip to content

Commit e7c807a

Browse files
committed
guide page versioning
1 parent d23bfbf commit e7c807a

File tree

12 files changed

+54
-10
lines changed

12 files changed

+54
-10
lines changed

src/components/navigation/sidebars/nav/RootNav.astro

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,18 @@ export interface Props {
66
}
77
88
import { getVersionsData } from "@config/io/generateTypeData";
9+
import { getGuideCollection } from "@config/io/guides";
910
import type { TreeEntry } from "./Tree.astro";
1011
import Tree from "./Tree.astro";
1112
import Link from "./Link.astro";
12-
import { getCollection } from "astro:content";
1313
1414
const versions = await getVersionsData();
1515
const versionName = Astro.params.version;
1616
const modules = versions.versions.find(version => version.name === versionName)?.modules;
1717
1818
const currentPath = Astro.url.pathname.split('/').filter(s => s !== "");
1919
20-
const guidePages = await getCollection("guide");
20+
const guidePages = await getGuideCollection(versionName ?? "");
2121
2222
interface NavTree {
2323
title: string,

src/config/io/guides.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { type CollectionEntry, getCollection } from "astro:content";
2+
import { getVersionsData } from "@config/io/generateTypeData";
3+
4+
// load latest version of each page for version
5+
async function buildGuideCollection(version: string): Promise<CollectionEntry<'guide'>[]> {
6+
const { versions } = await getVersionsData();
7+
const guidePages = await getCollection("guide");
8+
9+
const pages: { [key: string]: CollectionEntry<'guide'> } = {};
10+
11+
for (const currentVersion of versions.toReversed()) {
12+
for (const page of guidePages) {
13+
let [guideVersion, id] = page.id.split('/');
14+
guideVersion = guideVersion.replaceAll('_', '.');
15+
id = id ?? "index";
16+
if (guideVersion !== currentVersion.name) continue;
17+
18+
pages[id] = { ...page, id };
19+
}
20+
21+
if (currentVersion.name === version) break;
22+
}
23+
24+
return Object.values(pages);
25+
}
26+
27+
let guideCollections: { [key: string]: Promise<CollectionEntry<'guide'>[]> } = {};
28+
29+
export async function getGuideCollection(version: string): Promise<CollectionEntry<'guide'>[]> {
30+
if (!(version in guideCollections)) {
31+
guideCollections[version] = buildGuideCollection(version);
32+
}
33+
34+
return guideCollections[version];
35+
}

src/content.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { defineCollection, z } from "astro:content";
22
import { glob } from "astro/loaders";
33

44
const guide = defineCollection({
5-
loader: glob({ pattern: "**/*", base: "src/guide" }),
5+
loader: glob({ pattern: "**/*.md", base: "src/guide" }),
66
schema: z.object({
77
title: z.string(),
88
index: z.number(),
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

src/guide/v0_1_0/lists-models.mdx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
title: "Lists and Models"
3+
index: 2
4+
---
File renamed without changes.

0 commit comments

Comments
 (0)