From 73cd48262f1685c44a3337244d1af8eff9723380 Mon Sep 17 00:00:00 2001 From: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> Date: Sat, 20 Dec 2025 07:51:29 -0600 Subject: [PATCH] make object lifecycle scrollable in tracking details --- .../overlay/detail/SearchDetailDialog.tsx | 11 +- .../overlay/detail/TrackingDetails.tsx | 192 +++++++++--------- 2 files changed, 102 insertions(+), 101 deletions(-) diff --git a/web/src/components/overlay/detail/SearchDetailDialog.tsx b/web/src/components/overlay/detail/SearchDetailDialog.tsx index 392e929eb..e3ae19159 100644 --- a/web/src/components/overlay/detail/SearchDetailDialog.tsx +++ b/web/src/components/overlay/detail/SearchDetailDialog.tsx @@ -599,9 +599,14 @@ export default function SearchDetailDialog({ { if (isPopoverOpen) { diff --git a/web/src/components/overlay/detail/TrackingDetails.tsx b/web/src/components/overlay/detail/TrackingDetails.tsx index 28a462487..42535d5e1 100644 --- a/web/src/components/overlay/detail/TrackingDetails.tsx +++ b/web/src/components/overlay/detail/TrackingDetails.tsx @@ -526,7 +526,7 @@ export function TrackingDetails({
1 && aspectRatio < 1.5 + ? "lg:basis-3/5" + : "lg:basis-2/5", )} > {isDesktop && tabs && ( @@ -632,121 +635,114 @@ export function TrackingDetails({ )}
{config?.cameras[event.camera]?.onvif.autotracking .enabled_in_config && ( -
+
{t("trackingDetails.autoTrackingTips")}
)} -
-
-
+
+
+
{ + e.stopPropagation(); + // event.start_time is detect time, convert to record + handleSeekToTime( + (event.start_time ?? 0) + annotationOffset / 1000, + ); + }} + role="button" + >
{ - e.stopPropagation(); - // event.start_time is detect time, convert to record - handleSeekToTime( - (event.start_time ?? 0) + annotationOffset / 1000, - ); - }} - role="button" + className={cn( + "relative ml-2 rounded-full bg-muted-foreground p-2", + )} > -
- {getIconForLabel( - event.sub_label ? event.label + "-verified" : event.label, - "size-4 text-white", - )} -
-
- {label} -
- {formattedStart ?? ""} - {event.end_time != null ? ( - <> - {formattedEnd} - ) : ( -
- -
- )} -
- {event.data?.recognized_license_plate && ( - <> - · -
- - {event.data.recognized_license_plate} - -
- + {getIconForLabel( + event.sub_label ? event.label + "-verified" : event.label, + "size-4 text-white", + )} +
+
+ {label} +
+ {formattedStart ?? ""} + {event.end_time != null ? ( + <> - {formattedEnd} + ) : ( +
+ +
)}
+ {event.data?.recognized_license_plate && ( + <> + · +
+ + {event.data.recognized_license_plate} + +
+ + )}
+
-
- {!eventSequence ? ( - - ) : eventSequence.length === 0 ? ( -
- {t("detail.noObjectDetailData", { ns: "views/events" })} -
- ) : ( +
+ {!eventSequence ? ( + + ) : eventSequence.length === 0 ? ( +
+ {t("detail.noObjectDetailData", { ns: "views/events" })} +
+ ) : ( +
+ className="absolute -top-2 left-6 z-0 w-0.5 -translate-x-1/2 bg-secondary-foreground" + style={{ bottom: lineBottomOffsetPx }} + /> + {isWithinEventRange && (
- {isWithinEventRange && ( -
- )} -
- {eventSequence.map((item, idx) => { - return ( -
{ - rowRefs.current[idx] = el; - }} - > - handleLifecycleClick(item)} - setSelectedZone={setSelectedZone} - getZoneColor={getZoneColor} - effectiveTime={effectiveTime} - isTimelineActive={isWithinEventRange} - /> -
- ); - })} -
+ )} +
+ {eventSequence.map((item, idx) => { + return ( +
{ + rowRefs.current[idx] = el; + }} + > + handleLifecycleClick(item)} + setSelectedZone={setSelectedZone} + getZoneColor={getZoneColor} + effectiveTime={effectiveTime} + isTimelineActive={isWithinEventRange} + /> +
+ ); + })}
- )} -
+
+ )}