mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-09 04:35:25 +03:00
don't rerender for callback
This commit is contained in:
parent
12f9c13a23
commit
44fa0805f0
@ -26,8 +26,8 @@ type PreviewPlayerProps = {
|
|||||||
review: ReviewSegment;
|
review: ReviewSegment;
|
||||||
relevantPreview?: Preview;
|
relevantPreview?: Preview;
|
||||||
autoPlayback?: boolean;
|
autoPlayback?: boolean;
|
||||||
setReviewed?: () => void;
|
setReviewed?: (reviewId: string) => void;
|
||||||
onClick?: () => void;
|
onClick?: (reviewId: string) => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
type Preview = {
|
type Preview = {
|
||||||
@ -53,6 +53,22 @@ export default function PreviewThumbnailPlayer({
|
|||||||
const [progress, setProgress] = useState(0);
|
const [progress, setProgress] = useState(0);
|
||||||
const [imgRef, imgLoaded, onImgLoad] = useImageLoaded();
|
const [imgRef, imgLoaded, onImgLoad] = useImageLoaded();
|
||||||
|
|
||||||
|
// interaction
|
||||||
|
|
||||||
|
const handleOnClick = useCallback(() => {
|
||||||
|
if (onClick) {
|
||||||
|
onClick(review.id);
|
||||||
|
}
|
||||||
|
}, [review, onClick]);
|
||||||
|
|
||||||
|
const handleSetReviewed = useCallback(() => {
|
||||||
|
if (setReviewed) {
|
||||||
|
setReviewed(review.id);
|
||||||
|
}
|
||||||
|
}, [review, setReviewed]);
|
||||||
|
|
||||||
|
// playback
|
||||||
|
|
||||||
const playingBack = useMemo(() => playback, [playback, autoPlayback]);
|
const playingBack = useMemo(() => playback, [playback, autoPlayback]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@ -110,7 +126,7 @@ export default function PreviewThumbnailPlayer({
|
|||||||
className="relative w-full h-full cursor-pointer"
|
className="relative w-full h-full cursor-pointer"
|
||||||
onMouseEnter={isMobile ? undefined : () => onPlayback(true)}
|
onMouseEnter={isMobile ? undefined : () => onPlayback(true)}
|
||||||
onMouseLeave={isMobile ? undefined : () => onPlayback(false)}
|
onMouseLeave={isMobile ? undefined : () => onPlayback(false)}
|
||||||
onClick={onClick}
|
onClick={handleOnClick}
|
||||||
>
|
>
|
||||||
{playingBack && (
|
{playingBack && (
|
||||||
<div className="absolute left-0 top-0 right-0 bottom-0 animate-in fade-in">
|
<div className="absolute left-0 top-0 right-0 bottom-0 animate-in fade-in">
|
||||||
@ -118,7 +134,7 @@ export default function PreviewThumbnailPlayer({
|
|||||||
review={review}
|
review={review}
|
||||||
relevantPreview={relevantPreview}
|
relevantPreview={relevantPreview}
|
||||||
setProgress={setProgress}
|
setProgress={setProgress}
|
||||||
setReviewed={setReviewed}
|
setReviewed={handleSetReviewed}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
@ -194,7 +210,7 @@ type PreviewContentProps = {
|
|||||||
review: ReviewSegment;
|
review: ReviewSegment;
|
||||||
relevantPreview: Preview | undefined;
|
relevantPreview: Preview | undefined;
|
||||||
setProgress?: (progress: number) => void;
|
setProgress?: (progress: number) => void;
|
||||||
setReviewed?: () => void;
|
setReviewed?: (reviewId: string) => void;
|
||||||
};
|
};
|
||||||
function PreviewContent({
|
function PreviewContent({
|
||||||
review,
|
review,
|
||||||
@ -256,7 +272,7 @@ function PreviewContent({
|
|||||||
lastPercent < 50 &&
|
lastPercent < 50 &&
|
||||||
playerPercent > 50
|
playerPercent > 50
|
||||||
) {
|
) {
|
||||||
setReviewed();
|
setReviewed(review.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
setLastPercent(playerPercent);
|
setLastPercent(playerPercent);
|
||||||
@ -321,7 +337,7 @@ const MIN_LOAD_TIMEOUT_MS = 200;
|
|||||||
type InProgressPreviewProps = {
|
type InProgressPreviewProps = {
|
||||||
review: ReviewSegment;
|
review: ReviewSegment;
|
||||||
setProgress?: (progress: number) => void;
|
setProgress?: (progress: number) => void;
|
||||||
setReviewed?: () => void;
|
setReviewed?: (reviewId: string) => void;
|
||||||
};
|
};
|
||||||
function InProgressPreview({
|
function InProgressPreview({
|
||||||
review,
|
review,
|
||||||
@ -355,7 +371,7 @@ function InProgressPreview({
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (setReviewed && key == Math.floor(previewFrames.length / 2)) {
|
if (setReviewed && key == Math.floor(previewFrames.length / 2)) {
|
||||||
setReviewed();
|
setReviewed(review.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
setKey(key + 1);
|
setKey(key + 1);
|
||||||
|
|||||||
@ -304,8 +304,8 @@ export default function DesktopEventView({
|
|||||||
<PreviewThumbnailPlayer
|
<PreviewThumbnailPlayer
|
||||||
review={value}
|
review={value}
|
||||||
relevantPreview={relevantPreview}
|
relevantPreview={relevantPreview}
|
||||||
setReviewed={() => markItemAsReviewed(value.id)}
|
setReviewed={markItemAsReviewed}
|
||||||
onClick={() => onSelectReview(value.id)}
|
onClick={onSelectReview(value.id}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
{lastRow && !reachedEnd && <ActivityIndicator />}
|
{lastRow && !reachedEnd && <ActivityIndicator />}
|
||||||
|
|||||||
@ -223,7 +223,7 @@ export default function MobileEventView({
|
|||||||
review={value}
|
review={value}
|
||||||
relevantPreview={relevantPreview}
|
relevantPreview={relevantPreview}
|
||||||
autoPlayback={minimapBounds.end == value.start_time}
|
autoPlayback={minimapBounds.end == value.start_time}
|
||||||
setReviewed={() => markItemAsReviewed(value.id)}
|
setReviewed={markItemAsReviewed}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
{lastRow && !reachedEnd && <ActivityIndicator />}
|
{lastRow && !reachedEnd && <ActivityIndicator />}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user