feat: Cycle excluded segments by recency on Exclude area clicks

Co-authored-by: aider (gemini/gemini-2.5-pro) <aider@aider.chat>
This commit is contained in:
2025-08-17 18:56:38 +00:00
parent 24a65b7f79
commit 6df3446fca

View File

@@ -312,6 +312,8 @@ function Menu({data, duration, setDuration, end, setEnd, slider, setSlider, subm
const [activeSearchResult, setActiveSearchResult] = useState(null); const [activeSearchResult, setActiveSearchResult] = useState(null);
const scrollContainerRef = useRef(null); const scrollContainerRef = useRef(null);
const scrollPositionRef = useRef(0); const scrollPositionRef = useRef(0);
const [lastDrawnItemsForExclusion, setLastDrawnItemsForExclusion] = useState(null);
const [exclusionCycleIndex, setExclusionCycleIndex] = useState(0);
useEffect(() => { useEffect(() => {
const container = scrollContainerRef.current; const container = scrollContainerRef.current;
@@ -450,17 +452,22 @@ function Menu({data, duration, setDuration, end, setEnd, slider, setSlider, subm
return; return;
} }
let longestSegment = goodSegments[0]; goodSegments.sort((a, b) => moment(b.end).diff(moment(a.end)));
for (let i = 1; i < goodSegments.length; i++) {
const durationCurrent = moment(longestSegment.end).diff(moment(longestSegment.start)); const drawnItemsKey = JSON.stringify(drawnItems.map(item => item.bounds.toBBoxString()).sort());
const durationNew = moment(goodSegments[i].end).diff(moment(goodSegments[i].start));
if (durationNew > durationCurrent) { let newIndex = 0;
longestSegment = goodSegments[i]; if (lastDrawnItemsForExclusion === drawnItemsKey) {
} newIndex = (exclusionCycleIndex + 1) % goodSegments.length;
} }
const startUnix = moment(longestSegment.start).unix(); setLastDrawnItemsForExclusion(drawnItemsKey);
const endUnix = moment(longestSegment.end).unix(); setExclusionCycleIndex(newIndex);
const segmentToSelect = goodSegments[newIndex];
const startUnix = moment(segmentToSelect.start).unix();
const endUnix = moment(segmentToSelect.end).unix();
const endOfWindowUnix = end.unix(); const endOfWindowUnix = end.unix();
const newSliderStart = Math.floor((startUnix - endOfWindowUnix) / duration.secs + duration.num); const newSliderStart = Math.floor((startUnix - endOfWindowUnix) / duration.secs + duration.num);