From 96412d49f7b19e119ed716484acea696e6c9b24f Mon Sep 17 00:00:00 2001 From: sianida26 Date: Tue, 25 Jun 2024 03:25:22 +0700 Subject: [PATCH] Added custom render event on timetable --- .../src/components/Timetable/DayColumn.tsx | 99 ++++++++++--------- .../src/components/Timetable/Timetable.tsx | 2 + 2 files changed, 55 insertions(+), 46 deletions(-) diff --git a/apps/frontend/src/components/Timetable/DayColumn.tsx b/apps/frontend/src/components/Timetable/DayColumn.tsx index 5108584..c0f831d 100644 --- a/apps/frontend/src/components/Timetable/DayColumn.tsx +++ b/apps/frontend/src/components/Timetable/DayColumn.tsx @@ -12,6 +12,7 @@ type Props = { endTime: dayjs.Dayjs; events: Event[]; renderCell?: (events: Event[]) => JSX.Element; + renderEvent?: (event: Event) => JSX.Element; }; export default function DayColumn({ @@ -20,6 +21,7 @@ export default function DayColumn({ endTime, events, renderCell, + renderEvent, }: Props) { const isToday = day.isSame(dayjs(), "day"); @@ -40,7 +42,7 @@ export default function DayColumn({ return ( // Base Cell -
+
{renderCell ? (
{renderCell( @@ -66,56 +68,61 @@ export default function DayColumn({ )}
) : ( -
- {events - .filter((event) => { - return ( - currentDateTime.isSame( - event.start, - "hour" - ) || - (currentDateTime.isAfter( - event.start - ) && - currentDateTime.isBefore( - event.end - )) - ); - }) - .map((event, i) => + + )} + + {/* Events Container */} +
+ {events + .filter((event) => { + return ( currentDateTime.isSame( event.start, "hour" - ) ? ( -
+ currentDateTime.isSame( + event.start, + "hour" + ) ? ( +
- {event.title} -
- ) : ( -
- ) - )} -
- )} + // The top position is calculated from the start minute of the event, converted to a percentage of an hour + top: `${(event.start.minute() * 100) / 60}%`, + }} + > + {renderEvent ? ( + renderEvent(event) + ) : ( + + )} +
+ ) : ( +
+ ) + )} +
); })} diff --git a/apps/frontend/src/components/Timetable/Timetable.tsx b/apps/frontend/src/components/Timetable/Timetable.tsx index 80388f7..c4d01c4 100644 --- a/apps/frontend/src/components/Timetable/Timetable.tsx +++ b/apps/frontend/src/components/Timetable/Timetable.tsx @@ -17,6 +17,7 @@ type Props = { endTime?: dayjs.Dayjs; events: Event[]; renderCell?: (events: Event[]) => JSX.Element; + renderEvent?: (event: Event) => JSX.Element; }; export default function Timetable({ events, ...props }: Props) { @@ -94,6 +95,7 @@ export default function Timetable({ events, ...props }: Props) { startTime={startTime} endTime={endTime} renderCell={props.renderCell} + renderEvent={props.renderEvent} /> ))}