From 12bda571dfd9a63d50bfa9abdc6e2b362d42bd2c Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Tue, 26 Mar 2024 06:40:04 -0600 Subject: [PATCH] Make each item in review filter group optional --- .../components/filter/ReviewFilterGroup.tsx | 57 ++++++++++++------- web/src/views/events/EventView.tsx | 6 +- web/src/views/events/RecordingView.tsx | 34 ++++------- 3 files changed, 53 insertions(+), 44 deletions(-) diff --git a/web/src/components/filter/ReviewFilterGroup.tsx b/web/src/components/filter/ReviewFilterGroup.tsx index d4fa7a0f0..4ebad426f 100644 --- a/web/src/components/filter/ReviewFilterGroup.tsx +++ b/web/src/components/filter/ReviewFilterGroup.tsx @@ -10,7 +10,7 @@ import { DropdownMenuSeparator, DropdownMenuTrigger, } from "../ui/dropdown-menu"; -import { ReviewFilter, ReviewSeverity, ReviewSummary } from "@/types/review"; +import { ReviewFilter, ReviewSummary } from "@/types/review"; import { getEndOfDayTimestamp } from "@/utils/dateUtil"; import { useFormattedTimestamp } from "@/hooks/use-date-utils"; import { FaCalendarAlt, FaFilter, FaRunning, FaVideo } from "react-icons/fa"; @@ -22,21 +22,29 @@ import FilterCheckBox from "./FilterCheckBox"; import ReviewActivityCalendar from "../overlay/ReviewActivityCalendar"; const ATTRIBUTES = ["amazon", "face", "fedex", "license_plate", "ups"]; +const REVIEW_FILTERS = ["cameras", "date", "general", "motionOnly"] as const; +type ReviewFilters = (typeof REVIEW_FILTERS)[number]; +const DEFAULT_REVIEW_FILTERS: ReviewFilters[] = [ + "cameras", + "date", + "general", + "motionOnly", +]; type ReviewFilterGroupProps = { + filters?: ReviewFilters[]; reviewSummary?: ReviewSummary; filter?: ReviewFilter; onUpdateFilter: (filter: ReviewFilter) => void; - severity: ReviewSeverity; motionOnly: boolean; setMotionOnly: React.Dispatch>; }; export default function ReviewFilterGroup({ + filters = DEFAULT_REVIEW_FILTERS, reviewSummary, filter, onUpdateFilter, - severity, motionOnly, setMotionOnly, }: ReviewFilterGroupProps) { @@ -101,27 +109,34 @@ export default function ReviewFilterGroup({ return (
- { - onUpdateFilter({ ...filter, cameras: newCameras }); - }} - /> - - {severity == "significant_motion" ? ( + {filters.includes("cameras") && ( + { + onUpdateFilter({ ...filter, cameras: newCameras }); + }} + /> + )} + {filters.includes("date") && ( + + )} + {filters.includes("motionOnly") && ( - ) : ( + )} + {filters.includes("general") && ( void; }; -export function CalendarFilterButton({ +function CalendarFilterButton({ reviewSummary, day, updateSelectedDay, diff --git a/web/src/views/events/EventView.tsx b/web/src/views/events/EventView.tsx index c0f532a17..bb9d6becb 100644 --- a/web/src/views/events/EventView.tsx +++ b/web/src/views/events/EventView.tsx @@ -254,10 +254,14 @@ export default function EventView({ {selectedReviews.length <= 0 ? ( diff --git a/web/src/views/events/RecordingView.tsx b/web/src/views/events/RecordingView.tsx index 3723e922f..896201755 100644 --- a/web/src/views/events/RecordingView.tsx +++ b/web/src/views/events/RecordingView.tsx @@ -1,5 +1,5 @@ import FilterCheckBox from "@/components/filter/FilterCheckBox"; -import { CalendarFilterButton } from "@/components/filter/ReviewFilterGroup"; +import ReviewFilterGroup from "@/components/filter/ReviewFilterGroup"; import PreviewPlayer, { PreviewController, } from "@/components/player/PreviewPlayer"; @@ -16,7 +16,6 @@ import { ReviewSegment, ReviewSummary, } from "@/types/review"; -import { getEndOfDayTimestamp } from "@/utils/dateUtil"; import { getChunkedTimeDay } from "@/utils/timelineUtil"; import { useCallback, useEffect, useMemo, useRef, useState } from "react"; import { isDesktop, isMobile } from "react-device-detect"; @@ -205,30 +204,12 @@ export function RecordingView({ return (
-
+
- { - updateFilter({ - ...filter, - after: day == undefined ? undefined : day.getTime() / 1000, - before: - day == undefined ? undefined : getEndOfDayTimestamp(day), - }); - }} - /> {isMobile && ( @@ -258,11 +239,20 @@ export function RecordingView({ )} + {}} + />