feat: add helper to sort journal posts

This commit is contained in:
Stefan Imhoff
2023-06-09 18:35:09 +02:00
parent c70a25ae6d
commit d2a9d9193c
3 changed files with 60 additions and 0 deletions

55
src/utils/format-posts.ts Normal file
View File

@@ -0,0 +1,55 @@
import { sortByAlphabet, sortByDate } from '.';
import type { CollectionEntry } from 'astro:content';
export const formatPosts = (
posts: CollectionEntry<'journal'>[],
{
removeDrafts = true,
removeFuture = true,
sortBy = 'date',
sortOrder = 'desc',
limit,
}: {
removeDrafts?: boolean;
removeFuture?: boolean;
sortBy?: 'date' | 'alphabet' | 'random';
sortOrder?: 'asc' | 'desc';
limit?: number;
}
): CollectionEntry<'journal'>[] => {
const filteredPosts = posts.reduce((acc: CollectionEntry<'journal'>[], post) => {
const { date, draft } = post.data;
// Remove draft content
if (removeDrafts && draft) return acc;
// Remove future content
if (removeFuture && new Date(date) > new Date()) return acc;
acc.push(post);
return acc;
}, []);
// Sort posts
if (sortBy === 'date') {
filteredPosts.sort(sortByDate);
} else if (sortBy === 'alphabet') {
filteredPosts.sort(sortByAlphabet);
} else {
filteredPosts.sort(() => Math.random() - 0.5);
}
// Sort order
if (sortOrder === 'asc') {
filteredPosts.reverse();
}
// Limit number of posts
if (typeof limit === 'number') {
return filteredPosts.slice(0, limit);
}
return filteredPosts;
};

View File

@@ -1,6 +1,8 @@
export * from './date'; export * from './date';
export * from './format-posts';
export * from './pick-two-random-colors'; export * from './pick-two-random-colors';
export * from './remark-reading-time'; export * from './remark-reading-time';
export * from './sort-by-alphabet';
export * from './sort-by-date'; export * from './sort-by-date';
export * from './sort-by-sortkey'; export * from './sort-by-sortkey';
export * from './word-count'; export * from './word-count';

View File

@@ -0,0 +1,3 @@
export const sortByAlphabet = (a: any, b: any) => {
return a.data.title.localeCompare(b.data.title);
};