From ab2bc3c7efe6a09eba70d66c66dff3af7bae4208 Mon Sep 17 00:00:00 2001 From: Noe Terrier Date: Mon, 20 Jan 2025 20:41:54 +0100 Subject: [PATCH] style: styling ICBD timetable and page for mobile --- directus | 2 +- src/components/Timetable.tsx | 111 ++++++++-------- src/pages/icbd.tsx | 22 ++-- src/styles/ICBDPage.module.scss | 6 + src/styles/Page.module.scss | 2 + src/styles/Timetable.module.scss | 182 ++++++++++++++++----------- src/styles/utilities/_variables.scss | 3 +- 7 files changed, 195 insertions(+), 133 deletions(-) diff --git a/directus b/directus index 291059f..ba40113 160000 --- a/directus +++ b/directus @@ -1 +1 @@ -Subproject commit 291059f9d85a367c76c93d85c23cc7e4f77df4b4 +Subproject commit ba40113649d9ac92ba83606b2e3ae7a0b732a9e9 diff --git a/src/components/Timetable.tsx b/src/components/Timetable.tsx index 756c6f7..833c8d8 100644 --- a/src/components/Timetable.tsx +++ b/src/components/Timetable.tsx @@ -16,25 +16,37 @@ function timeToMinutes(time: string) { return hours * 60 + minutes + seconds / 60; } -function Hours(props: { startTime: number; endTime: number }) { - let startHour = props.startTime / 60; - const endHour = props.endTime / 60; +function generateHourEntries( + startTime: number, + endTime: number, + isLine: boolean +) { + const startHour = startTime / 60; + const endHour = endTime / 60; const numberOfHours = endHour - startHour; - let hours: any[] = []; + return Array.from({ length: numberOfHours + 1 }, (_, i) => { + const hour = startHour + i; + const style = hour === endHour ? {} : { height: `${100 / numberOfHours}%` }; - for (; startHour <= endHour; startHour++) { - let style = - startHour == endHour ? {} : { height: `${100 / numberOfHours}%` }; - hours.push( -
- -

{`${startHour}h`}

+ return isLine ? ( + + ) : ( +
+

{`${hour}h`}

); - } + }); +} + +function Lines(props: { startTime: number; endTime: number }) { + const lines = generateHourEntries(props.startTime, props.endTime, true); + return
{lines}
; +} - return <>{hours}; +function Hours(props: { startTime: number; endTime: number }) { + const hours = generateHourEntries(props.startTime, props.endTime, false); + return
{hours}
; } function TimeTableEvent(props: { @@ -119,17 +131,14 @@ export function Timetable(props: { activities: ICBDActivity[] }) { JSON.stringify(activity.timeslots) ); - timeslots.forEach((timeslot) => { - let tStartTime = timeToMinutes(timeslot.start_time); + timeslots.forEach(({ start_time, end_time, room }) => { + let tStartTime = timeToMinutes(start_time); startTime = Math.min(tStartTime, startTime); - let tEndTime = timeToMinutes(timeslot.end_time); + let tEndTime = timeToMinutes(end_time); endTime = Math.max(tEndTime, endTime); - let groupKey = timeslot.room; - if (!rooms[groupKey]) { - rooms[groupKey] = []; - } - rooms[groupKey].push([timeslot, activity]); + if (!rooms[room]) rooms[room] = []; + rooms[room].push([{ start_time, end_time, room }, activity]); }); }); @@ -138,34 +147,36 @@ export function Timetable(props: { activities: ICBDActivity[] }) { let formattedEndTime = hours + ":" + minutes; return ( - <> - - - - - ))} - - - - {Object.keys(rooms).map((room) => ( - - ))} - - -
- {Object.keys(rooms).map((room) => ( - -

{room}

-
- - - -
-

{`${tt["icbd-end-of-event"]} ${formattedEndTime}`}

- +
+ +
+ + + + + {Object.keys(rooms).map((room) => ( + + ))} + + + {Object.keys(rooms).map((room) => ( + + ))} + + +
+

{room}

+
+ +
+
+

+ {`${tt["icbd-end-of-event"]} ${formattedEndTime}`} +

+
); } diff --git a/src/pages/icbd.tsx b/src/pages/icbd.tsx index 464f33e..bdc76a3 100644 --- a/src/pages/icbd.tsx +++ b/src/pages/icbd.tsx @@ -5,7 +5,7 @@ import ParticlesComponent from "@/components/Particles"; import TabTitle from "@/components/TabTitle"; import { Timetable } from "@/components/Timetable"; import { directus, getDirectusImageUrl, populateLayoutProps } from "@/directus"; -import { getTranslation } from "@/locales"; +import { getTranslation, useTranslationTable } from "@/locales"; import style from "@/styles/ICBDPage.module.scss"; import pageStyle from "@/styles/Page.module.scss"; import { ICBD, ICBDActivity, ICBDPhd, ICBDSpeaker } from "@/types/aliases"; @@ -38,6 +38,8 @@ export default function ICBDPage( props.icbd.start_time || "" )} to ${formatTime(props.icbd.end_time || "")}, ${props.icbd.place}`; + const tt = useTranslationTable(); + return ( <>