From fa109f85e36986093f49437a4f89bd999de191a7 Mon Sep 17 00:00:00 2001 From: Alexander Borg Date: Thu, 28 Aug 2025 07:31:52 +0200 Subject: [PATCH] Fix jwt-token --- client/src/pages/Devices.jsx | 126 ++++++++++++++++++++++++++++++++++- 1 file changed, 124 insertions(+), 2 deletions(-) diff --git a/client/src/pages/Devices.jsx b/client/src/pages/Devices.jsx index 53633a8..ae0d1ff 100644 --- a/client/src/pages/Devices.jsx +++ b/client/src/pages/Devices.jsx @@ -16,6 +16,7 @@ const Devices = () => { const [loading, setLoading] = useState(true); const [showAddModal, setShowAddModal] = useState(false); const [editingDevice, setEditingDevice] = useState(null); + const [filter, setFilter] = useState('all'); // 'all', 'approved', 'pending' useEffect(() => { fetchDevices(); @@ -42,6 +43,26 @@ const Devices = () => { setShowAddModal(true); }; + const handleApproveDevice = async (deviceId) => { + try { + await api.post(`/devices/${deviceId}/approve`); + fetchDevices(); + } catch (error) { + console.error('Error approving device:', error); + } + }; + + const handleRejectDevice = async (deviceId) => { + if (window.confirm('Are you sure you want to reject this device?')) { + try { + await api.post(`/devices/${deviceId}/reject`); + fetchDevices(); + } catch (error) { + console.error('Error rejecting device:', error); + } + } + }; + const handleDeleteDevice = async (deviceId) => { if (window.confirm('Are you sure you want to deactivate this device?')) { try { @@ -74,6 +95,14 @@ const Devices = () => { return 'Lost'; }; + const filteredDevices = devices.filter(device => { + if (filter === 'approved') return device.is_approved; + if (filter === 'pending') return !device.is_approved; + return true; // 'all' + }); + + const pendingCount = devices.filter(device => !device.is_approved).length; + if (loading) { return (
@@ -91,6 +120,11 @@ const Devices = () => {

Manage your drone detection devices + {pendingCount > 0 && ( + + {pendingCount} pending approval + + )}

+ {/* Filter Tabs */} +
+ +
+ {/* Device Grid */}
- {devices.map((device) => ( -
+ {filteredDevices.map((device) => ( +
@@ -115,6 +190,11 @@ const Devices = () => {

{device.name || `Device ${device.id}`}

+ {!device.is_approved && ( + + Needs Approval + + )}
+
+ Approval + + {device.is_approved ? 'Approved' : 'Pending'} + +
+
Device ID @@ -206,6 +295,22 @@ const Devices = () => { {/* Device Actions */}
+ {!device.is_approved ? ( +
+ + +
+ ) : null}
+ {filteredDevices.length === 0 && devices.length > 0 && ( +
+ +

+ No {filter === 'all' ? '' : filter} devices +

+

+ {filter === 'pending' + ? 'No devices are currently pending approval.' + : filter === 'approved' + ? 'No devices have been approved yet.' + : 'No devices match the current filter.' + } +

+
+ )} + {devices.length === 0 && (