'use client'; import { useRef } from 'react'; import type { MediaPlayerInstance } from '@vidstack/react'; import { useProtectedVideoQuery } from '@/app/(modules)/results/hooks/useVideoResults'; import AnnotatedVideoPlayer from '@/components/video/annotatedVideoPlayer'; import { useVideoAnnotationPlayback } from '@/components/video/useVideoAnnotationPlayback'; import type { TicketOverviewDetail } from '@/types'; type TicketInlineAnalysisVideoProps = { ticket: TicketOverviewDetail; }; export function TicketInlineAnalysisVideo({ ticket, }: TicketInlineAnalysisVideoProps) { const videoRef = useRef(null); const videoId = ticket.video_id ?? ticket.video?.id ?? undefined; const sourceUrl = ticket.video?.url ?? undefined; const fps = ticket.video_metadata?.fps ?? 0; const videoWidth = ticket.video_metadata?.resolution.width ?? 0; const videoHeight = ticket.video_metadata?.resolution.height ?? 0; const { visibleDetections, handleSeeked, handleTimeUpdate, handleVideoFrame, } = useVideoAnnotationPlayback({ videoId, logs: [], fps, videoRef, }); const { videoUrl, isLoading: isVideoLoading, isError: isVideoError, refetch: refetchVideo, } = useProtectedVideoQuery(sourceUrl); if (!videoId || !sourceUrl) { return (
Analysis video is unavailable for this ticket.
); } return (
void refetchVideo()} onTimeUpdate={handleTimeUpdate} onVideoFrame={handleVideoFrame} onSeeked={handleSeeked} />
); }