import { useEffect, useState } from 'react' import { Box, Button, CircularProgress, Container, Dialog, DialogActions, DialogContent, DialogTitle, IconButton, Paper, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, TextField, Toolbar, Tooltip, Typography, } from '@mui/material' import { Add as AddIcon, Delete as DeleteIcon } from '@mui/icons-material' import { apiClient } from '../api/client' import type { Group } from '../types' export default function GroupsPage() { const [groups, setGroups] = useState([]) const [loading, setLoading] = useState(true) const [open, setOpen] = useState(false) const [name, setName] = useState('') const [desc, setDesc] = useState('') const load = async () => { setLoading(true) try { const r = await apiClient.get('/groups'); setGroups(r.data) } finally { setLoading(false) } } useEffect(() => { load() }, []) const handleCreate = async () => { await apiClient.post('/groups', { name, description: desc }) setOpen(false); setName(''); setDesc('') load() } const handleDelete = async (id: string) => { if (!confirm('Delete this group?')) return await apiClient.delete(`/groups/${id}`) load() } return ( Groups {loading ? : ( NameDescriptionCreatedActions {groups.map(g => ( {g.name} {g.description || '—'} {new Date(g.created_at).toLocaleDateString()} handleDelete(g.id)}> ))}
)} setOpen(false)} maxWidth="xs" fullWidth> Create Group setName(e.target.value)} margin="normal" required /> setDesc(e.target.value)} margin="normal" />
) }