From 9599450cffe2f0199f8d186c17de5a1545920950 Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Thu, 16 Oct 2025 07:55:10 -0600 Subject: [PATCH] Add GenAI info to detail stream (#20527) * Add camera previews back * Add genai info --- web/src/components/timeline/DetailStream.tsx | 21 ++-- web/src/views/recording/RecordingView.tsx | 107 +++++++++---------- 2 files changed, 67 insertions(+), 61 deletions(-) diff --git a/web/src/components/timeline/DetailStream.tsx b/web/src/components/timeline/DetailStream.tsx index 96ee3d595..396523c0c 100644 --- a/web/src/components/timeline/DetailStream.tsx +++ b/web/src/components/timeline/DetailStream.tsx @@ -1,4 +1,4 @@ -import { useEffect, useRef, useState } from "react"; +import { useEffect, useMemo, useRef, useState } from "react"; import { ObjectLifecycleSequence } from "@/types/timeline"; import { LifecycleIcon } from "@/components/overlay/detail/ObjectLifecycle"; import { getLifecycleItemDescription } from "@/utils/lifecycleUtil"; @@ -256,9 +256,18 @@ function ReviewGroup({ } } - const objectCount = fetchedEvents - ? fetchedEvents.length - : (review.data.objects ?? []).length; + const reviewInfo = useMemo(() => { + if (review.data.metadata?.title) { + return review.data.metadata.title; + } else { + const objectCount = fetchedEvents + ? fetchedEvents.length + : (review.data.objects ?? []).length; + + return `${objectCount} ${t("detail.trackedObject", { count: objectCount })}`; + } + }, [review, t, fetchedEvents]); + return (
{displayTime}
-
- {objectCount} {t("detail.trackedObject", { count: objectCount })} -
+
{reviewInfo}
diff --git a/web/src/views/recording/RecordingView.tsx b/web/src/views/recording/RecordingView.tsx index b495d043b..aa15d693f 100644 --- a/web/src/views/recording/RecordingView.tsx +++ b/web/src/views/recording/RecordingView.tsx @@ -774,62 +774,61 @@ export function RecordingView({ containerRef={mainLayoutRef} />
- {isDesktop && - effectiveCameras.length > 1 && - timelineType !== "detail" && ( -
-
- {effectiveCameras.map((cam) => { - if (cam == mainCamera || cam == "birdseye") { - return; - } + {isDesktop && effectiveCameras.length > 1 && ( +
+
+ {effectiveCameras.map((cam) => { + if (cam == mainCamera || cam == "birdseye") { + return; + } - return ( - - -
+ +
+ { + previewRefs.current[cam] = controller; + controller.scrubToTimestamp(startTime); }} - > - { - previewRefs.current[cam] = controller; - controller.scrubToTimestamp(startTime); - }} - onClick={() => onSelectCamera(cam)} - /> -
-
- - - - - ); - })} -
-
- )} + onClick={() => onSelectCamera(cam)} + /> +
+
+ + + +
+ ); + })} +
+
+ )}