import { useCallback, useState } from 'react' import { Loading, ErrorState } from '../../../components/PageState.jsx' import { useAsync } from '../../../lib/useAsync.js' import { dateTime } from '../../../lib/format.js' import { api } from '../../../api/client.js' import UserEditor from './UserEditor.jsx' const ROLE_BADGE = { admin: 'badge-admin', editor: 'badge-editor', moderator: 'badge-moderator' } export default function UsersAdmin() { const [tick, setTick] = useState(0) const reload = useCallback(() => setTick((t) => t + 1), []) const { loading, error, data } = useAsync(() => api.admin.listUsers(), [tick]) const [editing, setEditing] = useState(null) // null | 'new' | user const users = data || [] return (

Manage admin, editor, and moderator accounts

{loading && } {error && } {!loading && !error && (
{users.map((u) => ( ))}
Username Role Last login
{u.username} {u.role} {u.last_login_at ? dateTime(u.last_login_at) : 'never'} setEditing(u)}> Edit
)} {editing && ( setEditing(null)} onSaved={() => { setEditing(null) reload() }} /> )}
) }