diff options
| author | Joe Carstairs <65492573+Sycamost@users.noreply.github.com> | 2023-12-17 14:06:23 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-12-17 14:06:23 +0000 |
| commit | fe9844b8eac1daf3eeedf141e223d0733c892fa0 (patch) | |
| tree | e89ac30c35b3cd518c563db965fd44197cf0a6a0 /src/lib/newsUtils.ts | |
| parent | 250152cc1b6a67bd18f4b211856fa98ec06d8eda (diff) | |
Update production from staging (#48)
* Edit README (#28)
* Corrects Lallans instructions
* Adds instructions for adding a Scotsoun release
* Documents infrastructure
* Better contribution guidance
* Update README (#29)
* Updates references to branch names in README
* ESLint ignores Markdown
* Documents Coding Style
* Specifies upstream branch in README where salient
* Fixes Sangschaw winners list in Eiks 30 (#35)
* Fixes Sangschaw winners list in Eiks 30 (#36)
* Fixes Sangschaw winners list in Eiks 30 (#38)
* Eiks 31 (#41)
* Eiks 31
* Prettier dl's
* Prettier headings
---------
Co-authored-by: Joe Carstairs <jcarstairs@scottlogic.com>
* Reorder news (#42)
* Reslugs news items
* Fixes typo in getMostRecentNewsItem()
* Fixes typo in newUtils.getDate()
* Sorts news index from most recent to oldest
* Eiks 31 fixes (#43)
* Eiks 31 fixes
* Improves list styling
* Links to Leid title track on YouTube (#45)
* Eiks 31 fixes (#47)
* Links to Leid title track on YouTube
* Corrects Sangschaw pricing
* Update production (#37) (#49)
* Edit README (#28)
* Corrects Lallans instructions
* Adds instructions for adding a Scotsoun release
* Documents infrastructure
* Better contribution guidance
* Update README (#29)
* Updates references to branch names in README
* ESLint ignores Markdown
* Documents Coding Style
* Specifies upstream branch in README where salient
* Fixes Sangschaw winners list in Eiks 30 (#35)
* Fixes Sangschaw winners list in Eiks 30 (#36)
* Fixes Sangschaw winners list in Eiks 30 (#38)
---------
Co-authored-by: Joe Carstairs <jcarstairs@scottlogic.com>
Diffstat (limited to 'src/lib/newsUtils.ts')
| -rw-r--r-- | src/lib/newsUtils.ts | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/lib/newsUtils.ts b/src/lib/newsUtils.ts index aa711e3..bffc7d6 100644 --- a/src/lib/newsUtils.ts +++ b/src/lib/newsUtils.ts @@ -1,5 +1,6 @@ +import locales from '$i18n/locales'; import type Locale from '$types/Locale'; -import { CollectionEntry, getCollection } from 'astro:content'; +import { getCollection, type CollectionEntry } from 'astro:content'; export async function getMostRecentNewsItem(locale: Locale) { const allNews = await getCollection('news'); @@ -8,7 +9,7 @@ export async function getMostRecentNewsItem(locale: Locale) { if (!someNewsItem) { return null; } - return allNewsInLocale.reduce((prev, curr) => (isBefore(curr, prev) ? curr : prev), someNewsItem); + return allNewsInLocale.reduce((prev, curr) => (isBefore(prev, curr) ? curr : prev), someNewsItem); } export function getLocale(newsItem: CollectionEntry<'news'>) { @@ -18,7 +19,13 @@ export function getLocale(newsItem: CollectionEntry<'news'>) { export function getHref(newsItem: CollectionEntry<'news'>) { const locale = getLocale(newsItem); - return `/${locale}/news/${newsItem.slug.replace('/', '-')}`; + return `/${locale}/news/${getSlug(newsItem)}`; +} + +export function getSlug(newsItem: CollectionEntry<'news'>) { + const toLowerCase = (s: string) => s.toLowerCase(); + const matchLocales = new RegExp(`(${locales.map(toLowerCase).join('|')})/`); + return newsItem.slug.replace(matchLocales, ''); } export function isNewsItemInLocale(newsItem: CollectionEntry<'news'>, locale: Locale) { @@ -26,7 +33,7 @@ export function isNewsItemInLocale(newsItem: CollectionEntry<'news'>, locale: Lo return newsItemLocale === locale; } -function isBefore(item1: CollectionEntry<'news'>, item2: CollectionEntry<'news'>) { +export function isBefore(item1: CollectionEntry<'news'>, item2: CollectionEntry<'news'>) { const date1 = getDate(item1); const date2 = getDate(item2); if (!date2) { @@ -39,6 +46,7 @@ function isBefore(item1: CollectionEntry<'news'>, item2: CollectionEntry<'news'> } export function getDate(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; + const matchDate = new RegExp(`(${locales.join('|')})/(\\d\\d\\d\\d-\\d\\d-\\d\\d)`); + const date = newsItem.id.match(matchDate)?.[2]; + return date ? new Date(date) : null; } |
