import type { WebhookSummary } from "@/contracts"; import { useState, useEffect, useRef } from "react"; import { History, MoreVertical, Power, RotateCw, Trash2 } from "lucide-react"; import { Badge, Button } from "@/client/components/ui"; import { getWebhookProviderIcon } from "@/client/components/webhooks/webhook-presentation"; import { webhookProviderCatalog } from "@/lib/webhooks"; interface WebhookRowProps { webhook: WebhookSummary; onToggle: () => void; onViewDeliveries: () => void; onRotateSecret: () => void; onDelete: () => void; toggling: boolean; } export const WebhookRow = ({ webhook, onToggle, onViewDeliveries, onRotateSecret, onDelete, toggling, }: WebhookRowProps) => { const [menuOpen, setMenuOpen] = useState(false); const menuRef = useRef(null); useEffect(() => { if (!menuOpen) return; const handleClick = (e: MouseEvent) => { if (menuRef.current && !menuRef.current.contains(e.target as Node)) { setMenuOpen(false); } }; document.addEventListener("click", handleClick); return () => document.removeEventListener("click", handleClick); }, [menuOpen]); useEffect(() => { if (!menuOpen) return; const handleEscape = (event: KeyboardEvent) => { if (event.key === "Escape") { setMenuOpen(false); } }; document.addEventListener("keydown", handleEscape); return () => document.removeEventListener("keydown", handleEscape); }, [menuOpen]); return (
{/* Left */}
{getWebhookProviderIcon(webhook.provider)} {webhookProviderCatalog[webhook.provider].displayName} {webhook.enabled ? "Enabled" : "Disabled"}
{/* Right */}
{menuOpen && (
)}
); };