From 5b6888cc7843c5bcb5dc388639db6ae809487b46 Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Mon, 26 Feb 2024 15:15:10 -0700 Subject: [PATCH] Update ready when new review is saved --- web/src/pages/Events.tsx | 30 +++++++++++++++-------- web/src/views/events/DesktopEventView.tsx | 5 +++- web/src/views/events/MobileEventView.tsx | 5 +++- 3 files changed, 28 insertions(+), 12 deletions(-) diff --git a/web/src/pages/Events.tsx b/web/src/pages/Events.tsx index 62a18c504..5cad0eb0d 100644 --- a/web/src/pages/Events.tsx +++ b/web/src/pages/Events.tsx @@ -1,7 +1,7 @@ -import { useFrigateEvents } from "@/api/ws"; +import { useFrigateReviews } from "@/api/ws"; import useApiFilter from "@/hooks/use-api-filter"; import useOverlayState from "@/hooks/use-overlay-state"; -import { ReviewFilter, ReviewSegment } from "@/types/review"; +import { ReviewFilter, ReviewSegment, ReviewSeverity } from "@/types/review"; import DesktopEventView from "@/views/events/DesktopEventView"; import DesktopRecordingView from "@/views/events/DesktopRecordingView"; import MobileEventView from "@/views/events/MobileEventView"; @@ -15,6 +15,8 @@ const API_LIMIT = 250; export default function Events() { // recordings viewer + + const [severity, setSeverity] = useState("alert"); const [selectedReviewId, setSelectedReviewId] = useOverlayState("review"); // review filter @@ -97,6 +99,11 @@ export default function Events() { setSize(size + 1); }, [size]); + const reloadData = useCallback(() => { + setSize(1); + updateSegments(); + }, []) + // preview videos const previewTimes = useMemo(() => { @@ -196,22 +203,21 @@ export default function Events() { // review updates - const { payload: eventUpdate } = useFrigateEvents(); + const { payload: reviewUpdate } = useFrigateReviews(); const [hasUpdate, setHasUpdate] = useState(false); useEffect(() => { - if (!eventUpdate) { + if (!reviewUpdate || hasUpdate) { return; } - // if event is ended and was saved, update events list if ( - eventUpdate.type == "end" && - (eventUpdate.after.has_clip || eventUpdate.after.has_snapshot) + reviewUpdate.type == "end" && + reviewUpdate.review.severity == severity ) { setHasUpdate(true); return; } - }, [eventUpdate]); + }, [reviewUpdate]); if (selectedData) { return ( @@ -229,11 +235,13 @@ export default function Events() { relevantPreviews={allPreviews} reachedEnd={isDone} isValidating={isValidating} + severity={severity} hasUpdate={hasUpdate} + setSeverity={setSeverity} setHasUpdate={setHasUpdate} loadNextPage={onLoadNextPage} markItemAsReviewed={markItemAsReviewed} - pullLatestData={updateSegments} + pullLatestData={reloadData} /> ); } @@ -246,13 +254,15 @@ export default function Events() { reachedEnd={isDone} isValidating={isValidating} filter={reviewFilter} + severity={severity} hasUpdate={hasUpdate} + setSeverity={setSeverity} setHasUpdate={setHasUpdate} loadNextPage={onLoadNextPage} markItemAsReviewed={markItemAsReviewed} onSelectReview={setSelectedReviewId} pullLatestData={updateSegments} - updateFilter={onUpdateFilter} + updateFilter={reloadData} /> ); } diff --git a/web/src/views/events/DesktopEventView.tsx b/web/src/views/events/DesktopEventView.tsx index 666cce103..c198d2eb3 100644 --- a/web/src/views/events/DesktopEventView.tsx +++ b/web/src/views/events/DesktopEventView.tsx @@ -18,7 +18,9 @@ type DesktopEventViewProps = { reachedEnd: boolean; isValidating: boolean; filter?: ReviewFilter; + severity: ReviewSeverity; hasUpdate: boolean; + setSeverity: (severity: ReviewSeverity) => void; setHasUpdate: (hasUpdated: boolean) => void; loadNextPage: () => void; markItemAsReviewed: (reviewId: string) => void; @@ -33,7 +35,9 @@ export default function DesktopEventView({ reachedEnd, isValidating, filter, + severity, hasUpdate, + setSeverity, setHasUpdate, loadNextPage, markItemAsReviewed, @@ -42,7 +46,6 @@ export default function DesktopEventView({ updateFilter, }: DesktopEventViewProps) { const { data: config } = useSWR("config"); - const [severity, setSeverity] = useState("alert"); const contentRef = useRef(null); // review paging diff --git a/web/src/views/events/MobileEventView.tsx b/web/src/views/events/MobileEventView.tsx index b476808d7..cfdce9bba 100644 --- a/web/src/views/events/MobileEventView.tsx +++ b/web/src/views/events/MobileEventView.tsx @@ -14,7 +14,9 @@ type MobileEventViewProps = { relevantPreviews?: Preview[]; reachedEnd: boolean; isValidating: boolean; + severity: ReviewSeverity; hasUpdate: boolean; + setSeverity: (severity: ReviewSeverity) => void; setHasUpdate: (hasUpdated: boolean) => void; loadNextPage: () => void; markItemAsReviewed: (reviewId: string) => void; @@ -25,14 +27,15 @@ export default function MobileEventView({ relevantPreviews, reachedEnd, isValidating, + severity, hasUpdate, + setSeverity, setHasUpdate, loadNextPage, markItemAsReviewed, pullLatestData, }: MobileEventViewProps) { const { data: config } = useSWR("config"); - const [severity, setSeverity] = useState("alert"); const contentRef = useRef(null); // review paging