@@ -36,7 +36,7 @@ import {
3636} from "./TimeTableSelectionStore"
3737import { useGroupRows } from "./useGoupRows"
3838import { twMerge } from "tailwind-merge"
39- import { getStartAndEndSlot } from "./timeTableUtils"
39+ import { getStartAndEndSlot , getTimeSlotMinutes } from "./timeTableUtils"
4040import { flushSync } from "react-dom"
4141
4242export interface TimeSlotBooking {
@@ -205,6 +205,8 @@ const nowbarUpdateIntervall = 1000 * 60 // 1 minute
205205 * Each column in the table is actually 2 columns. 1 fixed size one, and 1 dynamic sized on. Like that I can simulate min-width on the columns, which else is not allowed.
206206 *
207207 * The index exports a memoized version of the LPTimeTable, which is used by the parent component.
208+ *
209+ * @emits allGroupsRendered (exported, string: timetable-allgroupsrendered) - when all groups are rendered
208210 */
209211export default function LPTimeTable <
210212 G extends TimeTableGroup ,
@@ -270,7 +272,7 @@ const LPTimeTableImpl = <G extends TimeTableGroup, I extends TimeSlotBooking>({
270272 // biome-ignore lint/correctness/useExhaustiveDependencies: just remove the message is props change
271273 useEffect ( ( ) => {
272274 setMessage ?.( undefined ) // clear the message on time frame change
273- } , [ viewType , startDate , endDate , setMessage , timeStepsMinutes ] )
275+ } , [ startDate , endDate , setMessage , timeStepsMinutes ] )
274276
275277 const tableRef = useRef < HTMLTableElement > ( null )
276278 const tableHeaderRef = useRef < HTMLTableSectionElement > ( null )
@@ -316,7 +318,7 @@ const LPTimeTableImpl = <G extends TimeTableGroup, I extends TimeSlotBooking>({
316318 itemsWithSameStartAndEnd,
317319 slotsArray,
318320 timeFrameDay,
319- timeSlotMinutes ,
321+ viewType : currViewType ,
320322 } = useGroupRows ( entries )
321323
322324 if ( ! slotsArray || slotsArray . length === 0 ) {
@@ -401,18 +403,10 @@ const LPTimeTableImpl = <G extends TimeTableGroup, I extends TimeSlotBooking>({
401403 tableHeaderRef ,
402404 tableBodyRef ,
403405 timeFrameDay ,
404- timeSlotMinutes ,
405- viewType ,
406+ currViewType ,
406407 setMessage ,
407408 )
408- } , [
409- slotsArray ,
410- nowOverwrite ,
411- timeFrameDay ,
412- timeSlotMinutes ,
413- viewType ,
414- setMessage ,
415- ] )
409+ } , [ slotsArray , nowOverwrite , timeFrameDay , currViewType , setMessage ] )
416410
417411 // initial run, and start interval to move the now bar
418412 useEffect ( ( ) => {
@@ -439,11 +433,10 @@ const LPTimeTableImpl = <G extends TimeTableGroup, I extends TimeSlotBooking>({
439433 tableHeaderRef ,
440434 tableBodyRef ,
441435 timeFrameDay ,
442- timeSlotMinutes ,
443- viewType ,
436+ currViewType ,
444437 setMessage ,
445438 )
446- } , [ setMessage , slotsArray , timeFrameDay , timeSlotMinutes , viewType ] )
439+ } , [ setMessage , slotsArray , timeFrameDay , currViewType ] )
447440
448441 useResizeObserver ( {
449442 ref : tableBodyRef ,
@@ -507,12 +500,11 @@ const LPTimeTableImpl = <G extends TimeTableGroup, I extends TimeSlotBooking>({
507500 >
508501 < LPTimeTableHeader < G , I >
509502 slotsArray = { slotsArray }
510- timeSlotMinutes = { timeSlotMinutes }
511503 columnWidth = { columnWidth }
512504 groupHeaderColumnWidth = { groupHeaderColumnWidth }
513505 startDate = { startDate }
514506 endDate = { endDate }
515- viewType = { viewType }
507+ viewType = { currViewType }
516508 timeFrameDay = { timeFrameDay }
517509 showTimeSlotHeader = {
518510 showTimeSlotHeader === undefined ||
@@ -539,9 +531,8 @@ const LPTimeTableImpl = <G extends TimeTableGroup, I extends TimeSlotBooking>({
539531 }
540532 headerRef = { tableHeaderRef }
541533 slotsArray = { slotsArray }
542- timeSlotMinutes = { timeSlotMinutes }
543534 timeFrameDay = { timeFrameDay }
544- viewType = { viewType }
535+ viewType = { currViewType }
545536 />
546537 </ tbody >
547538 </ table >
@@ -568,7 +559,6 @@ function moveNowBar(
568559 tableHeaderRef : MutableRefObject < HTMLTableSectionElement | null > ,
569560 tableBodyRef : MutableRefObject < HTMLTableSectionElement | null > ,
570561 timeFrameDay : TimeFrameDay ,
571- timeSlotMinutes : number ,
572562 viewType : TimeTableViewType ,
573563 setMessage ?: ( message : TimeTableMessage ) => void ,
574564) {
@@ -623,7 +613,6 @@ function moveNowBar(
623613 nowItem ,
624614 slotsArray ,
625615 timeFrameDay ,
626- timeSlotMinutes ,
627616 viewType ,
628617 )
629618 if ( startAndEndSlot . status !== "in" ) {
@@ -684,19 +673,13 @@ function moveNowBar(
684673 nowBarRef . current = nowBar
685674 }
686675
687- let currentTimeSlot = slotsArray [ startSlot ]
688- if ( viewType !== "hours" ) {
689- currentTimeSlot = currentTimeSlot
690- . add ( timeFrameDay . startHour , "hour" )
691- . add ( timeFrameDay . startMinute , "minute" )
692- }
693-
694- const diffNowDays = now . diff ( currentTimeSlot , "days" )
695- let diffNow = now . diff ( currentTimeSlot , "minutes" )
696- if ( diffNowDays > 0 ) {
697- const dDay = 24 * 60 - timeFrameDay . oneDayMinutes
698- diffNow = diffNow - dDay * diffNowDays
699- }
676+ const currentTimeSlot = slotsArray [ startSlot ]
677+ const timeSlotMinutes = getTimeSlotMinutes (
678+ currentTimeSlot ,
679+ timeFrameDay ,
680+ viewType ,
681+ )
682+ const diffNow = now . diff ( currentTimeSlot , "minutes" )
700683
701684 const diffPerc = diffNow / timeSlotMinutes
702685 nowBar . style . left = `${ diffPerc * 100 } %`
@@ -727,6 +710,7 @@ function moveNowBar(
727710 console . error ( "unable to find header date row" )
728711 return
729712 }
713+
730714 const headerDateCells = headerDateRow . children
731715 for ( const headerDateCell of headerDateCells ) {
732716 headerDateCell . classList . remove ( "text-text-subtle" )
0 commit comments