diff --git a/client/src/components/AlertModals.jsx b/client/src/components/AlertModals.jsx index e15b519..cf7fe15 100644 --- a/client/src/components/AlertModals.jsx +++ b/client/src/components/AlertModals.jsx @@ -20,6 +20,20 @@ export const EditAlertModal = ({ rule, onClose, onSuccess }) => { 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); + } catch (error) { + console.error('Error fetching drone types:', error); + } + }; + + fetchDroneTypes(); + }, []); useEffect(() => { if (rule) { @@ -71,7 +85,19 @@ export const EditAlertModal = ({ rule, onClose, onSuccess }) => { setSaving(true); try { - await api.put(`/alerts/rules/${rule.id}`, formData); + 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) { @@ -169,13 +195,7 @@ export const EditAlertModal = ({ rule, onClose, onSuccess }) => {
Leave empty to monitor all drone types
- {[ - { id: 0, name: 'Consumer/Hobby' }, - { id: 1, name: 'Orlan/Military' }, - { id: 2, name: 'Professional/Commercial' }, - { id: 3, name: 'Racing/High-speed' }, - { id: 4, name: 'Unknown/Custom' } - ].map(droneType => ( + {droneTypes.map(droneType => ( ))}