From 53f29bac911b13b2bef0125de22773bf26ce5a90 Mon Sep 17 00:00:00 2001 From: Joe Carstairs Date: Tue, 15 Aug 2023 19:15:27 +0100 Subject: Adds homepage --- src/lib/newsUtils.ts | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/lib/newsUtils.ts (limited to 'src/lib') diff --git a/src/lib/newsUtils.ts b/src/lib/newsUtils.ts new file mode 100644 index 0000000..ededb52 --- /dev/null +++ b/src/lib/newsUtils.ts @@ -0,0 +1,35 @@ +import type Locale from '$types/Locale'; +import { CollectionEntry, getCollection } from 'astro:content'; + +export async function getMostRecentNewsItem(locale: Locale) { + const allNews = await getCollection('news'); + const allNewsInLocale = allNews.filter((item) => isNewsItemInLocale(item, locale)); + const someNewsItem = allNewsInLocale.at(0); + if (!someNewsItem) { + return null; + } + return allNewsInLocale.reduce((prev, curr) => (isBefore(curr, prev) ? curr : prev), someNewsItem); +} + +export function isNewsItemInLocale(newsItem: CollectionEntry<'news'>, locale: Locale) { + const srcPath = newsItem.id; + const newsItemLocale = srcPath.slice(0, srcPath.indexOf('/')); + return newsItemLocale === locale; +} + +function isBefore(item1: CollectionEntry<'news'>, item2: CollectionEntry<'news'>) { + const date1 = dateOf(item1); + const date2 = dateOf(item2); + if (!date2) { + return false; + } + if (!date1) { + return true; + } + return date1.valueOf() < date2.valueOf(); +} + +function dateOf(newsItem: CollectionEntry<'news'>) { + const match = newsItem.id.match(/(?<=(en-GB|sco))\/(\d\d\d\d-\d\d-\d\d)/)?.[2]; + return match ? new Date(match) : null; +} -- cgit v1.2.3