import { useEffect, useState } from 'react' import { Box, Button, Chip, CircularProgress, Container, Dialog, DialogActions, DialogContent, DialogTitle, IconButton, MenuItem, Paper, Select, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, TextField, Toolbar, Tooltip, Typography, } from '@mui/material' import { Add as AddIcon, Lock as LockIcon } from '@mui/icons-material' import { apiClient } from '../api/client' import type { User } from '../types' export default function UsersPage() { const [users, setUsers] = useState([]) const [loading, setLoading] = useState(true) const [open, setOpen] = useState(false) const [form, setForm] = useState({ username: '', email: '', role: 'operator', password: '' }) const load = async () => { setLoading(true) try { const r = await apiClient.get('/users') setUsers(r.data) } catch { /* interceptor handles */ } finally { setLoading(false) } } useEffect(() => { load() }, []) const handleCreate = async () => { try { await apiClient.post('/users', form) setOpen(false) setForm({ username: '', email: '', role: 'operator', password: '' }) load() } catch { /* interceptor handles */ } } const handleRevoke = async (id: string) => { await apiClient.post(`/users/${id}/revoke`) } return ( Users {loading ? ( ) : ( Username Email Role MFA Status Actions {users.map(u => ( {u.username} {u.email} handleRevoke(u.id)}> ))}
)} setOpen(false)} maxWidth="xs" fullWidth> Add User setForm({ ...form, username: e.target.value })} margin="normal" required /> setForm({ ...form, email: e.target.value })} margin="normal" required /> setForm({ ...form, password: e.target.value })} margin="normal" required />
) }