import {useNavigate} from "react-router-dom"; import {useState} from "react"; import { Alert, Box, Button, Card, CardContent, Checkbox, Chip, CircularProgress, Divider, FormControlLabel, IconButton, Stack, TextField, Typography } from "@mui/material"; import ArrowBackIcon from "@mui/icons-material/ArrowBack"; import StarIcon from "@mui/icons-material/Star"; import DeleteOutlineIcon from "@mui/icons-material/DeleteOutline"; import AddPhotoAlternateOutlinedIcon from "@mui/icons-material/AddPhotoAlternateOutlined"; import { useParams } from "react-router-dom"; import { useEffect } from "react"; import axiosInstance from "../api/axiosInstance.js"; const EMPTY_FORM = { description: '', phone: '', email: '', address: '', website: '', contactPerson: '', active: false, } export default function EditOrganizationPage() { const navigate = useNavigate(); const [form, setForm] = useState(EMPTY_FORM); const [files, setFiles] = useState([]); const [previews, setPreviews] = useState([]); const [existingImages, setExistingImages] = useState([]); const [saving, setSaving] = useState(false); const [error, setError] = useState(''); const { id } = useParams(); const [data, setData] = useState([]); useEffect(() => { const fetchData = async () => { try { const response = await axiosInstance.get('/api/organizations/' + id); const data = response.data; setData(data); setForm({ description: data.description || '', phone: data.phone || '', email: data.email || '', address: data.address || '', website: data.website || '', contactPerson: data.contactPerson || '', active: data.active || false, }); setExistingImages(data.images || []); } catch (err) { setError(err.response?.data || 'Fehler beim Laden'); } }; fetchData(); }, [id]); const handleChange = (e) => { const { name, value, type, checked } = e.target; setForm((prev) => ({ ...prev, [name]: type === 'checkbox' ? checked : value })); }; const handleRemoveExisting = (index) => { setExistingImages((prev) => prev.filter((_, i) => i !== index)); }; const handleSubmit = (e) => { /* Drauf achten alte und neue Bilder zu verwenden Vielleicht extra Feld für Anzeigebild, anstatt erstes zu nehmen */ } const handleFileChange = (e) => { const selected = Array.from(e.target.files); setFiles((prev) => [...prev, ...selected]); const newPreviews = selected.map((f) => URL.createObjectURL(f)); setPreviews((prev) => [...prev, ...newPreviews]); e.target.value = ''; }; const handleRemoveFile = (index) => { URL.revokeObjectURL(previews[index]); setFiles((prev) => prev.filter((_, i) => i !== index)); setPreviews((prev) => prev.filter((_, i) => i !== index)); }; return ( navigate('/organizations')} size="small"> Organisation bearbeiten {error && {error}} setForm((prev) => ({ ...prev, active: e.target.checked })) } /> } label="Aktiv" /> {/* Bild-Upload */} Bilder {files.length > 0 && ( Das erste Bild wird als Vorschaubild verwendet )} {existingImages.map((src, i) => ( handleRemoveExisting(i)}> ))} {previews.map((src, i) => ( {i === 0 && ( } label="Vorschaubild" size="small" color="primary" sx={{ height: 20, fontSize: 11 }} /> )} {files[i]?.name} handleRemoveFile(i)}> ))} ) }