mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-07-15 00:11:15 +03:00
use separate displayItems memo to overlay end_time updates without re-filtering reviewed items
This commit is contained in:
parent
5ed8f26320
commit
c7c1d0c506
@ -327,10 +327,11 @@ export default function Events() {
|
|||||||
};
|
};
|
||||||
}, [reviews]);
|
}, [reviews]);
|
||||||
|
|
||||||
// reload when a review item ends so in-progress spinners clear
|
|
||||||
// update review items in place when a review segment ends
|
// update review items in place when a review segment ends
|
||||||
const reviewUpdate = useFrigateReviews();
|
const reviewUpdate = useFrigateReviews();
|
||||||
const [lastEndedReviewId, setLastEndedReviewId] = useState<string>();
|
const [endedReviews, setEndedReviews] = useState(
|
||||||
|
new Map<string, ReviewSegment>(),
|
||||||
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (reviewUpdate?.type === "end") {
|
if (reviewUpdate?.type === "end") {
|
||||||
@ -343,7 +344,9 @@ export default function Events() {
|
|||||||
},
|
},
|
||||||
{ revalidate: false, populateCache: true },
|
{ revalidate: false, populateCache: true },
|
||||||
);
|
);
|
||||||
setLastEndedReviewId(reviewUpdate.after.id);
|
setEndedReviews((prev) =>
|
||||||
|
new Map(prev).set(reviewUpdate.after.id, reviewUpdate.after),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}, [reviewUpdate, updateSegments]);
|
}, [reviewUpdate, updateSegments]);
|
||||||
|
|
||||||
@ -369,14 +372,16 @@ export default function Events() {
|
|||||||
} else {
|
} else {
|
||||||
return current;
|
return current;
|
||||||
}
|
}
|
||||||
|
// only refresh when severity or filter changes
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, [
|
}, [severity, reviewFilter, showReviewed, reviewItems?.all.length]);
|
||||||
severity,
|
|
||||||
reviewFilter,
|
// overlay end_time updates onto currentItems without re-running
|
||||||
showReviewed,
|
// the has_been_reviewed filter, so hover-reviewed items stay visible
|
||||||
reviewItems?.all.length,
|
const displayItems = useMemo(() => {
|
||||||
lastEndedReviewId,
|
if (!currentItems || endedReviews.size === 0) return currentItems;
|
||||||
]);
|
return currentItems.map((seg) => endedReviews.get(seg.id) ?? seg);
|
||||||
|
}, [currentItems, endedReviews]);
|
||||||
|
|
||||||
// review summary
|
// review summary
|
||||||
|
|
||||||
@ -629,7 +634,7 @@ export default function Events() {
|
|||||||
) : (
|
) : (
|
||||||
<EventView
|
<EventView
|
||||||
reviewItems={reviewItems}
|
reviewItems={reviewItems}
|
||||||
currentReviewItems={currentItems}
|
currentReviewItems={displayItems}
|
||||||
reviewSummary={reviewSummary}
|
reviewSummary={reviewSummary}
|
||||||
recordingsSummary={recordingsSummary}
|
recordingsSummary={recordingsSummary}
|
||||||
relevantPreviews={allPreviews}
|
relevantPreviews={allPreviews}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user