'use client' import type { WebhookEndpointListItem } from '@admin/actions/webhooks' import { deleteWebhook } from '@admin/actions/webhooks' import { Button } from '@admin/components/ui/button' import { Dialog, DialogBody, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from '@admin/components/ui/dialog' import { Spinner } from '@admin/components/ui/spinner' import { useMutation, useQueryClient } from '@tanstack/react-query' import { toast } from 'sonner' interface DeleteWebhookDialogProps { webhook: WebhookEndpointListItem | null open: boolean onOpenChange: (open: boolean) => void } export function DeleteWebhookDialog({ webhook, open, onOpenChange }: DeleteWebhookDialogProps) { const queryClient = useQueryClient() const mutation = useMutation({ mutationFn: async () => { if (!webhook) throw new Error('No webhook selected') const result = await deleteWebhook(webhook.id) if (!result.success) { throw new Error(result.error || 'Failed to delete this webhook') } return result }, onSuccess: async () => { toast.success('Webhook deleted') await queryClient.invalidateQueries({ queryKey: ['webhooks'] }) await queryClient.invalidateQueries({ queryKey: ['webhook-subscriptions'] }) await queryClient.invalidateQueries({ queryKey: ['webhook-deliveries'] }) onOpenChange(false) }, onError: (error: Error) => { toast.error(error.message || 'Failed to delete this webhook') } }) const isPending = mutation.isPending return ( Delete webhook? {webhook ? `"${webhook.name}" stops receiving events. Its subscriptions and delivery history are deleted too.` : 'This webhook stops receiving events.'}

This action cannot be undone.

) }