import React, { useEffect, useState } from "react"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { NumberInput } from "@/components/ui/number-input"; import { Label } from "@/components/ui/label"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, } from "@/components/ui/dialog"; import { Alert, AlertDescription } from "@/components/ui/alert"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { AlertTriangle, CheckCircle, Loader2, Play, VideoOff } from "lucide-react"; import { RobotRecord } from "@/hooks/useRobots"; import { useApi } from "@/contexts/ApiContext"; import { useToast } from "@/hooks/use-toast"; import { useNavigate } from "react-router-dom"; import { JobCheckpoint, PolicyConfigSummary, getCheckpointPolicyConfig, listJobCheckpoints, } from "@/lib/checkpointsApi"; import { startInference } from "@/lib/inferenceApi"; import CheckpointDropdown from "@/components/jobs/CheckpointDropdown"; import { useAvailableCameras } from "@/hooks/useAvailableCameras"; import { useCameraStream } from "@/hooks/useCameraStream"; const CameraThumbnail: React.FC<{ deviceId: string; paused: boolean }> = ({ deviceId, paused, }) => { const { videoRef, hasError } = useCameraStream(deviceId, paused); if (paused || hasError || !deviceId) { return (
{paused ? "Released" : "No preview"}
); } return (