import { useEffect, useRef } from "react"; import type { Project } from "@/domain"; import { Button, zIndex } from "@/shared"; import { useI18n } from "@/i18n"; interface RemoveProjectDialogProps { project: Project; isOpen: boolean; pending: boolean; error: string | null; onCancel: () => void; onConfirm: () => void; } export function RemoveProjectDialog({ project, isOpen, pending, error, onCancel, onConfirm, }: RemoveProjectDialogProps) { const { tr } = useI18n(); const cancelRef = useRef(null); useEffect(() => { cancelRef.current?.focus(); }, []); useEffect(() => { function cancelOnEscape(event: KeyboardEvent) { if (event.key === "Escape" && !pending) onCancel(); } document.addEventListener("keydown", cancelOnEscape); return () => document.removeEventListener("keydown", cancelOnEscape); }, [onCancel, pending]); return (
{ if (!pending && event.target === event.currentTarget) onCancel(); }} >

{tr(`Retirer « ${project.name} » d’IdeA ?`, `Remove “${project.name}” from IdeA?`)}

{project.root}

{tr("Le dossier et les fichiers resteront sur le disque.", "The folder and files will remain on disk.")}

{isOpen && (

{tr("Les vues de ce projet seront fermées et les opérations IdeA en cours seront interrompues.", "This project's views will close and its active IdeA operations will be interrupted.")}

)} {error && (

{error}

)}
); }