import { useState } from 'react' import Modal from '../../../components/Modal.jsx' import { api } from '../../../api/client.js' export default function UserEditor({ user, onClose, onSaved }) { const isEdit = Boolean(user) const [form, setForm] = useState({ username: user?.username || '', password: '', role: user?.role || 'admin', }) const [busy, setBusy] = useState(false) const [error, setError] = useState('') const set = (k) => (e) => setForm((f) => ({ ...f, [k]: e.target.value })) async function save() { if (!form.username.trim()) return setError('Username is required.') if (!isEdit && form.password.length < 8) return setError('Password must be at least 8 characters.') if (isEdit && form.password && form.password.length < 8) return setError('Password must be at least 8 characters.') setBusy(true) setError('') try { if (isEdit) { const payload = { username: form.username.trim(), role: form.role } if (form.password) payload.password = form.password await api.admin.updateUser(user.id, payload) } else { await api.admin.createUser({ username: form.username.trim(), password: form.password, role: form.role }) } onSaved() } catch (err) { setError(err.message || 'Could not save the user.') setBusy(false) } } async function remove() { if (!confirm(`Delete user "${user.username}"?`)) return setBusy(true) try { await api.admin.deleteUser(user.id) onSaved() } catch (err) { setError(err.message || 'Could not delete this user.') setBusy(false) } } return ( {isEdit && ( )} } >
{error &&

{error}

}
) } const delStyle = { border: '1px solid #6e3b38', borderRadius: 999, padding: '7px 16px', background: 'rgba(110,59,56,0.18)', color: '#d98b84', fontSize: '0.86rem', cursor: 'pointer', marginRight: 'auto', }