import { useState, useEffect } from "react"; import { useMutation, useQueryClient } from "@tanstack/react-query"; import { MessageSquare, TestTube } from "lucide-react"; import { apiClient } from "../lib/api"; import { Button } from "./ui/button"; import { Input } from "./ui/input"; import { Label } from "./ui/label"; import { Switch } from "./ui/switch"; import { EditButton } from "./ui/edit-button"; import { Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerTitle, DrawerTrigger, } from "./ui/drawer"; import type { NotificationSettings, DiscordConfig } from "../types/api"; interface DiscordConfigDrawerProps { settings: NotificationSettings | undefined; trigger?: React.ReactNode; } export default function DiscordConfigDrawer({ settings, trigger, }: DiscordConfigDrawerProps) { const [open, setOpen] = useState(false); const [config, setConfig] = useState({ webhook: "", enabled: true, }); const queryClient = useQueryClient(); useEffect(() => { if (settings?.discord) { setConfig({ ...settings.discord }); } }, [settings]); const updateMutation = useMutation({ mutationFn: (discordConfig: DiscordConfig) => apiClient.updateNotificationSettings({ ...settings, discord: discordConfig, filters: settings?.filters || { case_insensitive: [], case_sensitive: [], }, }), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["notificationSettings"] }); queryClient.invalidateQueries({ queryKey: ["notificationServices"] }); setOpen(false); }, onError: (error) => { console.error("Failed to update Discord configuration:", error); }, }); const testMutation = useMutation({ mutationFn: () => apiClient.testNotification({ service: "discord", message: "Test notification from Leggen - Discord configuration is working!", }), onSuccess: () => { console.log("Test Discord notification sent successfully"); }, onError: (error) => { console.error("Failed to send test Discord notification:", error); }, }); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); updateMutation.mutate(config); }; const handleTest = () => { testMutation.mutate(); }; const isConfigValid = config.webhook.trim().length > 0 && config.webhook.includes("discord.com/api/webhooks"); return ( {trigger || }
Discord Configuration Configure Discord webhook notifications for transaction alerts
{/* Enable/Disable Toggle */}
setConfig({ ...config, enabled })} />
{/* Webhook URL */}
setConfig({ ...config, webhook: e.target.value }) } disabled={!config.enabled} />

Create a webhook in your Discord server settings under Integrations → Webhooks

{/* Configuration Status */} {config.enabled && (
{isConfigValid ? "Configuration Valid" : "Invalid Webhook URL"}
{!isConfigValid && config.webhook.trim().length > 0 && (

Please enter a valid Discord webhook URL

)}
)}
{config.enabled && isConfigValid && ( )}
); }