Skip to content

Commit ba6fff7

Browse files
committed
time table - fixed rendering inconsistency of group rows and actual items
1 parent 1024f00 commit ba6fff7

File tree

1 file changed

+58
-58
lines changed

1 file changed

+58
-58
lines changed

library/src/components/timetable/TimeTableRows.tsx

Lines changed: 58 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)