From ca28322700092e649f62078f5c54358a6921dad4 Mon Sep 17 00:00:00 2001 From: "Markus T." <19794318+marcus-wishes@users.noreply.github.com> Date: Tue, 26 Nov 2024 13:39:51 +0100 Subject: [PATCH] time table - refactored update of groups --- .../components/timetable/TimeTableRows.tsx | 90 +++++++++---------- 1 file changed, 44 insertions(+), 46 deletions(-) diff --git a/library/src/components/timetable/TimeTableRows.tsx b/library/src/components/timetable/TimeTableRows.tsx index d0f54bed..1fa1d067 100644 --- a/library/src/components/timetable/TimeTableRows.tsx +++ b/library/src/components/timetable/TimeTableRows.tsx @@ -225,59 +225,57 @@ export default function TimeTableRows< entries.length, ]) - //const currentGroupRows = useRef(groupRows) - const [currentGroupRows, setCurrentGroupRows] = useState(groupRows) + const currentGroupRows = useRef(groupRows) + //const [currentGroupRows, setCurrentGroupRows] = useState(groupRows) // initial run useEffect(() => { - setCurrentGroupRows((currentGroupRows) => { - if (!currentGroupRows) { - setCurrentGroupRows(groupRows) - setGroupRowsRenderedIdx(0) - groupRowsRenderedIdxRef.current = 0 - console.info("TimeTable - all group rows updated") - return currentGroupRows + if (!currentGroupRows.current) { + currentGroupRows.current = groupRows + setGroupRowsRenderedIdx(0) + groupRowsRenderedIdxRef.current = 0 + console.info("TimeTable - all group rows updated") + return + } + // determine when new ones start + let newOne = -1 + const keys = Object.keys(currentGroupRows) + for (let i = 0; i < keys.length; i++) { + const key = keys[i] + if (!groupRows[key]) { + newOne = i + break } - // determine when new ones start - let newOne = -1 - const keys = Object.keys(currentGroupRows) - for (let i = 0; i < keys.length; i++) { - const key = keys[i] - if (!groupRows[key]) { - newOne = i - break - } - if ( - (groupRows[key] !== currentGroupRows[key] && - i >= renderCells.current[0] && - i <= renderCells.current[1]) || - groupRows[key]?.length !== currentGroupRows[key]?.length - ) { - newOne = i - break - } + if ( + (groupRows[key] !== currentGroupRows.current[key] && + i >= renderCells.current[0] && + i <= renderCells.current[1]) || + groupRows[key]?.length !== currentGroupRows.current[key]?.length + ) { + newOne = i + break } - if (newOne === -1) { - if (keys.length === Object.keys(groupRows).length) { - console.info( - "TimeTable - group rows have no changes", - keys.length, - ) - return currentGroupRows - } - newOne = keys.length + } + if (newOne === -1) { + if (keys.length === Object.keys(groupRows).length) { + console.info( + "TimeTable - group rows have no changes", + keys.length, + ) + currentGroupRows.current = groupRows + return } - // we need to render the new ones - setGroupRowsRenderedIdx((prev) => { - const ret = prev >= newOne ? newOne : prev - if (ret === newOne) { - allPlaceholderRendered.current = false - } - return ret - }) - return groupRows + newOne = keys.length + } + // we need to render the new ones + setGroupRowsRenderedIdx((prev) => { + const ret = prev >= newOne ? newOne : prev + if (ret === newOne) { + allPlaceholderRendered.current = false + } + return ret }) - + currentGroupRows.current = groupRows //rateLimiterRendering(() => window.setTimeout(renderBatch, 0)) }, [groupRows]) //useEffect(handleIntersections, [])