import { FormEvent, useState } from "react"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { Plus, Users } from "lucide-react"; import { api, Role, User } from "../api/client"; import { DataTable } from "../components/DataTable"; import { buttonClass, Field, inputClass, selectClass } from "../components/FormControls"; import { Modal } from "../components/Modal"; import { PageHeader } from "../components/PageHeader"; export function UsersRoles() { const queryClient = useQueryClient(); const users = useQuery({ queryKey: ["users"], queryFn: () => api("/users") }); const roles = useQuery({ queryKey: ["roles"], queryFn: () => api("/roles") }); const [roleForm, setRoleForm] = useState({ name: "Helpdesk", permissions: "clusters:read,networks:read,audit:read" }); const [userForm, setUserForm] = useState({ email: "operator@nexafabric.local", display_name: "Operator", password: "ChangeMe_12345", role_id: "" }); const [roleOpen, setRoleOpen] = useState(false); const [userOpen, setUserOpen] = useState(false); const createRole = useMutation({ mutationFn: () => api("/roles", { method: "POST", body: JSON.stringify({ name: roleForm.name, permissions: roleForm.permissions.split(",").map((item) => item.trim()).filter(Boolean) }) }), onSuccess: () => { setRoleOpen(false); queryClient.invalidateQueries({ queryKey: ["roles"] }); }, }); const createUser = useMutation({ mutationFn: () => api("/users", { method: "POST", body: JSON.stringify({ email: userForm.email, display_name: userForm.display_name, password: userForm.password, role_ids: userForm.role_id ? [userForm.role_id] : [] }) }), onSuccess: () => { setUserOpen(false); queryClient.invalidateQueries({ queryKey: ["users"] }); }, }); async function submitRole(event: FormEvent) { event.preventDefault(); await createRole.mutateAsync(); } async function submitUser(event: FormEvent) { event.preventDefault(); await createUser.mutateAsync(); } return ( <>
setRoleOpen(false)}>
Add Role
setRoleForm({ ...roleForm, name: event.target.value })} /> setRoleForm({ ...roleForm, permissions: event.target.value })} />
setUserOpen(false)}>
Add User
setUserForm({ ...userForm, email: event.target.value })} /> setUserForm({ ...userForm, display_name: event.target.value })} /> setUserForm({ ...userForm, password: event.target.value })} />
[]} columns={[{ key: "email", label: "Email" }, { key: "display_name", label: "Name" }, { key: "is_active", label: "Active" }]} /> []} columns={[{ key: "name", label: "Role" }, { key: "permissions", label: "Permissions" }]} />
); }