From 925695e46f5651ec22f2e0f42e0824c7df899c0c Mon Sep 17 00:00:00 2001 From: Kevin Hidalgo Date: Thu, 19 Mar 2026 15:30:17 -0500 Subject: [PATCH 1/2] Implemented bare component --- .../schedule/ScheduleTimelineBare.tsx | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 apps/web/src/components/schedule/ScheduleTimelineBare.tsx diff --git a/apps/web/src/components/schedule/ScheduleTimelineBare.tsx b/apps/web/src/components/schedule/ScheduleTimelineBare.tsx new file mode 100644 index 00000000..459201a9 --- /dev/null +++ b/apps/web/src/components/schedule/ScheduleTimelineBare.tsx @@ -0,0 +1,74 @@ +import { type EventType as Event } from "@/lib/types/events"; +import { getClientTimeZone } from "@/lib/utils/client/shared"; +import c from "config"; +import { ReactNode } from "react"; + +const daysOfWeek = [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday", +]; + +function splitByDay(schedule: Event[]) { + const days: Map = new Map(); + schedule.forEach((event) => { + const day = daysOfWeek[event.startTime.getDay()]; + const existing = days.get(day); + if (existing) existing.push(event); + else days.set(day, [event]); + }); + return days; +} + +type DayHeaderProps = { dayName: string }; +const DefaultDayHeader = ({ dayName }: DayHeaderProps) => ( + + +

+ {dayName} +

+ + +); + +type RowProps = { event: Event; userTimeZone: string }; + +export default function ScheduleTimelineBare({ + schedule, + timezone, + DayHeader = DefaultDayHeader, + RenderEventRow, +}: { + schedule: Event[]; + timezone?: string; + DayHeader?: React.ComponentType; + RenderEventRow: React.ComponentType; +}) { + const userTimeZone = timezone ?? getClientTimeZone(c.hackathonTimezone); + const days = Array.from(splitByDay(schedule).entries()); + + return ( +
+ + + {days.map(([dayName, arr]): ReactNode => ( + <> + + {arr.map((event) => ( + + ))} + + ))} + +
+
+ ); +} \ No newline at end of file From 9639ad4fa6e8785f33ee03087ae464006c5e1efd Mon Sep 17 00:00:00 2001 From: ExistentialKevin Date: Thu, 19 Mar 2026 19:08:59 -0500 Subject: [PATCH 2/2] Formatted w/ Prettier --- .../schedule/ScheduleTimelineBare.tsx | 106 +++++++++--------- 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/apps/web/src/components/schedule/ScheduleTimelineBare.tsx b/apps/web/src/components/schedule/ScheduleTimelineBare.tsx index 459201a9..25bd872a 100644 --- a/apps/web/src/components/schedule/ScheduleTimelineBare.tsx +++ b/apps/web/src/components/schedule/ScheduleTimelineBare.tsx @@ -4,71 +4,71 @@ import c from "config"; import { ReactNode } from "react"; const daysOfWeek = [ - "Sunday", - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday", + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday", ]; function splitByDay(schedule: Event[]) { - const days: Map = new Map(); - schedule.forEach((event) => { - const day = daysOfWeek[event.startTime.getDay()]; - const existing = days.get(day); - if (existing) existing.push(event); - else days.set(day, [event]); - }); - return days; + const days: Map = new Map(); + schedule.forEach((event) => { + const day = daysOfWeek[event.startTime.getDay()]; + const existing = days.get(day); + if (existing) existing.push(event); + else days.set(day, [event]); + }); + return days; } type DayHeaderProps = { dayName: string }; const DefaultDayHeader = ({ dayName }: DayHeaderProps) => ( - - -

- {dayName} -

- - + + +

{dayName}

+ + ); type RowProps = { event: Event; userTimeZone: string }; export default function ScheduleTimelineBare({ - schedule, - timezone, - DayHeader = DefaultDayHeader, - RenderEventRow, + schedule, + timezone, + DayHeader = DefaultDayHeader, + RenderEventRow, }: { - schedule: Event[]; - timezone?: string; - DayHeader?: React.ComponentType; - RenderEventRow: React.ComponentType; + schedule: Event[]; + timezone?: string; + DayHeader?: React.ComponentType; + RenderEventRow: React.ComponentType; }) { - const userTimeZone = timezone ?? getClientTimeZone(c.hackathonTimezone); - const days = Array.from(splitByDay(schedule).entries()); + const userTimeZone = timezone ?? getClientTimeZone(c.hackathonTimezone); + const days = Array.from(splitByDay(schedule).entries()); - return ( -
- - - {days.map(([dayName, arr]): ReactNode => ( - <> - - {arr.map((event) => ( - - ))} - - ))} - -
-
- ); -} \ No newline at end of file + return ( +
+ + + {days.map( + ([dayName, arr]): ReactNode => ( + <> + + {arr.map((event) => ( + + ))} + + ), + )} + +
+
+ ); +}