'use client'; import { useState, useEffect } from 'react'; import { AddigyDevice } from '@/lib/types/addigy'; import { PageHeader } from '@/components/navigation/page-header'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table'; import { Card, CardContent } from '@/components/ui/card'; import { Checkbox } from '@/components/ui/checkbox'; import { Button } from '@/components/ui/button'; import { Skeleton } from '@/components/ui/skeleton'; import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert'; import { EmptyState } from '@/components/ui/empty-state'; import { StatusBadge } from '@/components/ui/status-badge'; import { Check, X, Laptop, RefreshCw } from 'lucide-react'; export default function AddigyDevicesPage() { const [devices, setDevices] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [filterOnline, setFilterOnline] = useState(false); useEffect(() => { void fetchDevices(); // eslint-disable-next-line react-hooks/exhaustive-deps }, [filterOnline]); async function fetchDevices() { setLoading(true); setError(null); try { const url = filterOnline ? '/api/addigy-devices?online=true' : '/api/addigy-devices'; const res = await fetch(url, { cache: 'no-store' }); const result = await res.json(); if (result.success) { setDevices(result.data); } else { setError(result.error || 'Failed to fetch devices'); } } catch (err) { setError(err instanceof Error ? err.message : 'Unknown error'); } finally { setLoading(false); } } return ( <> } />
{error && ( Failed to load {error} )} {loading ? (
) : devices.length === 0 ? (
) : ( Device Model OS Current user Status Free disk Security {devices.map((device) => { const freePct = device['Free Disk Percentage']; const freeTone = freePct === undefined ? 'text-muted-foreground' : freePct < 20 ? 'text-destructive' : freePct < 40 ? 'text-amber-600 dark:text-amber-400' : 'text-emerald-600 dark:text-emerald-400'; return (
{device['Device Name']}
{device['Serial Number'] || '—'}
{device['Device Model Name'] || 'Unknown'} {device['MAC OS X Version'] || device['iOS Version'] || '—'} {device['Current User'] || '—'} {device.online ? 'Online' : 'Offline'} {freePct !== undefined ? `${freePct}%` : '—'}
); })}
)}
); } function SecurityFlag({ label, enabled }: { label: string; enabled: boolean }) { return ( {enabled ? : } {label} ); }