diff --git a/Frontend/src/components/FileUploadModal.jsx b/Frontend/src/components/FileUploadModal.jsx index b47341c..bb70631 100644 --- a/Frontend/src/components/FileUploadModal.jsx +++ b/Frontend/src/components/FileUploadModal.jsx @@ -1,81 +1,173 @@ -import React, { useState } from "react"; +import { useState, useEffect } from "react"; import { useSelector } from "react-redux"; +import PropTypes from "prop-types"; const FileUploadModal = ({ show, onClose, onUploadSuccess }) => { const currentPath = useSelector((state) => state.path.currentPath); const [file, setFile] = useState(null); - const [message, setMessage] = useState(""); const [uploading, setUploading] = useState(false); + const [uploadMessage, setUploadMessage] = useState(""); + const [newFolderName, setNewFolderName] = useState(""); + const [creatingFolder, setCreatingFolder] = useState(false); + const [folderMessage, setFolderMessage] = useState(""); + const username = localStorage.getItem("username"); + const API_URL = import.meta.env.VITE_API_URL || "http://localhost:8080"; + useEffect(() => { + const handleEsc = (e) => { + if (e.key === "Escape") onClose(); + }; + document.addEventListener("keydown", handleEsc); + return () => document.removeEventListener("keydown", handleEsc); + }, [onClose]); + + const isFolderNameValid = (name) => { + return /^[a-zA-Z0-9-_ ]+$/.test(name); // disallow special chars like / \ * ? etc. + }; const uploadFileToHDFS = async () => { if (!file) { - setMessage("Please select a file before uploading."); + setUploadMessage("⚠️ Please select a file before uploading."); return; } - const formData = new FormData(); + formData.append("file", file); formData.append("hdfsPath", currentPath); formData.append("uploadedFileName", file.name); - formData.append("username", "kalas"); + formData.append("username", username); try { setUploading(true); - setMessage("Uploading file..."); + setUploadMessage("⏳ Uploading file..."); + const response = await fetch(`${API_URL}/api/hdfs/uploadFile`, { + method: "POST", + body: formData, + }); + if (!response.ok) { + const errorText = await response.text(); + setUploadMessage(`❌ Upload failed: ${errorText}`); + } else { + setUploadMessage("✅ File uploaded successfully!"); + onUploadSuccess(); + setTimeout(() => { + setUploadMessage(""); + onClose(); + }, 1000); + } + } catch (err) { + console.error(err); + setUploadMessage("❌ An error occurred during upload."); + } finally { + setUploading(false); + } + }; + const createFolder = async () => { + if (!newFolderName.trim()) { + setFolderMessage("⚠️ Please enter a folder name."); + return; + } + if (!isFolderNameValid(newFolderName.trim())) { + setFolderMessage("❌ Folder name contains invalid characters."); + return; + } + + try { + setCreatingFolder(true); + setFolderMessage("⏳ Creating folder..."); + const folderPath = + currentPath === "/" ? "" : currentPath.replace(/\/$/, ""); + const newFolderPath = `${folderPath}/${newFolderName}`; + console.log(newFolderPath); const response = await fetch( - `http://192.168.29.61:8080/api/hdfs/uploadFile`, - { method: "POST", body: formData } + `${API_URL}/api/hdfs/createFolder?hdfsPath=${newFolderPath}`, + { method: "POST" } ); if (!response.ok) { const errorText = await response.text(); - setMessage(`Upload failed: ${errorText}`); + setFolderMessage(`❌ Folder creation failed: ${errorText}`); } else { - setMessage("File uploaded successfully!"); - onUploadSuccess(); // Notify Dashboard to refresh file list - setTimeout(onClose, 1000); + setFolderMessage("✅ Folder created successfully!"); + onUploadSuccess(); + setNewFolderName(""); + setTimeout(() => { + setFolderMessage(""); + onClose(); + }, 1000); } - } catch (error) { - console.error(error); - setMessage("An error occurred during upload."); + } catch (err) { + console.error(err); + setFolderMessage("❌ An error occurred during folder creation."); } finally { - setUploading(false); + setCreatingFolder(false); } }; if (!show) return null; return ( -
{message}
} -+ Selected file: {file.name} +
+ )} + {uploadMessage && ( +{uploadMessage}
+ )} +{folderMessage}
+ )} +