"use client"; import { useState } from "react"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { Switch } from "@/components/ui/switch"; import { Bell, Loader2 } from "lucide-react"; interface CreateAlertModalProps { open: boolean; onOpenChange: (open: boolean) => void; onCreateAlert: (alert: AlertConfig) => void; prefilledToken?: { symbol: string; chain: string }; } export interface AlertConfig { tokenSymbol: string; chain: string; alertType: string; threshold?: number; enabled: boolean; } const ALERT_TYPES = [ { value: "price_above", label: "Price Above", hasThreshold: true, unit: "$" }, { value: "price_below", label: "Price Below", hasThreshold: true, unit: "$" }, { value: "price_change", label: "Price Change %", hasThreshold: true, unit: "%" }, { value: "volume_spike", label: "Volume Spike", hasThreshold: true, unit: "x" }, { value: "whale_buy", label: "Whale Buy", hasThreshold: false }, { value: "whale_sell", label: "Whale Sell", hasThreshold: false }, ]; const SUPPORTED_CHAINS = [ { value: "solana", label: "Solana" }, { value: "ethereum", label: "Ethereum" }, { value: "base", label: "Base" }, ]; export function CreateAlertModal({ open, onOpenChange, onCreateAlert, prefilledToken }: CreateAlertModalProps) { const [tokenSymbol, setTokenSymbol] = useState(prefilledToken?.symbol || ""); const [chain, setChain] = useState(prefilledToken?.chain || "solana"); const [alertType, setAlertType] = useState("price_above"); const [threshold, setThreshold] = useState(""); const [enabled, setEnabled] = useState(true); const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(""); const selectedAlertType = ALERT_TYPES.find((t) => t.value === alertType); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(""); if (!tokenSymbol.trim()) { setError("Token symbol is required"); return; } if (selectedAlertType?.hasThreshold && !threshold) { setError("Threshold value is required for this alert type"); return; } setIsLoading(true); await new Promise((resolve) => setTimeout(resolve, 500)); onCreateAlert({ tokenSymbol: tokenSymbol.toUpperCase().trim(), chain, alertType, threshold: selectedAlertType?.hasThreshold ? parseFloat(threshold) : undefined, enabled, }); // Reset form setTokenSymbol(""); setAlertType("price_above"); setThreshold(""); setEnabled(true); setIsLoading(false); onOpenChange(false); }; return ( Create Alert
setTokenSymbol(e.target.value)} className="uppercase" />
{selectedAlertType?.hasThreshold && (
setThreshold(e.target.value)} />
)}
{error &&

{error}

}
); }