// DXF-Export-Dialog (modal). Fragt „Schraffuren mitexportieren?" ab und weist auf // die Meter-Einheit hin (DXF ist Modell-Space in echten Metern, 1:1). Muster wie // ExportPdfDialog: abgedunkeltes Overlay, Klick auf den Hintergrund + Esc schliessen. // // Rein gesteuert: hält nur Formular-Zustand und meldet die Entscheidung über // `onExport` nach oben (App führt den Export aus, da es den Plan erzeugt). // Bezeichner englisch, UI-Text/Kommentare deutsch (CONVENTIONS.md). import { useEffect, useState } from "react"; import { t } from "../i18n"; import { Dropdown } from "./Dropdown"; /** Entscheidung, die der Dialog beim Bestätigen liefert. */ export interface ExportDxfDecision { includeHatches: boolean; } export interface ExportDxfDialogProps { /** Titel/Geschossname (nur Anzeige im Dialogkopf). */ planTitle: string; onExport: (decision: ExportDxfDecision) => void; onClose: () => void; } export function ExportDxfDialog({ planTitle, onExport, onClose }: ExportDxfDialogProps) { useEffect(() => { const onKey = (e: KeyboardEvent) => { if (e.key === "Escape") onClose(); }; window.addEventListener("keydown", onKey); return () => window.removeEventListener("keydown", onKey); }, [onClose]); const [includeHatches, setIncludeHatches] = useState(true); const onConfirm = () => onExport({ includeHatches }); return (
e.stopPropagation()} >
{t("exportDxf.title")}
{t("export.plan")} {planTitle}
{t("exportDxf.hatches")}
setIncludeHatches(v === "yes")} title={t("exportDxf.hatches")} options={[ { value: "yes", label: t("exportDxf.hatches.yes") }, { value: "no", label: t("exportDxf.hatches.no") }, ]} />
{t("exportDxf.unitsNote")}
); }