import ConstructionSiteCard from '@/components/ConstructionSiteCard'; import FilterModal from '@/components/FilterModal'; import LoadingScreen from '@/components/LoadingScreen'; import api from '@/utils/api'; import { AuthContext } from '@/utils/authContext'; import { useRouter } from 'expo-router'; import { StatusBar } from 'expo-status-bar'; import { FileText, Filter, QrCode, User, ShoppingBag, ChartNoAxesCombined } from 'lucide-react-native'; import React, { useContext, useEffect, useState } from 'react'; import { RefreshControl, ScrollView, Text, TouchableOpacity, View } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; import { Client, ConstructionSite } from '@/types/types'; export default function HomeScreen() { const router = useRouter(); const { user } = useContext(AuthContext); const [isLoading, setIsLoading] = useState(true); const [refreshing, setRefreshing] = useState(false); // Construction Sites & Filters state const [constructionSites, setConstructionSites] = useState([]); const [clients, setClients] = useState([]); const [filterClient, setFilterClient] = useState(null); const [isFilterVisible, setIsFilterVisible] = useState(false); const activeFiltersCount = filterClient ? 1 : 0; const fetchClients = async () => { try { const response = await api.get('/construction-site/get-clients'); if (response.data?.success) { setClients(response.data.clients || []); } } catch (error) { console.error('Errore nel recupero dei committenti:', error); } }; const fetchConstructionSites = async (clientId = filterClient) => { try { if (!refreshing) setIsLoading(true); const params = { id_client: clientId }; const response = await api.post('/construction-site/list', { params }); if (response.data?.success) { setConstructionSites(response.data.result || []); } } catch (error) { console.error('Errore nel recupero dei cantieri:', error); } finally { setIsLoading(false); setRefreshing(false); } }; useEffect(() => { fetchClients(); fetchConstructionSites(); }, []); const onRefresh = () => { setRefreshing(true); fetchConstructionSites(); }; if (isLoading && !refreshing) { return ( ); } return ( {/* Custom Banner */} Progeco Costruzioni Generali S.R.L. Ciao {user?.firstName} {/* Profile Avatar */} router.push('/profile')}> {/* Scrollable Content */} } > {/* Quick Actions / Centro di Controllo */} {user?.isAdmin ? 'Centro di Controllo' : 'Azioni Rapide'} {user?.isAdmin ? ( router.push('/dashboard')} className="flex-1 bg-white p-6 rounded-3xl shadow-sm items-center justify-center gap-4 border border-slate-100 active:scale-[0.98]" > Dashboard router.push('/invoice')} className="flex-1 bg-white p-6 rounded-3xl shadow-sm items-center justify-center gap-4 border border-slate-100 active:scale-[0.98]" > Fatture ) : ( router.push('/attendance?autoScan=true')} className="flex-1 bg-white p-6 rounded-3xl shadow-sm items-center justify-center gap-4 border border-slate-100 active:scale-[0.98]" > Nuova Presenza router.push('/activity/add')} className="flex-1 bg-white p-6 rounded-3xl shadow-sm items-center justify-center gap-4 border border-slate-100 active:scale-[0.98]" > Nuova{'\n'}Attività )} {/* Cantieri */} Lista Cantieri {constructionSites.map((item, index) => ( router.push(`/construction-site/${item.id}`)} /> ))} {!isLoading && constructionSites.length === 0 && ( Nessun cantiere trovato. )} {isLoading && constructionSites.length === 0 && ( Caricamento... )} {/* FAB Filter */} setIsFilterVisible(true)} className="absolute bottom-8 right-6 w-16 h-16 bg-[#1071C2] rounded-full shadow-lg items-center justify-center active:scale-90" > {activeFiltersCount > 0 && ( {activeFiltersCount} )} {/* Filter Modal */} setIsFilterVisible(false)} onApply={(_, __, client) => { setFilterClient(client); setIsFilterVisible(false); fetchConstructionSites(client); }} onReset={() => { setFilterClient(null); setIsFilterVisible(false); fetchConstructionSites(null); }} /> ); }