Skip to content

Commit 59ca901

Browse files
committed
fix: order by semver for release blog
1 parent b33a5a4 commit 59ca901

File tree

1 file changed

+31
-5
lines changed

1 file changed

+31
-5
lines changed

apps/site/components/withBlogCrossLinks.tsx

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
import type { FC } from 'react';
2+
import semver from 'semver';
23

34
import { getClientContext } from '#site/client-context';
45
import CrossLink from '#site/components/Common/CrossLink';
56
import getBlogData from '#site/next-data/blogData';
67
import type { BlogCategory } from '#site/types';
78

9+
const extractVersionFromTitle = (title: string): string | null => {
10+
const match = title.match(/v(\d+\.\d+\.\d+)/);
11+
return match ? match[1] : null;
12+
};
13+
814
const WithBlogCrossLinks: FC = () => {
915
const { pathname } = getClientContext();
1016

@@ -18,14 +24,34 @@ const WithBlogCrossLinks: FC = () => {
1824

1925
const { posts } = getBlogData(category);
2026

21-
const currentItem = posts.findIndex(
27+
// Sort posts by semver for release category
28+
const sortedPosts =
29+
category === 'release'
30+
? [...posts].sort((a, b) => {
31+
const versionA = extractVersionFromTitle(a.title);
32+
const versionB = extractVersionFromTitle(b.title);
33+
34+
if (versionA && versionB) {
35+
// Sort by semver in descending order (newest first)
36+
return semver.rcompare(versionA, versionB);
37+
}
38+
39+
// Fallback to date sorting if version extraction fails
40+
return b.date.getTime() - a.date.getTime();
41+
})
42+
: posts;
43+
44+
const currentItem = sortedPosts.findIndex(
2245
({ slug }) => slug === `/blog/${category}/${postname}`
2346
);
2447

25-
const [previousCrossLink, nextCrossLink] = [
26-
posts[currentItem - 1],
27-
posts[currentItem + 1],
28-
];
48+
// For release posts sorted by semver (descending):
49+
// - Previous should point to an older version (higher index)
50+
// - Next should point to a newer version (lower index)
51+
const [previousCrossLink, nextCrossLink] =
52+
category === 'release'
53+
? [sortedPosts[currentItem + 1], sortedPosts[currentItem - 1]]
54+
: [sortedPosts[currentItem - 1], sortedPosts[currentItem + 1]];
2955

3056
return (
3157
<div className="max-xs:grid-cols-1 mt-4 grid w-full grid-cols-2 gap-4">

0 commit comments

Comments
 (0)