import React, { useEffect, useState } from 'react'; import { Link } from 'react-router-dom'; import { CondoService } from '../services/mockDb'; import { Family, Condo, Notice, AppSettings } from '../types'; import { Search, ChevronRight, UserCircle, Building, Bell, AlertTriangle, Hammer, Calendar, Info, Link as LinkIcon, Check } from 'lucide-react'; export const FamilyList: React.FC = () => { const [families, setFamilies] = useState([]); const [loading, setLoading] = useState(true); const [searchTerm, setSearchTerm] = useState(''); const [activeCondo, setActiveCondo] = useState(undefined); const [notices, setNotices] = useState([]); const [userReadIds, setUserReadIds] = useState([]); const [settings, setSettings] = useState(null); const currentUser = CondoService.getCurrentUser(); useEffect(() => { const fetchData = async () => { try { CondoService.seedPayments(); const [fams, condo, allNotices, appSettings] = await Promise.all([ CondoService.getFamilies(), CondoService.getActiveCondo(), CondoService.getNotices(), CondoService.getSettings() ]); setFamilies(fams); setActiveCondo(condo); setSettings(appSettings); if (condo && currentUser && appSettings.features.notices) { const condoNotices = allNotices.filter(n => n.condoId === condo.id && n.active); setNotices(condoNotices); // Check which ones are read const readStatuses = await Promise.all(condoNotices.map(n => CondoService.getNoticeReadStatus(n.id))); const readIds = []; readStatuses.forEach((reads, idx) => { if (reads.find(r => r.userId === currentUser.id)) { readIds.push(condoNotices[idx].id); } }); setUserReadIds(readIds); } } catch (e) { console.error("Error fetching data", e); } finally { setLoading(false); } }; fetchData(); }, []); const filteredFamilies = families.filter(f => f.name.toLowerCase().includes(searchTerm.toLowerCase()) || f.unitNumber.toLowerCase().includes(searchTerm.toLowerCase()) ); const NoticeIcon = ({type}: {type: string}) => { switch(type) { case 'warning': return ; case 'maintenance': return ; case 'event': return ; default: return ; } }; if (loading) { return
Caricamento in corso...
; } if (!activeCondo) { return (

Nessun Condominio Selezionato

Seleziona o crea un condominio dalle impostazioni.

); } return (
{/* Responsive Header */}

Elenco Condomini

{activeCondo.name}

setSearchTerm(e.target.value)} />
{/* Notices Section (Visible to Users only if feature enabled) */} {settings?.features.notices && notices.length > 0 && (

Bacheca Avvisi

{notices.map(notice => { const isRead = userReadIds.includes(notice.id); return (

{notice.title}

{isRead && Letto} {!isRead && Nuovo}

{new Date(notice.date).toLocaleDateString()}

{notice.content}

{notice.link && ( Apri Link )}
); })}
)} {/* List */}
    {filteredFamilies.length === 0 ? (
  • Nessuna famiglia trovata in questo condominio.
  • ) : ( filteredFamilies.map((family) => (
  • {family.name}

    Interno: {family.unitNumber}

  • )) )}
); };