import { Pencil } from "lucide-react"; import { useState } from "react"; import { ApiError } from "../../api/client"; import { Spinner } from "../../components/Spinner"; import { useToast } from "../../context/ToastContext"; import { useAdminUpdateUser, useAdminUsers } from "../../hooks/admin"; // DEV-ТОЛЬКО: удаление аккаунтов. Импорт используется лишь под import.meta.env.DEV, // поэтому в прод/тест-сборке вырезается тришейкингом (как и dev-вход). import { DevDeleteAccountButton } from "./DevDeleteAccountButton"; export function AdminAccountsPage() { const { data: users, isLoading } = useAdminUsers(); const update = useAdminUpdateUser(); const toast = useToast(); const [editId, setEditId] = useState(null); const [editName, setEditName] = useState(""); if (isLoading) return ; const startEdit = (id: number, nickname: string) => { setEditId(id); setEditName(nickname); }; const saveName = async () => { const name = editName.trim(); if (editId == null || !name) return; try { await update.mutateAsync({ userId: editId, nickname: name }); toast.show("Ник обновлён"); setEditId(null); } catch (e) { toast.show(e instanceof ApiError ? e.message : "Не удалось переименовать"); } }; const toggleActive = async (id: number, isActive: boolean) => { await update.mutateAsync({ userId: id, is_active: !isActive }).catch(() => {}); toast.show("Сохранено"); }; return (
{/* Название раздела уже в активной вкладке админки. */}
{(users ?? []).map((u) => (
{editId === u.id ? ( // Режим переименования.
setEditName(e.target.value)} onKeyDown={(e) => { if (e.key === "Enter") saveName(); if (e.key === "Escape") setEditId(null); }} />
) : (
{u.nickname} {u.role === "admin" && админ}
#{u.id} · {u.auth_provider} · {u.is_active ? "активен" : "отключён"}
{u.role !== "admin" && (
{import.meta.env.DEV && ( )}
)}
)}
))}
); }