move calendar day into its own component

This commit is contained in:
2024-05-13 02:43:04 +02:00
parent 0bf6e00a81
commit 79c7b8ba43

View File

@ -5,6 +5,7 @@ import { EventItem } from "./EventItem";
import { EventFilter } from "./EventFilter"; import { EventFilter } from "./EventFilter";
import { import {
EventFragment, EventFragment,
SingularEvent,
getSingularEvents, getSingularEvents,
organizeEventsByDate, organizeEventsByDate,
} from "@/lib/event"; } from "@/lib/event";
@ -13,8 +14,6 @@ import styles from "./eventContainer.module.scss";
import { formatDate, formatYearMonth } from "@/lib/date"; import { formatDate, formatYearMonth } from "@/lib/date";
import { getYear, parse } from "date-fns"; import { getYear, parse } from "date-fns";
type EventContainerMode = "list" | "calendar";
export const EventContainer = ({ events }: { events: EventFragment[] }) => { export const EventContainer = ({ events }: { events: EventFragment[] }) => {
const [mode, setMode] = useQueryState( const [mode, setMode] = useQueryState(
"mode", "mode",
@ -45,6 +44,25 @@ const EventList = ({ events }: { events: EventFragment[] }) => {
); );
}; };
const CalendarDay = ({
day,
events,
}: {
day: string;
events: SingularEvent[];
}) => (
<div
className={`${styles.calendarDay} ${events.length === 0 && styles.empty}`}
>
<h3>{formatDate(parse(day, "yyyy-MM-dd", new Date()), "eeee dd.MM.")}</h3>
<ul>
{events.map((event) => (
<EventItem key={event.id} event={event} mode="calendar" size="small" />
))}
</ul>
</div>
);
const EventCalendar = ({ events }: { events: EventFragment[] }) => { const EventCalendar = ({ events }: { events: EventFragment[] }) => {
const futureSingularEvents = getSingularEvents(events).filter( const futureSingularEvents = getSingularEvents(events).filter(
(x) => x.occurrence?.start && isTodayOrFuture(x.occurrence.start) (x) => x.occurrence?.start && isTodayOrFuture(x.occurrence.start)
@ -60,31 +78,12 @@ const EventCalendar = ({ events }: { events: EventFragment[] }) => {
{Object.keys(eventsByDate[yearMonth]).map((week) => ( {Object.keys(eventsByDate[yearMonth]).map((week) => (
<div key={week} className={styles.calendarWeek}> <div key={week} className={styles.calendarWeek}>
{Object.keys(eventsByDate[yearMonth][week]).map((day) => ( {Object.keys(eventsByDate[yearMonth][week]).map((day) => (
<div <CalendarDay
key={day} key={day}
className={`${styles.calendarDay} ${ day={day}
eventsByDate[yearMonth][week][day].length === 0 && events={eventsByDate[yearMonth][week][day]}
styles.empty
}`}
>
<h3>
{formatDate(
parse(day, "yyyy-MM-dd", new Date()),
"eeee dd.MM."
)}
</h3>
<ul>
{eventsByDate[yearMonth][week][day].map((event) => (
<EventItem
key={event.id}
event={event}
mode="calendar"
size="small"
/> />
))} ))}
</ul>
</div>
))}
</div> </div>
))} ))}
</div> </div>