import { useState } from "react"; import { LuPencil, LuPlus, LuTrash2, LuX } from "react-icons/lu"; import { errorMessage } from "../api/client.js"; import { useCreateUser, useDeleteUser, useUpdateUser, useUsers, } from "../api/hooks.js"; export function UsersPage() { const { data: users = [], isLoading } = useUsers(); const create = useCreateUser(); const update = useUpdateUser(); const del = useDeleteUser(); const [mode, setMode] = useState(null); const [form, setForm] = useState({ username: "", password: "", role: "operator", id: null, }); const [confirmDelete, setConfirmDelete] = useState(null); function openAdd() { setMode("add"); setForm({ username: "", password: "", role: "operator", id: null }); } function openEdit(u) { setMode("edit"); setForm({ username: u.username, password: "", role: u.role, id: u.id }); } function closeForm() { setMode(null); } function onSubmit(e) { e.preventDefault(); if (mode === "add") { create.mutate( { username: form.username, password: form.password, role: form.role, }, { onSuccess: closeForm }, ); } else { const body = { id: form.id, role: form.role }; if (form.password) body.password = form.password; update.mutate(body, { onSuccess: closeForm }); } } const mutation = mode === "add" ? create : update; return (

Users

{isLoading ? ( ) : (
{users.map((u) => ( ))}
Username Role
{u.username} {u.role}
)} {mode ? (
{mode === "add" ? "New user" : form.username}
{mode === "add" ? ( <> setForm({ ...form, username: e.target.value })} required /> ) : null} setForm({ ...form, password: e.target.value })} required={mode === "add"} minLength={mode === "add" ? 8 : undefined} placeholder={mode === "edit" ? "leave blank to keep" : ""} /> {mutation.isError ? (

{errorMessage(mutation.error)}

) : null}
) : null} {confirmDelete ? (

Delete {confirmDelete.username}?

{del.isError ? (

{errorMessage(del.error)}

) : null}
) : null}
); }