From 0e4664d9ad7cb5b01475cdd12e332f9e92eb76f5 Mon Sep 17 00:00:00 2001 From: reiyua Date: Thu, 11 Jan 2024 12:43:49 +0000 Subject: [PATCH] Semi working file upload progress bar --- src/App.js | 52 ++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 36 insertions(+), 16 deletions(-) diff --git a/src/App.js b/src/App.js index d6e400a..ba364cb 100644 --- a/src/App.js +++ b/src/App.js @@ -16,6 +16,7 @@ import Form from 'react-bootstrap/Form'; import Button from 'react-bootstrap/Button'; import 'bootstrap/dist/css/bootstrap.min.css'; import Col from 'react-bootstrap/Col'; +import ProgressBar from 'react-bootstrap/ProgressBar'; // Import DisplayEntries component which displays existing reviews import DisplayEntries from "./components/DisplayEntries.js"; @@ -39,6 +40,7 @@ export function MyForm(props) { const [unbasedTakes, setUnbasedTakes] = useState([]); const storage = getStorage(); const storageRef = ref(storage, `media/${fileupload.name}`); + const [progress, setProgress] = useState(0); // Fetch incidents from Firestore when the component mounts if (!getApps().length) { @@ -67,21 +69,37 @@ export function MyForm(props) { // Handle file uploading to Firebase Storage if (fileupload) { const uploadTask = uploadBytesResumable(storageRef, fileupload); + + // Track the progress of the upload task + uploadTask.on('state_changed', + (snapshot) => { + // Calculate the progress percentage + const progress = (snapshot.bytesTransferred / fileupload.size) * 100; + console.log('Upload is ' + progress + '% done'); - - // Wait for the upload to finish - await uploadTask.then(async () => { - // Get the download URL after the upload is complete - const fileUrl = await getDownloadURL(uploadTask.snapshot.ref); - - // Add the file URL to the form submission in Firestore along with other variables under the collection "unbasedtakes" with variable named "fileURL" - unbasedData.fileUrl = fileUrl; - }); - } - + // Update the progress state + setProgress(progress); + }, + (error) => { + // Handle errors + console.log(error); + }, + () => { + // Wait for the upload to finish + uploadTask.then(async () => { + // Get the download URL after the upload is complete + const fileUrl = await getDownloadURL(uploadTask.snapshot.ref); + + // Add the file URL to the form submission in Firestore along with other variables under the collection "unbasedtakes" with variable named "fileURL" + unbasedData.fileUrl = fileUrl; + }); + } + ); + } + const col = collection(db, `unbasedtakes`) const ref = await addDoc(col, unbasedData) - console.log(ref) + console.log(ref); alert("Form submitted successfully!"); window.location.reload(); } @@ -132,17 +150,19 @@ export function MyForm(props) { setFileupload(e.target.files[0]); }} /> - + {/* Display the progress bar */} + + - -
+
+

Existing Unbased Takes

View existing entries in the card's below.

-
+ ); }