'use client'; import { useState } from 'react'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import { useRouter } from 'next/navigation'; import { Trash2 } from 'lucide-react'; import { useTranslations } from 'next-intl'; import { toast } from 'sonner'; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from '@/components/ui/alert-dialog'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Spinner } from '@/components/ui/spinner'; import { type PagesProject, PagesService } from '@/lib/services/openflare'; import { projectsQueryKey } from '../../components/pages-utils'; interface DangerZoneCardProps { project: PagesProject; } export function DangerZoneCard({ project }: DangerZoneCardProps) { const t = useTranslations('pages'); const tCommon = useTranslations('common'); const router = useRouter(); const queryClient = useQueryClient(); const [deleteOpen, setDeleteOpen] = useState(false); const deleteProjectMutation = useMutation({ mutationFn: () => PagesService.deleteProject(project.id), onSuccess: async () => { toast.success(t('deleted')); await queryClient.invalidateQueries({ queryKey: projectsQueryKey }); router.push('/pages'); }, onError: (error) => { toast.error(error instanceof Error ? error.message : t('deleteFailed')); }, }); return ( <> {t('danger.title')} {t('danger.deleteProject')} {t('danger.deleteHint', { name: project.name, slug: project.slug, })} setDeleteOpen(true)} > {t('danger.deleteProject')} {t('danger.confirmTitle')} {t('danger.confirmDesc', { name: project.name })} {tCommon('cancel')} { event.preventDefault(); deleteProjectMutation.mutate(); }} > {deleteProjectMutation.isPending ? ( ) : null} {t('danger.confirm')} > ); }
{t('danger.deleteProject')}
{t('danger.deleteHint', { name: project.name, slug: project.slug, })}