@@ -107,6 +107,8 @@ function renderGroupRows<G extends TimeTableGroup, I extends TimeSlotBooking>(
107107 groupEntry ,
108108 groupRows ,
109109 groupEntriesArray ,
110+ changedGroupRows ,
111+ renderCells ,
110112 )
111113 throw new Error ( "TimeTable - group entry not found" )
112114 }
@@ -305,8 +307,9 @@ export default function TimeTableRows<
305307 // detect to unrender
306308 for ( const renderedGroup of renderedGroups . current ) {
307309 if (
308- renderedGroup < newRenderCells [ 0 ] ||
309- renderedGroup > newRenderCells [ 1 ]
310+ ( renderedGroup < newRenderCells [ 0 ] ||
311+ renderedGroup > newRenderCells [ 1 ] ) &&
312+ renderedGroup < currentGroupRows . size
310313 ) {
311314 changedGroupRows . current . add ( renderedGroup )
312315 }
@@ -315,25 +318,17 @@ export default function TimeTableRows<
315318 if ( newRenderCells [ 0 ] > - 1 ) {
316319 for (
317320 let i = newRenderCells [ 0 ] ;
318- i <= newRenderCells [ 1 ] ;
321+ i <= newRenderCells [ 1 ] && i < currentGroupRows . size ;
319322 i ++
320323 ) {
321324 if ( ! renderedGroups . current . has ( i ) ) {
322325 changedGroupRows . current . add ( i )
323326 }
324327 }
325328 }
326- /*console.log(
327- "TimeTable - intersection group rows changed",
328- newRenderCells,
329- )*/
330329 renderGroupRangeRef . current = newRenderCells
331330 return newRenderCells
332331 }
333- console . log (
334- "TimeTable - intersection group rows not changed" ,
335- newRenderCells ,
336- )
337332 return prev
338333 } )
339334 } , [ intersectionContainerRef . current , headerRef . current , rowHeight ] )
@@ -345,23 +340,8 @@ export default function TimeTableRows<
345340 //** ------- CHANGE DETECTION ------ */
346341 // handle changes in the group rows
347342 if ( groupRows !== currentGroupRows ) {
348- if ( groupRowsRendered . current . length > groupRows . size ) {
349- // shorten and remove rendered elements array, if too long
350- console . info (
351- `Timetable - shorten rendered elements array from ${ groupRowsRendered . current . length } to ${ groupRows . size } ` ,
352- )
353- groupRowsRendered . current . length = groupRows . size
354- if ( groupRowsRenderedIdxRef . current >= groupRows . size ) {
355- groupRowsRenderedIdxRef . current = groupRows . size - 1
356- }
357- }
358343 setCurrentGroupRows ( ( currentGroupRows ) => {
359344 changedGroupRows . current . clear ( )
360- if ( groupRows . size < currentGroupRows . size ) {
361- refCollection . current . length = groupRows . size
362- groupRowsRendered . current . length = groupRows . size
363- }
364-
365345 if ( ! groupRows ) {
366346 setGroupRowsRenderedIdx ( - 1 )
367347 groupRowsRenderedIdxRef . current = 0
@@ -372,6 +352,18 @@ export default function TimeTableRows<
372352 return groupRows
373353 }
374354
355+ if ( groupRowsRendered . current . length > groupRows . size ) {
356+ // shorten and remove rendered elements array, if too long
357+ console . info (
358+ `Timetable - shorten rendered elements array from ${ groupRowsRendered . current . length } to ${ groupRows . size } ` ,
359+ )
360+ groupRowsRendered . current . length = groupRows . size
361+ refCollection . current . length = groupRows . size
362+ if ( groupRowsRenderedIdxRef . current >= groupRows . size ) {
363+ groupRowsRenderedIdxRef . current = groupRows . size - 1
364+ }
365+ }
366+
375367 // determine when new ones start
376368 const perf_Start = performance . now ( )
377369 let changedFound = - 1
@@ -401,16 +393,18 @@ export default function TimeTableRows<
401393 changedGroupRows . current . delete ( changedG )
402394 }
403395 }
396+ for ( const renderedG of renderedGroups . current ) {
397+ if ( renderedG > keys . length - 1 ) {
398+ // delete obsolete change
399+ renderedGroups . current . delete ( renderedG )
400+ }
401+ }
404402
405- console . log (
406- "PERF UPDATE GROUP ROWS ENTRIES" ,
407- performance . now ( ) - perf_Start ,
408- changedGroupRows . current ,
409- keys . length ,
410- )
411- console . log (
412- `TimeTable - group rows require updated rendering ${ updateCounter } , with first ${ changedFound } ` ,
413- )
403+ if ( updateCounter ) {
404+ console . log (
405+ `TimeTable - group rows require updated rendering ${ updateCounter } , with first ${ changedFound } ` ,
406+ )
407+ }
414408 return groupRows
415409 } )
416410 }
@@ -461,6 +455,10 @@ export default function TimeTableRows<
461455 i <= renderGroupRangeRef . current [ 1 ] ;
462456 i ++
463457 ) {
458+ if ( i > currentGroupRows . size - 1 ) {
459+ changedGroupRows . current . delete ( i )
460+ continue
461+ }
464462 // make sure visible rows are rendered
465463 if ( changedGroupRows . current . has ( i ) ) {
466464 renderGroupRows (
@@ -489,30 +487,32 @@ export default function TimeTableRows<
489487 }
490488 }
491489 for ( const g of changedGroupRows . current ) {
490+ if ( g > currentGroupRows . size - 1 ) {
491+ changedGroupRows . current . delete ( g )
492+ continue
493+ }
492494 // unrender not visible rows, but render only if the placeholders are already rendered)
493- if ( g < groupRowsRendered . current . length ) {
494- renderGroupRows (
495- renderGroupRangeRef . current ,
496- currentGroupRows ,
497- g ,
498- refCollection . current ,
499- groupRowsRendered . current ,
500- renderedGroups . current ,
501- changedGroupRows . current ,
502- onGroupClick ,
503- placeHolderHeight ,
504- columnWidth ,
505- rowHeight ,
506- selectedTimeSlotItem ,
507- onTimeSlotItemClick ,
508- slotsArray ,
509- timeFrameDay ,
510- viewType ,
511- )
512- counter ++
513- if ( counter > timeTableGroupRenderBatchSize ) {
514- return groupRowsRenderedIdx - 1
515- }
495+ renderGroupRows (
496+ renderGroupRangeRef . current ,
497+ currentGroupRows ,
498+ g ,
499+ refCollection . current ,
500+ groupRowsRendered . current ,
501+ renderedGroups . current ,
502+ changedGroupRows . current ,
503+ onGroupClick ,
504+ placeHolderHeight ,
505+ columnWidth ,
506+ rowHeight ,
507+ selectedTimeSlotItem ,
508+ onTimeSlotItemClick ,
509+ slotsArray ,
510+ timeFrameDay ,
511+ viewType ,
512+ )
513+ counter ++
514+ if ( counter > timeTableGroupRenderBatchSize ) {
515+ return groupRowsRenderedIdx - 1
516516 }
517517 }
518518 }
0 commit comments