From 7d3313e7322f99beb308c07b1a06a23c1e99e28c Mon Sep 17 00:00:00 2001 From: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> Date: Sat, 2 Nov 2024 18:16:07 -0500 Subject: [PATCH] Add ability to view tracked objects in Explore from review item details pane (#14744) --- frigate/api/defs/events_query_parameters.py | 1 + frigate/api/event.py | 4 ++++ .../overlay/detail/ReviewDetailDialog.tsx | 18 ++++++++++++++++++ web/src/pages/Explore.tsx | 1 + 4 files changed, 24 insertions(+) diff --git a/frigate/api/defs/events_query_parameters.py b/frigate/api/defs/events_query_parameters.py index fe1d2b8b2..4639b7f59 100644 --- a/frigate/api/defs/events_query_parameters.py +++ b/frigate/api/defs/events_query_parameters.py @@ -28,6 +28,7 @@ class EventsQueryParams(BaseModel): is_submitted: Optional[int] = None min_length: Optional[float] = None max_length: Optional[float] = None + event_id: Optional[str] = None sort: Optional[str] = None timezone: Optional[str] = "utc" diff --git a/frigate/api/event.py b/frigate/api/event.py index 7f4f14610..869b61aaf 100644 --- a/frigate/api/event.py +++ b/frigate/api/event.py @@ -88,6 +88,7 @@ def events(params: EventsQueryParams = Depends()): is_submitted = params.is_submitted min_length = params.min_length max_length = params.max_length + event_id = params.event_id sort = params.sort @@ -230,6 +231,9 @@ def events(params: EventsQueryParams = Depends()): elif is_submitted > 0: clauses.append((Event.plus_id != "")) + if event_id is not None: + clauses.append((Event.id == event_id)) + if len(clauses) == 0: clauses.append((True)) diff --git a/web/src/components/overlay/detail/ReviewDetailDialog.tsx b/web/src/components/overlay/detail/ReviewDetailDialog.tsx index 2230046f3..d40f68a1e 100644 --- a/web/src/components/overlay/detail/ReviewDetailDialog.tsx +++ b/web/src/components/overlay/detail/ReviewDetailDialog.tsx @@ -40,6 +40,7 @@ import { import { useOverlayState } from "@/hooks/use-overlay-state"; import { DownloadVideoButton } from "@/components/button/DownloadVideoButton"; import { TooltipPortal } from "@radix-ui/react-tooltip"; +import { LuSearch } from "react-icons/lu"; type ReviewDetailDialogProps = { review?: ReviewSegment; @@ -53,6 +54,8 @@ export default function ReviewDetailDialog({ revalidateOnFocus: false, }); + const navigate = useNavigate(); + // upload const [upload, setUpload] = useState(); @@ -219,6 +222,21 @@ export default function ReviewDetailDialog({ )} {event.sub_label ?? event.label} ( {Math.round(event.data.top_score * 100)}%) + + +
{ + navigate(`/explore?event_id=${event.id}`); + }} + > + +
+
+ + View in Explore + +
); })} diff --git a/web/src/pages/Explore.tsx b/web/src/pages/Explore.tsx index 4efcb81b8..e8889e3ee 100644 --- a/web/src/pages/Explore.tsx +++ b/web/src/pages/Explore.tsx @@ -114,6 +114,7 @@ export default function Explore() { max_score: searchSearchParams["max_score"], has_snapshot: searchSearchParams["has_snapshot"], has_clip: searchSearchParams["has_clip"], + event_id: searchSearchParams["event_id"], limit: Object.keys(searchSearchParams).length == 0 ? API_LIMIT : undefined, timezone,