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
}
onClick={() => setOpen(true)}
>
Organisation erstellen
{error && {error}}
{/* Tabelle */}
{/* Create Dialog */}
);
}