import React, { useState, useEffect } from 'react'; import api from '../services/api'; import { format } from 'date-fns'; import { XMarkIcon } from '@heroicons/react/24/outline'; // Edit Alert Rule Modal export const EditAlertModal = ({ rule, onClose, onSuccess }) => { const [formData, setFormData] = useState({ name: '', description: '', priority: 'medium', min_detections: 1, time_window: 300, cooldown_period: 600, alert_channels: ['sms'], min_threat_level: '', drone_types: [], device_ids: [], sms_phone_number: '', webhook_url: '' }); const [saving, setSaving] = useState(false); const [droneTypes, setDroneTypes] = useState([]); useEffect(() => { const fetchDroneTypes = async () => { try { const response = await api.get('/drone-types'); setDroneTypes(response.data.data || []); } catch (error) { console.error('Error fetching drone types:', error); setDroneTypes([]); } }; fetchDroneTypes(); }, []); useEffect(() => { if (rule) { setFormData({ name: rule.name || '', description: rule.description || '', priority: rule.priority || 'medium', min_detections: rule.min_detections || 1, time_window: rule.time_window || 300, cooldown_period: rule.cooldown_period || 600, alert_channels: rule.alert_channels || ['sms'], min_threat_level: rule.min_threat_level || '', drone_types: rule.drone_types || [], device_ids: rule.device_ids || [], sms_phone_number: rule.sms_phone_number || '', webhook_url: rule.webhook_url || '' }); } }, [rule]); const handleChange = (e) => { const { name, value } = e.target; setFormData(prev => ({ ...prev, [name]: value })); }; const handleChannelChange = (channel, checked) => { setFormData(prev => ({ ...prev, alert_channels: checked ? [...prev.alert_channels, channel] : prev.alert_channels.filter(c => c !== channel) })); }; const handleDroneTypeChange = (droneType, checked) => { setFormData(prev => ({ ...prev, drone_types: checked ? [...prev.drone_types, droneType] : prev.drone_types.filter(type => type !== droneType) })); }; const handleSubmit = async (e) => { e.preventDefault(); setSaving(true); try { const payload = { ...formData }; // Clean up empty values if (!payload.description || payload.description.trim() === '') delete payload.description; if (!payload.device_ids || payload.device_ids.length === 0) delete payload.device_ids; if (!payload.drone_types || payload.drone_types.length === 0) delete payload.drone_types; // Only include webhook_url if webhook channel is selected if (!payload.alert_channels || !payload.alert_channels.includes('webhook')) { delete payload.webhook_url; } await api.put(`/alerts/rules/${rule.id}`, payload); onSuccess(); onClose(); } catch (error) { console.error('Error updating alert rule:', error); alert('Failed to update alert rule'); } finally { setSaving(false); } }; return (
{detection.threat_assessment.description}
{JSON.stringify(detection.raw_data, null, 2)}