From 05286a95600f80e1dfa82abb5991396ad04cce16 Mon Sep 17 00:00:00 2001 From: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> Date: Thu, 9 Apr 2026 14:43:57 -0500 Subject: [PATCH] fix video playback stutter when GenAI dialog is open in detail stream Inline `onOpen` callback in DetailStream.tsx:522 creates a new function identity every render. GenAISummaryChip.tsx:98's useEffect depends on [open, onOpen], so it re-fires on every parent re-render while the dialog is open. Each fire calls onSeek -> setCurrentTime -> seekToTimestamp, creating a continuous re-render + seek loop --- web/src/components/overlay/chip/GenAISummaryChip.tsx | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/web/src/components/overlay/chip/GenAISummaryChip.tsx b/web/src/components/overlay/chip/GenAISummaryChip.tsx index b056c36b25..edfa74f39b 100644 --- a/web/src/components/overlay/chip/GenAISummaryChip.tsx +++ b/web/src/components/overlay/chip/GenAISummaryChip.tsx @@ -6,7 +6,7 @@ import { ThreatLevel, THREAT_LEVEL_LABELS, } from "@/types/review"; -import React, { useEffect, useMemo, useState } from "react"; +import React, { useEffect, useMemo, useRef, useState } from "react"; import { isDesktop } from "react-device-detect"; import { useTranslation } from "react-i18next"; import { MdAutoAwesome } from "react-icons/md"; @@ -95,11 +95,12 @@ export function GenAISummaryDialog({ const Trigger = isDesktop ? DialogTrigger : DrawerTrigger; const Content = isDesktop ? DialogContent : DrawerContent; + const onOpenRef = useRef(onOpen); + onOpenRef.current = onOpen; + useEffect(() => { - if (onOpen) { - onOpen(open); - } - }, [open, onOpen]); + onOpenRef.current?.(open); + }, [open]); if (!aiAnalysis) { return null;