From 4c3b66b2b5101a5b7a1ed301253e9f1252bf6468 Mon Sep 17 00:00:00 2001 From: sianida26 Date: Tue, 25 Jun 2024 02:52:40 +0700 Subject: [PATCH] Added render cell on timeline --- .../src/components/Timetable/DayColumn.tsx | 137 +++++++++++------- .../src/components/Timetable/Timetable.tsx | 10 +- 2 files changed, 90 insertions(+), 57 deletions(-) diff --git a/apps/frontend/src/components/Timetable/DayColumn.tsx b/apps/frontend/src/components/Timetable/DayColumn.tsx index f6e2d28..5108584 100644 --- a/apps/frontend/src/components/Timetable/DayColumn.tsx +++ b/apps/frontend/src/components/Timetable/DayColumn.tsx @@ -11,9 +11,16 @@ type Props = { startTime: dayjs.Dayjs; endTime: dayjs.Dayjs; events: Event[]; + renderCell?: (events: Event[]) => JSX.Element; }; -export default function DayColumn({ day, startTime, endTime, events }: Props) { +export default function DayColumn({ + day, + startTime, + endTime, + events, + renderCell, +}: Props) { const isToday = day.isSame(dayjs(), "day"); return ( @@ -32,62 +39,84 @@ export default function DayColumn({ day, startTime, endTime, events }: Props) { const currentDateTime = day.hour(startTime.hour() + i); return ( - + // 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}%`, + }} + > + {event.title} + + ) : ( +
+ ) + )} + + )} + ); })} diff --git a/apps/frontend/src/components/Timetable/Timetable.tsx b/apps/frontend/src/components/Timetable/Timetable.tsx index 7e563e4..80388f7 100644 --- a/apps/frontend/src/components/Timetable/Timetable.tsx +++ b/apps/frontend/src/components/Timetable/Timetable.tsx @@ -13,14 +13,17 @@ dayjs.extend(isoWeek); dayjs.extend(customParseFormat); type Props = { + startTime?: dayjs.Dayjs; + endTime?: dayjs.Dayjs; events: Event[]; + renderCell?: (events: Event[]) => JSX.Element; }; -export default function Timetable({ events }: Props) { +export default function Timetable({ events, ...props }: Props) { const [currentDate, setCurrentDate] = useState(dayjs()); - const startTime = dayjs("08:00", "HH:mm"); - const endTime = dayjs("18:00", "HH:mm"); + const startTime = props.startTime ?? dayjs("08:00", "HH:mm"); + const endTime = props.endTime ?? dayjs("18:00", "HH:mm"); const weekDays = useMemo(() => { const startOfWeek = currentDate.startOf("isoWeek"); @@ -90,6 +93,7 @@ export default function Timetable({ events }: Props) { events={eventPerDay[i]} startTime={startTime} endTime={endTime} + renderCell={props.renderCell} /> ))}