import { useEffect, useState } from 'react'; import { Box, Typography, Alert, IconButton, Tooltip, Dialog, DialogTitle, DialogContent, DialogActions, Button, Stack, TextField, CircularProgress, Autocomplete } 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.js'; import EditOutlinedIcon from "@mui/icons-material/EditOutlined"; import {useNavigate} from "react-router-dom"; export default function CompanyPage() { const [rows, setRows] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(''); const [userOptions, setUserOptions] = useState([]); const [usersLoading, setUsersLoading] = useState(false); const [open, setOpen] = useState(false); const [creating, setCreating] = useState(false); const [creatingError, setCreatingError] = useState(''); const navigate = useNavigate(); const [createForm, setCreateForm] = useState({ name: '', email: '' }); const loadCompanies = async () => { try { const { data } = await axiosInstance.get('/company'); setRows(data); } catch { setError('Fehler beim Laden der Unternehmen'); } finally { setLoading(false); } }; useEffect(() => { loadCompanies(); }, []); const handleFormChange = (e) => { const { name, value } = e.target; setCreateForm((prev) => ({ ...prev, [name]: value })); }; const loadUsers = async () => { setUsersLoading(true); try { const { data } = await axiosInstance.get('/users'); setUserOptions(data.map(u => u.email)); } catch { setUserOptions([]); } finally { setUsersLoading(false); } } const handleOpen = () => { setOpen(true); loadUsers(); } const handleCreate = async () => { setCreating(true); setCreatingError(''); try { const jsonPayload = { name: createForm.name, ownerEmail: createForm.email }; await axiosInstance.post('/company', jsonPayload); await loadCompanies(); // Liste neu laden handleCreateClose(); } catch (err) { setCreatingError(err.response?.data?.error ?? 'Erstellen fehlgeschlagen'); } finally { setCreating(false); } }; const handleCreateClose = () => { setOpen(false); setCreateForm({ name: '', email: '' }); setCreatingError(''); }; const handleDelete = async (id) => { if (!window.confirm('Unternehmen wirklich löschen?')) return; try { await axiosInstance.delete(`/company/${id}`); setRows((prev) => prev.filter((r) => r.id !== id)); } catch (err){ alert(err.response?.data?.error ?? 'Löschen fehlgeschlagen'); } }; const handleEdit = (id) => { navigate(`/companies/${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 */} Unternehmen {error && {error}} {/* Tabelle */} {/* Create Dialog */} Unternehmen erstellen {creatingError && {creatingError}} { setCreateForm(prev => ({ ...prev, email: newValue ?? '' })); }} onInputChange={(_, newInputValue) => { setCreateForm(prev => ({ ...prev, email: newInputValue })); }} freeSolo filterOptions={(options, { inputValue }) => options.filter(o => o.toLowerCase().includes(inputValue.toLowerCase())) } renderInput={(params) => ( {usersLoading ? : null} {params.InputProps.endAdornment} ), }} /> )} /> ); }