import React, { useState } from 'react'; import { Dialog, DialogTitle, DialogContent, DialogActions, Button, TextField, Grid, MenuItem, CircularProgress, Alert, Typography, } from '@mui/material'; import { incidentsApi, EINSATZ_ARTEN, EINSATZ_ART_LABELS, CreateEinsatzPayload } from '../../services/incidents'; import { useNotification } from '../../contexts/NotificationContext'; interface CreateEinsatzDialogProps { open: boolean; onClose: () => void; onSuccess: () => void; } // Default alarm_time = now (rounded to minute) function nowISO(): string { const d = new Date(); d.setSeconds(0, 0); return d.toISOString().slice(0, 16); // YYYY-MM-DDTHH:mm } const INITIAL_FORM: CreateEinsatzPayload & { alarm_time_local: string } = { alarm_time: '', alarm_time_local: nowISO(), einsatz_art: 'Brand', einsatz_stichwort: '', strasse: '', hausnummer: '', ort: '', bericht_kurz: '', alarmierung_art: 'ILS', status: 'aktiv', }; const CreateEinsatzDialog: React.FC = ({ open, onClose, onSuccess, }) => { const notification = useNotification(); const [form, setForm] = useState({ ...INITIAL_FORM, alarm_time_local: nowISO() }); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const handleChange = ( e: React.ChangeEvent ) => { const { name, value } = e.target; setForm((prev) => ({ ...prev, [name]: value })); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(null); if (!form.alarm_time_local) { setError('Alarmzeit ist pflicht.'); return; } if (!form.einsatz_art) { setError('Einsatzart ist pflicht.'); return; } setLoading(true); try { // Convert local datetime string to UTC ISO string const payload: CreateEinsatzPayload = { alarm_time: new Date(form.alarm_time_local).toISOString(), einsatz_art: form.einsatz_art, einsatz_stichwort: form.einsatz_stichwort || null, strasse: form.strasse || null, hausnummer: form.hausnummer || null, ort: form.ort || null, bericht_kurz: form.bericht_kurz || null, alarmierung_art: form.alarmierung_art || 'ILS', status: form.status || 'aktiv', }; await incidentsApi.create(payload); notification.showSuccess('Einsatz erfolgreich angelegt'); setForm({ ...INITIAL_FORM, alarm_time_local: nowISO() }); onSuccess(); } catch (err) { const msg = err instanceof Error ? err.message : 'Fehler beim Anlegen des Einsatzes'; setError(msg); } finally { setLoading(false); } }; const handleClose = () => { if (loading) return; setError(null); setForm({ ...INITIAL_FORM, alarm_time_local: nowISO() }); onClose(); }; return ( Neuen Einsatz anlegen {error && ( setError(null)}> {error} )} {/* Alarmzeit — most important field */} {/* Einsatzart */} {EINSATZ_ARTEN.map((art) => ( {EINSATZ_ART_LABELS[art]} ))} {/* Stichwort */} {/* Alarmierungsart */} {['ILS', 'DME', 'Telefon', 'Vor_Ort', 'Sonstiges'].map((a) => ( {a === 'Vor_Ort' ? 'Vor Ort' : a} ))} {/* Location */} {/* Short description */} ); }; export default CreateEinsatzDialog;