diff --git a/client/src/pages/Alerts.jsx b/client/src/pages/Alerts.jsx index b2001d0..9ea0105 100644 --- a/client/src/pages/Alerts.jsx +++ b/client/src/pages/Alerts.jsx @@ -462,10 +462,32 @@ const CreateAlertRuleModal = ({ onClose, onSave }) => { device_ids: [], drone_types: [], min_rssi: '', - max_rssi: '', - frequency_ranges: [] + max_rssi: '' }); const [saving, setSaving] = useState(false); + const [devices, setDevices] = useState([]); + const [droneTypes, setDroneTypes] = useState([]); + const [loadingData, setLoadingData] = useState(true); + + useEffect(() => { + fetchDevicesAndDroneTypes(); + }, []); + + const fetchDevicesAndDroneTypes = async () => { + try { + const [devicesResponse, droneTypesResponse] = await Promise.all([ + api.get('/devices'), + api.get('/drone-types') + ]); + + setDevices(devicesResponse.data.data || []); + setDroneTypes(droneTypesResponse.data.data || []); + } catch (error) { + console.error('Error fetching devices and drone types:', error); + } finally { + setLoadingData(false); + } + }; const handleSubmit = async (e) => { e.preventDefault(); @@ -479,7 +501,6 @@ const CreateAlertRuleModal = ({ onClose, onSave }) => { if (!payload.max_rssi) delete payload.max_rssi; if (!payload.device_ids || payload.device_ids.length === 0) payload.device_ids = null; if (!payload.drone_types || payload.drone_types.length === 0) payload.drone_types = null; - if (!payload.frequency_ranges || payload.frequency_ranges.length === 0) payload.frequency_ranges = null; await api.post('/alerts/rules', payload); onSave(); @@ -516,6 +537,15 @@ const CreateAlertRuleModal = ({ onClose, onSave }) => { })); }; + const handleDeviceChange = (deviceId, checked) => { + setFormData(prev => ({ + ...prev, + device_ids: checked + ? [...prev.device_ids, deviceId] + : prev.device_ids.filter(id => id !== deviceId) + })); + }; + return (
@@ -650,13 +680,7 @@ const CreateAlertRuleModal = ({ onClose, onSave }) => {
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 => ( ))}
+ +
+ +
+
+ Leave empty to monitor all approved devices +
+ {loadingData ? ( +
Loading devices...
+ ) : devices.length === 0 ? ( +
No devices available
+ ) : ( + devices.filter(device => device.is_approved).map(device => ( + + )) + )} +
+