import { ArrowLeft, Download, FileText, MapPin, Plus, Search, CalendarIcon } from 'lucide-react-native'; import React, { useEffect, useState } from 'react'; import { useRouter } from 'expo-router'; import { RangePickerModal } from '@/components/RangePickerModal'; import { Alert, RefreshControl, ScrollView, Text, TextInput, TouchableOpacity, View } from 'react-native'; import { DocumentItem } from '@/types/types'; import api from '@/utils/api'; import dayjs from 'dayjs'; import LoadingScreen from '@/components/LoadingScreen'; import { formatTimestamp, parseTimestamp } from '@/utils/dateTime'; import AddDocumentModal from '@/components/AddDocumentModal'; import { downloadAndShareDocument, uploadDocument } from '@/utils/documentUtils'; export default function DocumentsScreen() { const router = useRouter(); const [documents, setDocuments] = useState([]); const [isLoading, setIsLoading] = useState(true); const [refreshing, setRefreshing] = useState(false); const [showUploadModal, setShowUploadModal] = useState(false); const [isUploading, setIsUploading] = useState(false); const [showRangePicker, setShowRangePicker] = useState(false); const [searchTerm, setSearchTerm] = useState(''); const [range, setRange] = useState<{ startDate: any; endDate: any }>({ startDate: null, endDate: null }); const fetchUserDocuments = async () => { try { if (!refreshing) setIsLoading(true); // Fetch Documenti Utente const response = await api.get(`/attachment/get-user-attachments`); setDocuments(response.data); } catch (error) { console.error('Errore nel recupero dei documenti utente:', error); Alert.alert('Errore', 'Impossibile recuperare i documenti. Riprova più tardi.'); } finally { setIsLoading(false); setRefreshing(false); } }; useEffect(() => { fetchUserDocuments(); }, []); const onRefresh = () => { setRefreshing(true); fetchUserDocuments(); }; // Filtra Documenti in base a searchTerm e range const filteredDocs = documents.filter(doc => { // Filtro Testuale const matchesSearch = doc.title.toLowerCase().includes(searchTerm.toLowerCase()); if (!matchesSearch) return false; // Filtro Date Range if (range.startDate || range.endDate) { const docDate = parseTimestamp(doc.updated_at); // doc.date è "DD/MM/YYYY" // Controllo Data Inizio if (range.startDate) { // dayjs(range.startDate).toDate() converte in oggetto Date JS standard const start = dayjs(range.startDate).startOf('day').toDate(); if (docDate < start) return false; } // Controllo Data Fine if (range.endDate) { const end = dayjs(range.endDate).endOf('day').toDate(); if (docDate > end) return false; } } return true; }); // Gestione Caricamento Documento const handleUploadDocument = async (file: any, customTitle?: string) => { setIsUploading(true); try { await uploadDocument(file, null, customTitle); Alert.alert('Successo', 'Documento caricato con successo!'); setShowUploadModal(false); fetchUserDocuments(); } catch (error) { console.error('Errore nel caricamento del documento:', error); Alert.alert('Errore', 'Impossibile caricare il documento. Riprova più tardi.'); } finally { setIsUploading(false); } }; if (isLoading && !refreshing) { return ( ); } return ( {/* Header */} router.back()} className="p-2 -ml-2 rounded-full active:bg-gray-100"> Documenti Gestisci i tuoi documenti {/* Search + Date Row */} {/* Search Bar */} {/* Date Filter Button */} setShowRangePicker(true)} className={`p-4 bg-white rounded-2xl shadow-sm border ${range.startDate ? 'border-[#099499]' : 'border-gray-200'}`} > {/* Modale Unico per il Range */} setShowRangePicker(false)} currentRange={range} onApply={setRange} /> {/* List */} } > {filteredDocs.map((doc) => ( {doc.title} {formatTimestamp(doc.updated_at)} downloadAndShareDocument(doc.mimetype, doc.title, doc.url)} className="p-4 bg-gray-50 rounded-2xl active:bg-gray-100"> ))} {filteredDocs.length === 0 && ( Nessun documento trovato )} {/* FAB */} setShowUploadModal(true)} className="absolute bottom-8 right-6 w-16 h-16 bg-[#099499] rounded-full shadow-lg items-center justify-center active:scale-90" > {/* Modale Caricamento Documento */} setShowUploadModal(false)} onUpload={handleUploadDocument} isUploading={isUploading} /> ); }