From 4236580672441b283f91b19db85a726c6a9a01e3 Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Tue, 28 May 2024 12:15:31 -0600 Subject: [PATCH] UI fixes (#11596) * Fix using undefined search params * Fix calendar selection * Simplify --- .../camera/AutoUpdatingCameraImage.tsx | 2 +- .../overlay/ReviewActivityCalendar.tsx | 57 ++++++++++--------- 2 files changed, 32 insertions(+), 27 deletions(-) diff --git a/web/src/components/camera/AutoUpdatingCameraImage.tsx b/web/src/components/camera/AutoUpdatingCameraImage.tsx index 28ad3b883..d10a32317 100644 --- a/web/src/components/camera/AutoUpdatingCameraImage.tsx +++ b/web/src/components/camera/AutoUpdatingCameraImage.tsx @@ -69,7 +69,7 @@ export default function AutoUpdatingCameraImage({ {showFps ? Displaying at {fps}fps : null} diff --git a/web/src/components/overlay/ReviewActivityCalendar.tsx b/web/src/components/overlay/ReviewActivityCalendar.tsx index 2cd55fe5b..2d64ca554 100644 --- a/web/src/components/overlay/ReviewActivityCalendar.tsx +++ b/web/src/components/overlay/ReviewActivityCalendar.tsx @@ -3,6 +3,7 @@ import { Calendar } from "../ui/calendar"; import { useMemo } from "react"; import { FaCircle } from "react-icons/fa"; import { getUTCOffset } from "@/utils/dateUtil"; +import { type DayContentProps } from "react-day-picker"; type ReviewActivityCalendarProps = { reviewSummary?: ReviewSummary; @@ -22,6 +23,28 @@ export default function ReviewActivityCalendar({ return { from: tomorrow, to: future }; }, []); + const modifiers = useMemo(() => { + if (!reviewSummary) { + return { alerts: [], detections: [] }; + } + + const unreviewedDetections: Date[] = []; + const unreviewedAlerts: Date[] = []; + + Object.entries(reviewSummary).forEach(([date, data]) => { + if (data.total_alert > data.reviewed_alert) { + unreviewedAlerts.push(new Date(date)); + } else if (data.total_detection > data.reviewed_detection) { + unreviewedDetections.push(new Date(date)); + } + }); + + return { + alerts: unreviewedAlerts, + detections: unreviewedDetections, + }; + }, [reviewSummary]); + return ( ( - - ), + DayContent: ReviewActivityDay, }} /> ); } -type ReviewActivityDayProps = { - reviewSummary?: ReviewSummary; - day: Date; -}; -function ReviewActivityDay({ reviewSummary, day }: ReviewActivityDayProps) { +function ReviewActivityDay({ date, activeModifiers }: DayContentProps) { const dayActivity = useMemo(() => { - if (!reviewSummary) { - return "none"; - } - - const allActivity = - reviewSummary[ - `${day.getFullYear()}-${("0" + (day.getMonth() + 1)).slice(-2)}-${("0" + day.getDate()).slice(-2)}` - ]; - - if (!allActivity) { - return "none"; - } - - if (allActivity.total_alert > allActivity.reviewed_alert) { + if (activeModifiers["alerts"]) { return "alert"; - } else if (allActivity.total_detection > allActivity.reviewed_detection) { + } else if (activeModifiers["detections"]) { return "detection"; } else { return "none"; } - }, [reviewSummary, day]); + }, [activeModifiers]); return ( -
- {day.getDate()} +
+ {date.getDate()} {dayActivity != "none" && (