church-website/src/app/gebetsanliegen-des-papstes/[year]/[month]/page.tsx
2025-02-03 09:11:11 +01:00

144 lines
No EOL
3.1 KiB
TypeScript

import { Section } from '@/components/Section/Section'
import { fetchPopePrayerIntentions } from '@/fetch/popePrayerIntentions'
import { Container } from '@/components/Container/Container'
import { Title } from '@/components/Title/Title'
import { P } from '@/components/Text/Paragraph'
import { PageHeader } from '@/compositions/PageHeader/PageHeader'
import { NextPrevButtons } from '@/components/NextPrevButtons/NextPrevButtons'
import { notFound } from 'next/navigation'
const months: Record<string, string> = {
"01": "Januar",
"02": "Februar",
"03": "März",
"04": "April",
"05": "Mai",
"06": "Juni",
"07": "Juli",
"08": "August",
"09": "September",
"10": "Oktober",
"11": "November",
"12": "Dezember",
}
const getMonthAsString = (month: string): string => {
if (months.hasOwnProperty(month)) {
return months[month];
}
return "Unknown";
}
/**
* Get next month
* eg: "12" => "01"
*
* @param month
*/
function nextMonth(month: string) {
let monthNumber = parseInt(month, 10);
monthNumber++;
if (monthNumber > 12) {
monthNumber = 1;
}
return monthNumber.toString().padStart(2, '0');
}
/**
* Get previous month
* eg: "03" => "02"
*
* @param month
*/
function prevMonth(month: string) {
let monthNumber = parseInt(month, 10);
monthNumber--;
if (monthNumber == 0) {
monthNumber = 12;
}
return monthNumber.toString().padStart(2, '0');
}
/**
* Get next url
*
* @param year
* @param month
*/
function nextUrl(year: number, month: string) {
const next = nextMonth(month);
if (next == "01") {
year++;
}
return `/gebetsanliegen-des-papstes/${year}/${next}`;
}
/**
* Get previous url
*
* @param year
* @param month
*/
function prevUrl(year: number, month: string) {
const prev = prevMonth(month);
if (prev == "12") {
year--;
}
return `/gebetsanliegen-des-papstes/${year}/${prev}`;
}
export default async function PrayerIntentionPage({ params }: { params: Promise<{year: string, month: string}>}) {
const {year, month} = await params;
const yearInt = parseInt(year, 10);
let prayer = await fetchPopePrayerIntentions(yearInt, month)
const monthString = getMonthAsString(month)
if(!prayer) {
notFound();
}
return (
<>
<PageHeader
title={"Gebetsanliegen des Papstes"}
description={"Der Papst lädt uns ein, uns mit ihm im Gebet zu verbinden und gemeinsam die Welt vor Gott zu tragen."}
/>
<Section padding={"small"}>
<Container>
<Title
color={"contrast"}
title={`${monthString} ${year}: ${prayer.title}`}
size={"sm"}
/>
<P width={"3/4"}>
{ prayer.prayer}
</P>
</Container>
</Section>
<Section>
</Section>
<Section padding={"small"}>
<NextPrevButtons
prev={{
href: prevUrl(yearInt, month),
text: getMonthAsString(prevMonth(month))
}}
next={{
href: nextUrl(yearInt, month),
text: getMonthAsString(nextMonth(month))
}}
/>
</Section>
</>
)
}