import { useState } from "react"; import { errorMessage } from "../api/client.js"; import { useCreateUser, useUpdateUser } from "../api/hooks.js"; import { FormInput, FormSelect } from "./FormControls.jsx"; /** * Add / edit a local user. * Reusable: mount when open; pass `user` for edit. * * @param {"add" | "edit"} mode * @param {{ id: string, username: string, role: string }} [user] * @param {() => void} onClose * @param {(saved: unknown) => void} [onSaved] */ export function UserEditorModal({ mode, user, onClose, onSaved }) { const create = useCreateUser(); const update = useUpdateUser(); const [form, setForm] = useState(() => ({ username: user?.username || "", password: "", role: user?.role || "operator", id: user?.id || null, })); const mutation = mode === "add" ? create : update; function onSubmit(e) { e.preventDefault(); if (mode === "add") { create.mutate( { username: form.username, password: form.password, role: form.role, }, { onSuccess: (data) => { onSaved?.(data?.user ?? data); onClose(); }, }, ); return; } const body = { id: form.id, role: form.role }; if (form.password) body.password = form.password; update.mutate(body, { onSuccess: (data) => { onSaved?.(data?.user ?? data); onClose(); }, }); } const title = mode === "add" ? "New user" : form.username; return (

{title}

{mode === "add" ? ( ) : null} {mutation.isError ? (

{errorMessage(mutation.error)}

) : null}
); }