import React, { useState, useEffect } from 'react'; import { Modal, Text, TouchableOpacity, View, TextInput, ActivityIndicator } from 'react-native'; import { X, Upload, FileText, Trash2 } from 'lucide-react-native'; import * as DocumentPicker from 'expo-document-picker'; // TODO: Testare in ambiente iOS interface AddDocumentModalProps { visible: boolean; onClose: () => void; onUpload: (file: DocumentPicker.DocumentPickerAsset, customTitle?: string) => Promise; isUploading?: boolean; } export default function AddDocumentModal({ visible, onClose, onUpload, isUploading = false }: AddDocumentModalProps) { const [selectedFile, setSelectedFile] = useState(null); const [customTitle, setCustomTitle] = useState(''); // Reset dello stato quando il modale si apre/chiude useEffect(() => { if (!visible) { setSelectedFile(null); setCustomTitle(''); } }, [visible]); // TODO: Considerare selezione multipla? const pickDocument = async () => { try { const result = await DocumentPicker.getDocumentAsync({ type: '*/*', // Puoi limitare a 'application/pdf', 'image/*', ecc. copyToCacheDirectory: true, }); if (result.canceled) return; const asset = result.assets[0]; setSelectedFile(asset); // Pre-compila il titolo con il nome del file setCustomTitle(asset.name); } catch (err) { console.error("Errore selezione file:", err); } }; const handleUpload = () => { if (!selectedFile) return; // Se il titolo custom è vuoto, usiamo il nome originale onUpload(selectedFile, customTitle || selectedFile.name); }; const removeFile = () => { setSelectedFile(null); setCustomTitle(''); }; // Formatta dimensione file // TODO: Spostare in utils? const formatSize = (size?: number) => { if (!size) return '0 B'; const k = 1024; const sizes = ['B', 'KB', 'MB', 'GB']; const i = Math.floor(Math.log(size) / Math.log(k)); return parseFloat((size / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]; }; return ( {/* Header */} Carica Documento {/* Body */} {/* Area Selezione File */} {!selectedFile ? ( Tocca per selezionare un file PDF, Immagini, Word ) : ( // Visualizzazione File Selezionato {selectedFile.name} {formatSize(selectedFile.size)} )} {/* Campo Rinomina (Visibile solo se c'è un file) */} {selectedFile && ( Nome Documento (Opzionale) )} {/* Footer Buttons */} Annulla {isUploading ? ( ) : ( <> Carica )} ); }