import { useRouter } from 'expo-router'; import { AlertTriangle, CalendarDays, CheckCircle2, FileText, QrCode, User, CalendarClock, LayoutDashboard } from 'lucide-react-native'; import React, { useState, useContext, useEffect } from 'react'; import { RefreshControl, ScrollView, Text, TouchableOpacity, View } from 'react-native'; import { AuthContext } from '@/utils/authContext'; import { ActivityItem } from '@/types/types'; import api from '@/utils/api'; import LoadingScreen from '@/components/LoadingScreen'; export default function HomeScreen() { const router = useRouter(); const { user } = useContext(AuthContext); const [isLoading, setIsLoading] = useState(true); const [refreshing, setRefreshing] = useState(false); const [incompleteAttendance, setIncompleteAttendance] = useState(null); const [recentActivities, setRecentActivities] = useState([]); const fetchDashboardData = async () => { try { if (!refreshing) setIsLoading(true); // Fetch incomplete attendance data from API const attendance = await api.get('/attendance/incomplete'); setIncompleteAttendance(attendance.data); // Fetch recent activities data from API const activities = await api.get('/user/recent-activities'); setRecentActivities(activities.data); } catch (error) { console.error('Errore nel recupero dei dati della dashboard:', error); } finally { setIsLoading(false); setRefreshing(false); } }; const getActivityConfig = (type: string) => { switch (type) { case 'document': return { icon: FileText, bg: 'bg-gray-100', color: '#4b5563' }; case 'attendance': return { icon: CheckCircle2, bg: 'bg-[#099499]/10', color: '#099499' }; case 'permit': return { icon: CalendarClock, bg: 'bg-[#2563eb]/10', color: '#2563eb' }; default: return { icon: LayoutDashboard, bg: 'bg-gray-100', color: '#9ca3af' }; } }; useEffect(() => { fetchDashboardData(); }, []); const onRefresh = () => { setRefreshing(true); fetchDashboardData(); }; if (isLoading && !refreshing) { return ( ); } return ( {/* Banner Custom */} Benvenuto {user?.name} {user?.surname} {user?.role} router.push('/profile')}> {/* Contenuto Scrollabile */} } > {/* Warning Card */} {incompleteAttendance && ( Presenza incompleta {incompleteAttendance} router.push('/attendance')} className="bg-orange-50 px-5 py-3 rounded-xl ml-2 active:bg-orange-100"> Risolvi )} {/* Quick Actions */} Azioni Rapide router.push('/attendance')} className="flex-1 bg-white p-6 rounded-3xl shadow-sm items-center justify-center gap-4 border border-gray-100 active:scale-[0.98]" > Nuova Presenza router.push('/permits')} className="flex-1 bg-white p-6 rounded-3xl shadow-sm items-center justify-center gap-4 border border-gray-100 active:scale-[0.98]" > Gestisci Permessi {/* Recent Activity */} Ultime Attività {/* Vedi tutto */} {recentActivities.map((item) => { const config = getActivityConfig(item.type); const IconComponent = config.icon; return ( {/* Icona */} {/* Titolo e Sottotitolo */} {item.title} {item.subtitle} {/* Data */} {item.date_display} ); })} {/* Empty State */} {!isLoading && recentActivities.length === 0 && ( Nessuna attività recente )} {/* Loading State */} {isLoading && recentActivities.length === 0 && ( Caricamento... )} ); }