import { useEffect, useState } from 'react'; import { Box, Typography, Alert, IconButton, Tooltip, Dialog, DialogTitle, DialogContent, DialogActions, Button, Stack, TextField, CircularProgress } from '@mui/material'; import { DataGrid } from '@mui/x-data-grid'; import DeleteOutlineIcon from '@mui/icons-material/DeleteOutline'; import AddIcon from '@mui/icons-material/Add'; import { Chip } from '@mui/material'; import axiosInstance from '../api/axiosInstance'; import EditOutlinedIcon from "@mui/icons-material/EditOutlined"; import {useNavigate} from "react-router-dom"; export default function OrganizationPage() { const [rows, setRows] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(''); const [open, setOpen] = useState(false); const [creating, setCreating] = useState(false); const [creatingError, setCreatingError] = useState(''); const navigate = useNavigate(); const [createForm, setCreateForm] = useState({ name: '', email: '' }); const loadOrganizations = async () => { try { const { data } = await axiosInstance.get('/organization'); setRows(data); } catch { setError('Fehler beim Laden der Organisationen'); } finally { setLoading(false); } }; useEffect(() => { loadOrganizations(); }, []); const handleFormChange = (e) => { const { name, value } = e.target; setCreateForm((prev) => ({ ...prev, [name]: value })); }; const handleCreate = async () => { setCreating(true); setCreatingError(''); try { const jsonPayload = { name: createForm.name, ownerEmail: createForm.email }; await axiosInstance.post('/organization', jsonPayload); await loadOrganizations(); // Liste neu laden handleCreateClose(); } catch (err) { setCreatingError(err.response?.data?.message ?? 'Erstellen fehlgeschlagen'); } finally { setCreating(false); } }; const handleCreateClose = () => { setOpen(false); setCreateForm({ name: '', email: '' }); setCreatingError(''); }; const handleDelete = async (id) => { if (!window.confirm('Organisation wirklich löschen?')) return; try { await axiosInstance.delete(`/organization/${id}`); setRows((prev) => prev.filter((r) => r.id !== id)); } catch { alert('Löschen fehlgeschlagen'); } }; const handleEdit = (id) => { navigate(`/organizations/${id}/edit`); } const columns = [ { field: 'id', headerName: 'ID', width: 70 }, { field: 'name', headerName: 'Name', flex: 1.5 }, { field: 'ownerEmail', headerName: 'Verwalter', flex: 2, renderCell: ({ value }) => ( {value} ), }, { field: 'active', headerName: 'Status', width: 150, renderCell: ({ value }) => ( ), }, { field: 'actions', headerName: '', width: 120, sortable: false, renderCell: ({ row }) => ( handleDelete(row.id)}> handleEdit(row.id)}> ), }, ]; return ( {/* Header */} Organisationen {error && {error}} {/* Tabelle */} {/* Create Dialog */} Organisation erstellen {creatingError && {creatingError}} ); }