Filter detail stream to only show items from within the review item

This commit is contained in:
Nicolas Mowen 2025-11-05 06:12:57 -07:00
parent 2fa28494a1
commit bb9b8100a1

View File

@ -454,6 +454,7 @@ function ReviewGroup({
<EventList <EventList
key={event.id} key={event.id}
event={event} event={event}
review={review}
effectiveTime={effectiveTime} effectiveTime={effectiveTime}
annotationOffset={annotationOffset} annotationOffset={annotationOffset}
onSeek={onSeek} onSeek={onSeek}
@ -488,6 +489,7 @@ function ReviewGroup({
type EventListProps = { type EventListProps = {
event: Event; event: Event;
review: ReviewSegment;
effectiveTime?: number; effectiveTime?: number;
annotationOffset: number; annotationOffset: number;
onSeek: (ts: number, play?: boolean) => void; onSeek: (ts: number, play?: boolean) => void;
@ -495,6 +497,7 @@ type EventListProps = {
}; };
function EventList({ function EventList({
event, event,
review,
effectiveTime, effectiveTime,
annotationOffset, annotationOffset,
onSeek, onSeek,
@ -613,6 +616,7 @@ function EventList({
<div className="mt-2"> <div className="mt-2">
<ObjectTimeline <ObjectTimeline
review={review}
eventId={event.id} eventId={event.id}
onSeek={handleTimelineClick} onSeek={handleTimelineClick}
effectiveTime={effectiveTime} effectiveTime={effectiveTime}
@ -761,6 +765,7 @@ function LifecycleItem({
// Fetch and render timeline entries for a single event id on demand. // Fetch and render timeline entries for a single event id on demand.
function ObjectTimeline({ function ObjectTimeline({
review,
eventId, eventId,
onSeek, onSeek,
effectiveTime, effectiveTime,
@ -768,6 +773,7 @@ function ObjectTimeline({
startTime, startTime,
endTime, endTime,
}: { }: {
review: ReviewSegment;
eventId: string; eventId: string;
onSeek: (ts: number, play?: boolean) => void; onSeek: (ts: number, play?: boolean) => void;
effectiveTime?: number; effectiveTime?: number;
@ -776,13 +782,27 @@ function ObjectTimeline({
endTime?: number; endTime?: number;
}) { }) {
const { t } = useTranslation("views/events"); const { t } = useTranslation("views/events");
const { data: timeline, isValidating } = useSWR<TrackingDetailsSequence[]>([ const { data: fullTimeline, isValidating } = useSWR<
TrackingDetailsSequence[]
>([
"timeline", "timeline",
{ {
source_id: eventId, source_id: eventId,
}, },
]); ]);
const timeline = useMemo(() => {
if (!fullTimeline) {
return fullTimeline;
}
return fullTimeline.filter(
(t) =>
t.timestamp >= review.start_time &&
(review.end_time == undefined || t.timestamp <= review.end_time),
);
}, [fullTimeline, review]);
if (isValidating && (!timeline || timeline.length === 0)) { if (isValidating && (!timeline || timeline.length === 0)) {
return <ActivityIndicator className="ml-2 size-3" />; return <ActivityIndicator className="ml-2 size-3" />;
} }