import { FormEvent, useState } from "react"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { api } from "../../api/client"; import { Page } from "../../components/Page"; import { Table } from "../../components/Table"; const columns = [ { key: "username", label: "Username" }, { key: "name", label: "Display name" }, { key: "role", label: "Role" }, { key: "status", label: "Status" } ]; export function UsersPage() { const queryClient = useQueryClient(); const query = useQuery({ queryKey: ["users"], queryFn: api.users }); const [form, setForm] = useState({ username: "", display_name: "", email: "", password: "", role: "user" }); const createMutation = useMutation({ mutationFn: api.createUser, onSuccess: () => { setForm({ username: "", display_name: "", email: "", password: "", role: "user" }); void queryClient.invalidateQueries({ queryKey: ["users"] }); } }); const rows = query.data?.map((user) => ({ username: user.username, name: user.display_name, role: user.role, status: user.is_active ? "active" : "disabled" })) ?? []; function onSubmit(event: FormEvent) { event.preventDefault(); createMutation.mutate(form); } return ( Admin managed} >
setForm((value) => ({ ...value, username: event.target.value }))} /> setForm((value) => ({ ...value, display_name: event.target.value }))} /> setForm((value) => ({ ...value, email: event.target.value }))} /> setForm((value) => ({ ...value, password: event.target.value }))} />
{query.isError ?

Unable to load users from the API.

: null} {createMutation.isError ?

Unable to create user.

: null} {row[column.key as keyof (typeof rows)[number]]}} /> ); }