import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { useState, type FormEvent } from "react"; import { api } from "../../api/client"; import { useAuth } from "../../auth/AuthContext"; import { toast } from "../../components/Toaster"; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, } from "@/components/ui/alert-dialog"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; import { Skeleton } from "@/components/ui/skeleton"; export default function AdminUsers() { const qc = useQueryClient(); const { user: me } = useAuth(); const usersQ = useQuery({ queryKey: ["users"], queryFn: api.listUsers }); const [u, setU] = useState(""); const [p, setP] = useState(""); const [role, setRole] = useState<"member" | "admin">("member"); const create = useMutation({ mutationFn: () => api.createUser(u.trim(), p, role), onSuccess: () => { toast("ok", "用户已创建"); setU(""); setP(""); void qc.invalidateQueries({ queryKey: ["users"] }); }, onError: (e) => toast("err", e instanceof Error ? e.message : "创建失败"), }); const del = useMutation({ mutationFn: (id: number) => api.deleteUser(id), onSuccess: () => { toast("ok", "用户已删除(其阅读进度一并删除)"); void qc.invalidateQueries({ queryKey: ["users"] }); }, onError: (e) => toast("err", e instanceof Error ? e.message : "删除失败"), }); function submit(e: FormEvent) { e.preventDefault(); create.mutate(); } return (