mirror of
https://github.com/kogakure/website-astro-stefanimhoff.de.git
synced 2026-02-03 20:15:27 +00:00
61 lines
1.3 KiB
TypeScript
61 lines
1.3 KiB
TypeScript
import { sortByAlphabet, sortByDate } from '.';
|
|
|
|
import type { CollectionEntry } from 'astro:content';
|
|
|
|
export const formatPosts = (
|
|
posts: CollectionEntry<'journal'>[],
|
|
{
|
|
removeDrafts = true,
|
|
removeFuture = true,
|
|
showFeatured,
|
|
sortBy = 'date',
|
|
sortOrder = 'desc',
|
|
limit,
|
|
}: {
|
|
removeDrafts?: boolean;
|
|
removeFuture?: boolean;
|
|
showFeatured?: boolean;
|
|
sortBy?: 'date' | 'alphabet' | 'random';
|
|
sortOrder?: 'asc' | 'desc';
|
|
limit?: number;
|
|
}
|
|
): CollectionEntry<'journal'>[] => {
|
|
const filteredPosts = posts.reduce((acc: CollectionEntry<'journal'>[], post) => {
|
|
const { date, draft, featured } = post.data;
|
|
|
|
// Remove draft content
|
|
if (removeDrafts && draft) return acc;
|
|
|
|
// Remove future content
|
|
if (removeFuture && new Date(date) > new Date()) return acc;
|
|
|
|
// Show featured only
|
|
if (showFeatured && !featured) 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;
|
|
};
|