({
open,
onClose,
alerts,
history,
onAddAlert,
onRemoveAlert,
onToggleAlert,
onMarkRead,
onMarkAllRead,
onClearHistory,
allMarkets,
prefill,
notifPermission,
onRequestPermission,
onHoverEnter,
onHoverLeave,
}: AlertManagerProps)
| 51 | } |
| 52 | |
| 53 | function AlertManagerContent({ |
| 54 | open, |
| 55 | onClose, |
| 56 | alerts, |
| 57 | history, |
| 58 | onAddAlert, |
| 59 | onRemoveAlert, |
| 60 | onToggleAlert, |
| 61 | onMarkRead, |
| 62 | onMarkAllRead, |
| 63 | onClearHistory, |
| 64 | allMarkets, |
| 65 | prefill, |
| 66 | notifPermission, |
| 67 | onRequestPermission, |
| 68 | onHoverEnter, |
| 69 | onHoverLeave, |
| 70 | }: AlertManagerProps) { |
| 71 | const { t } = useI18n(); |
| 72 | const [activeTab, setActiveTab] = useState<Tab>("alerts"); |
| 73 | |
| 74 | // Create form state |
| 75 | const [formType, setFormType] = useState<AlertType>("price_cross"); |
| 76 | const [formMarketSearch, setFormMarketSearch] = useState(prefill?.marketTitle || ""); |
| 77 | const [formMarketId, setFormMarketId] = useState(prefill?.marketId || ""); |
| 78 | const [formMarketTitle, setFormMarketTitle] = useState(prefill?.marketTitle || ""); |
| 79 | const [formThreshold, setFormThreshold] = useState("50"); |
| 80 | const [formDirection, setFormDirection] = useState<"above" | "below">("above"); |
| 81 | const [formCategory, setFormCategory] = useState<Category | "">(""); |
| 82 | const [formTag, setFormTag] = useState(""); |
| 83 | const [formSignalType, setFormSignalType] = useState<SignalType | "">(""); |
| 84 | const [formSignalStrength, setFormSignalStrength] = useState<"strong" | "moderate" | "weak">("moderate"); |
| 85 | const [formMinUsdcSize, setFormMinUsdcSize] = useState("5000"); |
| 86 | const [formHoursBeforeEnd, setFormHoursBeforeEnd] = useState("24"); |
| 87 | const [showForm, setShowForm] = useState(!!prefill); |
| 88 | |
| 89 | const handleKeyDown = useCallback( |
| 90 | (e: KeyboardEvent) => { |
| 91 | if (e.key === "Escape") onClose(); |
| 92 | }, |
| 93 | [onClose] |
| 94 | ); |
| 95 | |
| 96 | useEffect(() => { |
| 97 | if (!open) return; |
| 98 | document.addEventListener("keydown", handleKeyDown); |
| 99 | return () => document.removeEventListener("keydown", handleKeyDown); |
| 100 | }, [open, handleKeyDown]); |
| 101 | |
| 102 | if (!open) return null; |
| 103 | |
| 104 | // Market search results |
| 105 | const searchResults = formMarketSearch.length >= 2 |
| 106 | ? allMarkets |
| 107 | .filter((m) => m.title.toLowerCase().includes(formMarketSearch.toLowerCase())) |
| 108 | .slice(0, 5) |
| 109 | : []; |
| 110 |
nothing calls this directly
no test coverage detected