'use client'; import { useState } from 'react'; import Link from 'next/link'; import { useRouter } from 'next/navigation'; import { Search, ArrowUpDown, Eye, Edit2, Trash2, Users } from 'lucide-react'; import type { Client } from '@/lib/types/client'; import { transformClient } from '@/lib/types/client'; import { deleteClient } from '../actions'; interface ClientListProps { initialClients: Client[]; } export function ClientList({ initialClients }: ClientListProps) { const router = useRouter(); const [searchQuery, setSearchQuery] = useState(''); const [isDeleting, setIsDeleting] = useState(null); // Transform clients with computed fields const clients = initialClients.map(transformClient); // Client-side filtering (for instant feedback) const filteredClients = clients.filter((client) => { if (!searchQuery) return true; const query = searchQuery.toLowerCase(); return ( client.first_name.toLowerCase().includes(query) || client.last_name.toLowerCase().includes(query) || client.full_name.toLowerCase().includes(query) ); }); const handleSearch = (value: string) => { setSearchQuery(value); // Update URL with search param const params = new URLSearchParams(); if (value) params.set('search', value); router.push(`/epd/clients?${params.toString()}`); }; const handleDelete = async (id: string, name: string) => { if (!confirm(`Weet u zeker dat u ${name} wilt verwijderen?`)) { return; } setIsDeleting(id); try { await deleteClient(id); router.refresh(); } catch (error) { console.error('Error deleting client:', error); alert('Fout bij verwijderen van cliënt'); } finally { setIsDeleting(null); } }; return (
{/* Search Bar */}
handleSearch(e.target.value)} className="w-full pl-10 pr-4 py-2 border border-slate-300 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-teal-500 focus:border-transparent" />
{/* Empty State */} {filteredClients.length === 0 && (

{searchQuery ? 'Geen resultaten' : 'Geen cliënten'}

{searchQuery ? 'Probeer een andere zoekopdracht' : 'Voeg uw eerste cliënt toe om te beginnen'}

{!searchQuery && ( Nieuwe cliënt toevoegen )}
)} {/* Desktop Table View */} {filteredClients.length > 0 && (
{filteredClients.map((client) => ( ))}
Naam Leeftijd Geboortedatum Toegevoegd Acties
{client.first_name[0]} {client.last_name[0]}
{client.full_name}
{client.age} jaar {new Date(client.birth_date).toLocaleDateString('nl-NL')} {new Date(client.created_at).toLocaleDateString('nl-NL')}
)} {/* Mobile Card View */} {filteredClients.length > 0 && (
{filteredClients.map((client) => (
{client.first_name[0]} {client.last_name[0]}

{client.full_name}

{client.age} jaar

Geboortedatum: {new Date(client.birth_date).toLocaleDateString('nl-NL')}
Toegevoegd: {new Date(client.created_at).toLocaleDateString('nl-NL')}
Bekijken Bewerken
))}
)}
); }