From 8eace9c3e7cd7192ed28f8b57705ec3212362596 Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Wed, 22 Apr 2026 20:37:17 -0600 Subject: [PATCH] WebUI tweaks (#22980) * Use escape key to go back to main camera dashboard * Add icon showing when review item is needing review --- web/src/components/card/AnimatedEventCard.tsx | 26 +++++++++++++++++-- web/src/views/live/LiveCameraView.tsx | 8 +++++- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/web/src/components/card/AnimatedEventCard.tsx b/web/src/components/card/AnimatedEventCard.tsx index 74495ddc7..53a548103 100644 --- a/web/src/components/card/AnimatedEventCard.tsx +++ b/web/src/components/card/AnimatedEventCard.tsx @@ -17,6 +17,9 @@ import { useUserPersistence } from "@/hooks/use-user-persistence"; import { Skeleton } from "../ui/skeleton"; import { Button } from "../ui/button"; import { FaCircleCheck } from "react-icons/fa6"; +import { FaExclamationTriangle } from "react-icons/fa"; +import { MdOutlinePersonSearch } from "react-icons/md"; +import { ThreatLevel } from "@/types/review"; import { cn } from "@/lib/utils"; import { useTranslation } from "react-i18next"; import { getTranslatedLabel } from "@/utils/i18n"; @@ -127,6 +130,11 @@ export function AnimatedEventCard({ true, ); + const threatLevel = useMemo( + () => (event.data.metadata?.potential_threat_level ?? 0) as ThreatLevel, + [event], + ); + const aspectRatio = useMemo(() => { if ( !config || @@ -152,7 +160,15 @@ export function AnimatedEventCard({ {t("markAsReviewed")} diff --git a/web/src/views/live/LiveCameraView.tsx b/web/src/views/live/LiveCameraView.tsx index 49d0e70bf..dc09fe4f5 100644 --- a/web/src/views/live/LiveCameraView.tsx +++ b/web/src/views/live/LiveCameraView.tsx @@ -389,7 +389,7 @@ export default function LiveCameraView({ return "mse"; }, [lowBandwidth, mic, webRTC, isRestreamed]); - useKeyboardListener(["m"], (key, modifiers) => { + useKeyboardListener(["m", "Escape"], (key, modifiers) => { if (!modifiers.down) { return true; } @@ -407,6 +407,12 @@ export default function LiveCameraView({ return true; } break; + case "Escape": + if (!fullscreen) { + navigate(-1); + return true; + } + break; } return false;