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 && (