aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/data-utils.ts54
-rw-r--r--src/lib/utils.ts10
2 files changed, 64 insertions, 0 deletions
diff --git a/src/lib/data-utils.ts b/src/lib/data-utils.ts
index f6e566a..ab0176f 100644
--- a/src/lib/data-utils.ts
+++ b/src/lib/data-utils.ts
@@ -21,6 +21,25 @@ export async function getAllPostsAndSubposts(): Promise<
.sort((a, b) => b.data.date.valueOf() - a.data.date.valueOf())
}
+export async function getAllEvents(): Promise<CollectionEntry<'events'>[]> {
+ const events = await getCollection('events')
+ return events
+ .sort((a, b) => b.data.date.valueOf() - a.data.date.valueOf())
+}
+
+export function groupEventsByYear(
+ events: CollectionEntry<'events'>[],
+): Record<string, CollectionEntry<'events'>[]> {
+ return events.reduce(
+ (acc: Record<string, CollectionEntry<'events'>[]>, post) => {
+ const year = post.data.date.getFullYear().toString()
+ ;(acc[year] ??= []).push(post)
+ return acc
+ },
+ {},
+ )
+}
+
export async function getAllProjects(): Promise<CollectionEntry<'projects'>[]> {
const projects = await getCollection('projects')
return projects.sort((a, b) => {
@@ -40,6 +59,14 @@ export async function getAllTags(): Promise<Map<string, number>> {
}, new Map<string, number>())
}
+export async function getAllTypes(): Promise<Map<string, number>> {
+ const events = await getAllEvents()
+ return events.reduce((acc, event) => {
+ acc.set(event.data.type, (acc.get(event.data.type) || 0) + 1)
+ return acc
+ }, new Map<string, number>())
+}
+
export async function getAdjacentPosts(currentId: string): Promise<{
newer: CollectionEntry<'blog'> | null
older: CollectionEntry<'blog'> | null
@@ -99,6 +126,19 @@ export async function getAdjacentPosts(currentId: string): Promise<{
}
}
+export async function getAdjacentEvents(currentId: string): Promise<{
+ newer: CollectionEntry<'events'> | null
+ older: CollectionEntry<'events'> | null
+ parent: CollectionEntry<'events'> | null
+}> {
+ const allEvents = await getAllEvents()
+ const currentIndex = allEvents.findIndex((event) => event.id === currentId)
+ const newer = currentIndex > 0 ? allEvents[currentIndex - 1] : null
+ const older =
+ currentIndex < allEvents.length - 1 ? allEvents[currentIndex + 1] : null
+ return { newer, older, parent: null }
+}
+
export async function getPostsByAuthor(
authorId: string,
): Promise<CollectionEntry<'blog'>[]> {
@@ -113,6 +153,13 @@ export async function getPostsByTag(
return posts.filter((post) => post.data.tags?.includes(tag))
}
+export async function getEventsByType(
+ type: string,
+): Promise<CollectionEntry<'events'>[]> {
+ const events = await getAllEvents()
+ return events.filter((event) => event.data.type === type)
+}
+
export async function getRecentPosts(
count: number,
): Promise<CollectionEntry<'blog'>[]> {
@@ -120,6 +167,13 @@ export async function getRecentPosts(
return posts.slice(0, count)
}
+export async function getRecentEvents(
+ count: number,
+): Promise<CollectionEntry<'events'>[]> {
+ const events = await getAllEvents()
+ return events.slice(0, count)
+}
+
export async function getSortedTags(): Promise<
{ tag: string; count: number }[]
> {
diff --git a/src/lib/utils.ts b/src/lib/utils.ts
index d4d8119..e2e005b 100644
--- a/src/lib/utils.ts
+++ b/src/lib/utils.ts
@@ -35,3 +35,13 @@ export function getHeadingMargin(depth: number): string {
}
return margins[depth] || ''
}
+export function capitalizeFirstLetter(val: string): string {
+ return String(val).charAt(0).toUpperCase() + String(val).slice(1);
+}
+
+export const iconMappings = {
+ "workshop": "lucide:hammer",
+ "competition": "lucide:trophy",
+ "game": "lucide:gamepad-2",
+ "quiz": "lucide:brain"
+}