import React, { useState } from "react"; import { Modal, View, Text, Pressable, Platform } from "react-native"; import { useLanguage } from "@/contexts/LanguageContext"; import * as DocumentPicker from "expo-document-picker"; type SelectedFile = DocumentPicker.DocumentPickerAsset & { state ?: "Uploading" | "Uploaded" | "Error Uploading";}; type Props = { visible: boolean; onClose: () => void; onPickFile: (file?: any) => void; onRemoveFile: (index: number) => void; selectedFiles: SelectedFile[]; styles: any; }; const AddFile = ({ visible, onClose, onPickFile, onRemoveFile, selectedFiles, styles, }: Props) => { const { t } = useLanguage(); const [ isDragging, setIsDragging ] = useState(false); return ( {t.btn_add_file} {t.file_format}{'\n'}{t.file_size_limit} {/* {selectedFileName} || {t.no_files} */} {/* List of added files (or that there's no files uploaded yet) */} {selectedFiles.length === 0 ? ( {t.no_files} ) : ( selectedFiles.map((file, index) => ( {file.name} {file.state === "Uploading" && ({t.file_uploading})} {file.state === "Uploaded" && ({t.file_uploaded})} {file.state === "Error Uploading" && ({t.file_upload_failed_unknown_error})} onRemoveFile(index)} hitSlop={8} style={styles.removeFileBut} > )) )} {/* Upload area. click to add or drag and drop if on desktop web */} {Platform.OS === "web" ? (
onPickFile()} onDragOver={(e) => { e.preventDefault(); setIsDragging(true); }} onDragLeave={() => { setIsDragging(false); }} onDrop={(e) => { e.preventDefault(); setIsDragging(false); const files = e.dataTransfer.files; if (!files || files.length === 0) return; const file = files[0]; onPickFile(file); }} style={{ width: "100%", minHeight: 150, display: "flex", alignItems: "center", justifyContent: "center", borderStyle: "dashed", borderWidth: 1, borderColor: "#999", borderRadius: 10, cursor: "pointer", }} > {isDragging ? ( {t.file_add_drop} ) : ( {t.file_add_instructions_prefix} {t.click} {t.file_add_instructions_suffix} )}
) : ( onPickFile()} style={({ hovered, pressed }) => [ styles.feedbackInput, hovered && { opacity: 0.9 }, pressed && { opacity: 0.7 }, ]} > )}
{/* Buttons */} [ styles.feedbackCancel, hovered && { opacity: 0.9 }, pressed && { opacity: 0.7 }, ]} > {t.comment_cancel} { onClose(); }} style={({ hovered, pressed }) => [ styles.feedbackSubmit, hovered && { opacity: 0.9 }, pressed && { opacity: 0.7 }, ]} > {t.comment_submit}
); }; export default AddFile;