import { useCallback, useState } from "react"; import { useTranslation } from "react-i18next"; import { Trans } from "react-i18next"; import axios from "axios"; import { toast } from "sonner"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Label } from "@/components/ui/label"; import ActivityIndicator from "@/components/indicators/activity-indicator"; import { Switch } from "@/components/ui/switch"; type DeleteCameraDialogProps = { show: boolean; cameras: string[]; onClose: () => void; onDeleted: () => void; }; export default function DeleteCameraDialog({ show, cameras, onClose, onDeleted, }: DeleteCameraDialogProps) { const { t } = useTranslation(["views/settings", "common"]); const [phase, setPhase] = useState<"select" | "confirm">("select"); const [selectedCamera, setSelectedCamera] = useState(""); const [deleteExports, setDeleteExports] = useState(false); const [isDeleting, setIsDeleting] = useState(false); const handleClose = useCallback(() => { if (isDeleting) return; setPhase("select"); setSelectedCamera(""); setDeleteExports(false); onClose(); }, [isDeleting, onClose]); const handleDelete = useCallback(() => { setPhase("confirm"); }, []); const handleBack = useCallback(() => { setPhase("select"); }, []); const handleConfirmDelete = useCallback(async () => { if (!selectedCamera || isDeleting) return; setIsDeleting(true); try { await axios.delete( `cameras/${selectedCamera}?delete_exports=${deleteExports}`, ); toast.success( t("cameraManagement.deleteCameraDialog.success", { cameraName: selectedCamera, }), { position: "top-center" }, ); setPhase("select"); setSelectedCamera(""); setDeleteExports(false); onDeleted(); } catch (error) { const errorMessage = axios.isAxiosError(error) && (error.response?.data?.message || error.response?.data?.detail) ? error.response?.data?.message || error.response?.data?.detail : t("cameraManagement.deleteCameraDialog.error", { cameraName: selectedCamera, }); toast.error(errorMessage, { position: "top-center" }); } finally { setIsDeleting(false); } }, [selectedCamera, deleteExports, isDeleting, onDeleted, t]); return ( {phase === "select" ? ( <> {t("cameraManagement.deleteCameraDialog.title")} {t("cameraManagement.deleteCameraDialog.description")}
) : ( <> {t("cameraManagement.deleteCameraDialog.confirmTitle")} }} > cameraManagement.deleteCameraDialog.confirmWarning
setDeleteExports(checked === true) } />
)}
); }