'use client'; import { useEffect, useState } from 'react'; import { useRouter } from 'next/navigation'; import AdminLayout from '../../components/AdminLayout'; import { getDeployments } from '../../lib/api'; export default function DeploymentsPage() { const router = useRouter(); const [deployments, setDeployments] = useState([]); const [search, setSearch] = useState(''); const [loading, setLoading] = useState(true); useEffect(() => { loadDeployments(); }, []); const loadDeployments = async () => { try { const data = await getDeployments(); setDeployments(data.deployments || []); } catch (err) { console.error('Failed to load deployments:', err); } finally { setLoading(false); } }; const filteredDeployments = deployments.filter((dep) => { if (!search) return true; const s = search.toLowerCase(); return ( dep.deployment_id?.toString().includes(s) || dep.context?.toLowerCase().includes(s) || dep.owner?.email?.toLowerCase().includes(s) ); }); const getGenderLabel = (gender) => { switch (gender) { case 1: return 'Male'; case 2: return 'Female'; default: return '—'; } }; return (

Deployments

setSearch(e.target.value)} style={styles.search} />
{loading ? (

Loading...

) : (
ID Owner Context Persons Gender Devices Actions
{filteredDeployments.length === 0 ? (
No deployments found
) : ( filteredDeployments.map((dep) => (
#{dep.deployment_id} {dep.owner ? dep.owner.email : '—'} {dep.context || '—'} {dep.persons || 0} {getGenderLabel(dep.gender)}
)) )}
)}
Total: {deployments.length} deployments With devices: {deployments.filter(d => d.device_count > 0).length}
); } function DevicesBadge({ count }) { return ( 0 ? '#D1FAE5' : '#F3F4F6', color: count > 0 ? '#065F46' : '#6B7280', }}> {count} devices ); } const styles = { header: { display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: '24px', }, title: { fontSize: '24px', fontWeight: '600', }, search: { padding: '10px 16px', fontSize: '14px', border: '1px solid var(--border)', borderRadius: '8px', width: '280px', outline: 'none', }, loading: { color: 'var(--text-muted)', }, table: { background: 'white', borderRadius: '12px', overflow: 'hidden', }, tableHeader: { display: 'grid', gridTemplateColumns: '0.5fr 1.5fr 1.5fr 0.7fr 0.7fr 0.8fr 0.6fr', gap: '16px', padding: '16px 20px', background: 'var(--surface)', fontSize: '12px', fontWeight: '600', color: 'var(--text-muted)', textTransform: 'uppercase', }, tableRow: { display: 'grid', gridTemplateColumns: '0.5fr 1.5fr 1.5fr 0.7fr 0.7fr 0.8fr 0.6fr', gap: '16px', padding: '16px 20px', borderBottom: '1px solid var(--border)', alignItems: 'center', fontSize: '14px', }, id: { fontWeight: '600', color: 'var(--primary)', }, owner: { color: 'var(--text-secondary)', fontSize: '13px', }, context: { fontWeight: '500', }, viewBtn: { padding: '6px 12px', background: 'var(--primary)', color: 'white', border: 'none', borderRadius: '6px', fontSize: '12px', cursor: 'pointer', }, empty: { padding: '48px', textAlign: 'center', color: 'var(--text-muted)', }, stats: { display: 'flex', gap: '24px', marginTop: '16px', fontSize: '13px', color: 'var(--text-muted)', }, };