/opt/mawid/apps/dashboard/app/(app)/patients
NameSizeModeActions
[id]/-0755rm
page.tsx21590644editdlrm
Edit: /opt/mawid/apps/dashboard/app/(app)/patients/page.tsx (2159B)
'use client'; import { useEffect, useState } from 'react'; import Link from 'next/link'; import { api } from '@/lib/api'; import { useLang } from '@/lib/i18n'; import { Badge, Card, Input, Spinner } from '@/components/ui'; interface PatientRow { id: string; name: string | null; waPhone: string; language: string; tags: string[]; lastVisitAt: string | null; } export default function PatientsPage() { const { t, lang } = useLang(); const [search, setSearch] = useState(''); const [patients, setPatients] = useState(null); useEffect(() => { const handle = setTimeout(() => { api(`/patients?search=${encodeURIComponent(search)}`).then(setPatients); }, 250); return () => clearTimeout(handle); }, [search]); return (
setSearch(e.target.value)} /> {patients === null ? ( ) : patients.length === 0 ? (

{t('noResults')}

) : ( {patients.map((p) => (
{p.name ?? '—'}
{p.waPhone}
{p.tags.map((tag) => ( {tag} ))} {p.language} {p.lastVisitAt && ( {new Date(p.lastVisitAt).toLocaleDateString(lang === 'ar' ? 'ar' : lang)} )}
))}
)}
); }