'use client'; import { useEffect, useState } from 'react'; import { useRouter } from 'next/navigation'; import AdminLayout from '../../components/AdminLayout'; import { AddBeneficiaryModal } from '../../components/AddBeneficiaryModal'; import { Button } from '../../components/ui/Button'; import { getBeneficiaries } from '../../lib/api'; export default function BeneficiariesPage() { const router = useRouter(); const [beneficiaries, setBeneficiaries] = useState([]); const [loading, setLoading] = useState(true); const [isModalOpen, setIsModalOpen] = useState(false); useEffect(() => { loadBeneficiaries(); }, []); const loadBeneficiaries = async () => { try { const data = await getBeneficiaries(); setBeneficiaries(data.beneficiaries || []); } catch (err) { console.error('Failed to load beneficiaries:', err); } finally { setLoading(false); } }; const handleAddSuccess = (newBeneficiary) => { loadBeneficiaries(); router.push(`/admin/beneficiaries/${newBeneficiary.id}`); }; const handleCardClick = (id) => { router.push(`/admin/beneficiaries/${id}`); }; return (

Beneficiaries

Users being monitored (elderly relatives)

{loading ? (

Loading...

) : beneficiaries.length === 0 ? (

No beneficiaries yet

Click the button above to add your first beneficiary

) : (
{beneficiaries.map((ben) => (
handleCardClick(ben.id)} role="button" tabIndex={0} onKeyDown={(e) => { if (e.key === 'Enter' || e.key === ' ') { handleCardClick(ben.id); } }} >
{getInitials(ben.first_name, ben.last_name)}

{ben.first_name || ben.last_name ? `${ben.first_name || ''} ${ben.last_name || ''}`.trim() : 'Unknown'}

{ben.email}

{(ben.address_city || ben.address_country) && (

{[ben.address_city, ben.address_country].filter(Boolean).join(', ')}

)} {ben.phone && (

{ben.phone}

)}
))}
)}
Total: {beneficiaries.length} beneficiaries
setIsModalOpen(false)} onSuccess={handleAddSuccess} />
); } function getInitials(first, last) { const f = first?.[0] || ''; const l = last?.[0] || ''; return (f + l).toUpperCase() || '?'; } const styles = { header: { display: 'flex', justifyContent: 'space-between', alignItems: 'flex-start', marginBottom: '24px', }, title: { fontSize: '24px', fontWeight: '600', marginBottom: '4px', }, subtitle: { fontSize: '14px', color: 'var(--text-muted)', }, loading: { color: 'var(--text-muted)', }, empty: { background: 'white', padding: '48px', borderRadius: '12px', textAlign: 'center', }, emptyIcon: { color: 'var(--text-muted)', marginBottom: '16px', display: 'flex', justifyContent: 'center', }, emptyTitle: { fontSize: '18px', fontWeight: '600', marginBottom: '8px', }, emptyHint: { fontSize: '14px', color: 'var(--text-muted)', marginBottom: '24px', }, emptyAction: { display: 'flex', justifyContent: 'center', }, grid: { display: 'grid', gridTemplateColumns: 'repeat(auto-fill, minmax(300px, 1fr))', gap: '16px', }, card: { background: 'white', borderRadius: '12px', padding: '20px', display: 'flex', gap: '16px', cursor: 'pointer', transition: 'box-shadow 0.2s, transform 0.2s', }, avatar: { width: '48px', height: '48px', borderRadius: '50%', background: 'var(--surface)', color: 'var(--primary)', display: 'flex', alignItems: 'center', justifyContent: 'center', fontSize: '16px', fontWeight: '600', flexShrink: 0, }, cardContent: { flex: 1, minWidth: 0, }, name: { fontSize: '16px', fontWeight: '600', marginBottom: '4px', }, email: { fontSize: '13px', color: 'var(--text-secondary)', marginBottom: '8px', overflow: 'hidden', textOverflow: 'ellipsis', }, location: { fontSize: '13px', color: 'var(--text-muted)', }, phone: { fontSize: '13px', color: 'var(--text-muted)', marginTop: '4px', }, stats: { marginTop: '24px', fontSize: '13px', color: 'var(--text-muted)', }, };