From 6df3446fcabc4633d6ae14168a5253f44c40a566 Mon Sep 17 00:00:00 2001 From: Tanner Collin Date: Sun, 17 Aug 2025 18:56:38 +0000 Subject: [PATCH] feat: Cycle excluded segments by recency on Exclude area clicks Co-authored-by: aider (gemini/gemini-2.5-pro) --- mapper/src/App.js | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/mapper/src/App.js b/mapper/src/App.js index e44395d..72fb6bd 100644 --- a/mapper/src/App.js +++ b/mapper/src/App.js @@ -312,6 +312,8 @@ function Menu({data, duration, setDuration, end, setEnd, slider, setSlider, subm const [activeSearchResult, setActiveSearchResult] = useState(null); const scrollContainerRef = useRef(null); const scrollPositionRef = useRef(0); + const [lastDrawnItemsForExclusion, setLastDrawnItemsForExclusion] = useState(null); + const [exclusionCycleIndex, setExclusionCycleIndex] = useState(0); useEffect(() => { const container = scrollContainerRef.current; @@ -450,17 +452,22 @@ function Menu({data, duration, setDuration, end, setEnd, slider, setSlider, subm return; } - let longestSegment = goodSegments[0]; - for (let i = 1; i < goodSegments.length; i++) { - const durationCurrent = moment(longestSegment.end).diff(moment(longestSegment.start)); - const durationNew = moment(goodSegments[i].end).diff(moment(goodSegments[i].start)); - if (durationNew > durationCurrent) { - longestSegment = goodSegments[i]; - } + goodSegments.sort((a, b) => moment(b.end).diff(moment(a.end))); + + const drawnItemsKey = JSON.stringify(drawnItems.map(item => item.bounds.toBBoxString()).sort()); + + let newIndex = 0; + if (lastDrawnItemsForExclusion === drawnItemsKey) { + newIndex = (exclusionCycleIndex + 1) % goodSegments.length; } - const startUnix = moment(longestSegment.start).unix(); - const endUnix = moment(longestSegment.end).unix(); + setLastDrawnItemsForExclusion(drawnItemsKey); + setExclusionCycleIndex(newIndex); + + const segmentToSelect = goodSegments[newIndex]; + + const startUnix = moment(segmentToSelect.start).unix(); + const endUnix = moment(segmentToSelect.end).unix(); const endOfWindowUnix = end.unix(); const newSliderStart = Math.floor((startUnix - endOfWindowUnix) / duration.secs + duration.num);