From eb8c113910189baab5c0ad03f4cbb0bee92f6754 Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Thu, 9 Oct 2025 07:17:24 -0600 Subject: [PATCH] Use genai title for tooltip when available --- web/src/components/card/AnimatedEventCard.tsx | 36 +++++++++++-------- web/src/types/ws.ts | 2 +- web/src/views/live/LiveDashboardView.tsx | 6 +++- 3 files changed, 28 insertions(+), 16 deletions(-) diff --git a/web/src/components/card/AnimatedEventCard.tsx b/web/src/components/card/AnimatedEventCard.tsx index a04804641..20d39efe2 100644 --- a/web/src/components/card/AnimatedEventCard.tsx +++ b/web/src/components/card/AnimatedEventCard.tsx @@ -50,6 +50,27 @@ export function AnimatedEventCard({ fetchPreviews: !currentHour, }); + const tooltipText = useMemo(() => { + if (event?.data?.metadata?.title) { + return event.data.metadata.title; + } + + return ( + `${[ + ...new Set([ + ...(event.data.objects || []), + ...(event.data.sub_labels || []), + ...(event.data.audio || []), + ]), + ] + .filter((item) => item !== undefined && !item.includes("-verified")) + .map((text) => text.charAt(0).toUpperCase() + text.substring(1)) + .sort() + .join(", ") + .replaceAll("-verified", "")} ` + t("detected") + ); + }, [event, t]); + // visibility const [windowVisible, setWindowVisible] = useState(true); @@ -220,20 +241,7 @@ export function AnimatedEventCard({ )} - - {`${[ - ...new Set([ - ...(event.data.objects || []), - ...(event.data.sub_labels || []), - ...(event.data.audio || []), - ]), - ] - .filter((item) => item !== undefined && !item.includes("-verified")) - .map((text) => text.charAt(0).toUpperCase() + text.substring(1)) - .sort() - .join(", ") - .replaceAll("-verified", "")} ` + t("detected")} - + {tooltipText} ); } diff --git a/web/src/types/ws.ts b/web/src/types/ws.ts index 3a464a275..1120aec67 100644 --- a/web/src/types/ws.ts +++ b/web/src/types/ws.ts @@ -30,7 +30,7 @@ type FrigateObjectState = { }; export interface FrigateReview { - type: "new" | "update" | "end"; + type: "new" | "update" | "end" | "genai"; before: ReviewSegment; after: ReviewSegment; } diff --git a/web/src/views/live/LiveDashboardView.tsx b/web/src/views/live/LiveDashboardView.tsx index ddd6ccd51..69f4c0d53 100644 --- a/web/src/views/live/LiveDashboardView.tsx +++ b/web/src/views/live/LiveDashboardView.tsx @@ -114,7 +114,11 @@ export default function LiveDashboardView({ // if event is ended and was saved, update events list if (eventUpdate.after.severity == "alert") { - if (eventUpdate.type == "end" || eventUpdate.type == "new") { + if ( + eventUpdate.type == "end" || + eventUpdate.type == "new" || + eventUpdate.type == "genai" + ) { setTimeout( () => updateEvents(), eventUpdate.type == "end" ? 1000 : 6000,