import { useMutation, useQueryClient } from "@tanstack/react-query"; import { useState } from "react"; import { ApiError, api, unwrap } from "../../api/client"; import { qk } from "../../api/queryKeys"; import { ConfirmDialog } from "../../components/ConfirmDialog"; import { useToast } from "../../context/ToastContext"; /** * DEV-ТОЛЬКО кнопка жёсткого удаления аккаунта. * * Эндпоинт `DELETE /api/admin/dev/users/{id}` существует только в dev-сборке бэкенда * (backend/app/routers/dev_admin.py, исключён из прод/тест-образа). Этот модуль * рендерится лишь под `import.meta.env.DEV` в AdminAccountsPage, поэтому в прод-сборке * он не используется и вырезается тришейкингом — в прод/тест удаление недоступно. */ export function DevDeleteAccountButton({ userId, nickname, }: { userId: number; nickname: string; }) { const qc = useQueryClient(); const toast = useToast(); const [confirmOpen, setConfirmOpen] = useState(false); const del = useMutation({ mutationFn: async () => unwrap( await api.DELETE("/api/admin/dev/users/{user_id}", { params: { path: { user_id: userId } }, }), ), onSuccess: () => qc.invalidateQueries({ queryKey: qk.adminUsers }), }); return ( <> setConfirmOpen(false)} onConfirm={async () => { setConfirmOpen(false); try { await del.mutateAsync(); toast.show("Аккаунт удалён"); } catch (e) { toast.show(e instanceof ApiError ? e.message : "Не удалось удалить"); } }} /> ); }