Skip to content
Snippets Groups Projects
Commit 2f035b18 authored by Ganapathi Subramanyam  Jayam's avatar Ganapathi Subramanyam Jayam :dart:
Browse files

great work commited

parent 1a662336
No related branches found
No related tags found
No related merge requests found
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
"react-github-login-button": "^1.0.1", "react-github-login-button": "^1.0.1",
"react-google-button": "^0.7.2", "react-google-button": "^0.7.2",
"react-icons": "^4.2.0", "react-icons": "^4.2.0",
"react-id-generator": "^3.0.1",
"react-loader-spinner": "^4.0.0", "react-loader-spinner": "^4.0.0",
"react-router-bootstrap": "^0.25.0", "react-router-bootstrap": "^0.25.0",
"react-router-dom": "^5.2.0", "react-router-dom": "^5.2.0",
...@@ -15741,6 +15742,14 @@ ...@@ -15741,6 +15742,14 @@
"resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.2.0.tgz", "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.2.0.tgz",
"integrity": "sha512-rmzEDFt+AVXRzD7zDE21gcxyBizD/3NqjbX6cmViAgdqfJ2UiLer8927/QhhrXQV7dEj/1EGuOTPp7JnLYVJKQ==" "integrity": "sha512-rmzEDFt+AVXRzD7zDE21gcxyBizD/3NqjbX6cmViAgdqfJ2UiLer8927/QhhrXQV7dEj/1EGuOTPp7JnLYVJKQ=="
}, },
"node_modules/react-id-generator": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/react-id-generator/-/react-id-generator-3.0.1.tgz",
"integrity": "sha512-YxorMaYxB8ItXA3Cuadcl/8ZaquU9Tzrrr5ogFL8tNqevF96cmCtx3LZLXYqBEj3BxoV9aBIK5yJjIuX/XHQ1A==",
"peerDependencies": {
"react": ">= 16.8.0"
}
},
"node_modules/react-is": { "node_modules/react-is": {
"version": "17.0.1", "version": "17.0.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz",
...@@ -34276,6 +34285,12 @@ ...@@ -34276,6 +34285,12 @@
"resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.2.0.tgz", "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.2.0.tgz",
"integrity": "sha512-rmzEDFt+AVXRzD7zDE21gcxyBizD/3NqjbX6cmViAgdqfJ2UiLer8927/QhhrXQV7dEj/1EGuOTPp7JnLYVJKQ==" "integrity": "sha512-rmzEDFt+AVXRzD7zDE21gcxyBizD/3NqjbX6cmViAgdqfJ2UiLer8927/QhhrXQV7dEj/1EGuOTPp7JnLYVJKQ=="
}, },
"react-id-generator": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/react-id-generator/-/react-id-generator-3.0.1.tgz",
"integrity": "sha512-YxorMaYxB8ItXA3Cuadcl/8ZaquU9Tzrrr5ogFL8tNqevF96cmCtx3LZLXYqBEj3BxoV9aBIK5yJjIuX/XHQ1A==",
"requires": {}
},
"react-is": { "react-is": {
"version": "17.0.1", "version": "17.0.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz",
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
"react-github-login-button": "^1.0.1", "react-github-login-button": "^1.0.1",
"react-google-button": "^0.7.2", "react-google-button": "^0.7.2",
"react-icons": "^4.2.0", "react-icons": "^4.2.0",
"react-id-generator": "^3.0.1",
"react-loader-spinner": "^4.0.0", "react-loader-spinner": "^4.0.0",
"react-router-bootstrap": "^0.25.0", "react-router-bootstrap": "^0.25.0",
"react-router-dom": "^5.2.0", "react-router-dom": "^5.2.0",
......
import React, { useState } from "react" import React, { useState } from 'react'
import ReactDOM from "react-dom" import ReactDOM from 'react-dom'
import { faFileUpload } from "@fortawesome/free-solid-svg-icons" import { faFileUpload } from '@fortawesome/free-solid-svg-icons'
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import { storage, database } from '../fire.js' import { storage, database } from '../fire.js'
import { ROOT_FOLDER } from "../hooks/useFolder" import { ROOT_FOLDER } from '../hooks/useFolder'
import { v4 as uuidV4 } from "uuid" import { v4 as uuidV4 } from 'uuid'
import { ProgressBar, Toast } from "react-bootstrap" import { ProgressBar, Toast } from 'react-bootstrap'
import firebase from 'firebase' import firebase from 'firebase'
export default function AddFile({ currentFolder }) { export default function AddFile({ currentFolder }) {
const [uploadingFiles, setUploadingFiles] = useState([]) const [uploadingFiles, setUploadingFiles] = useState([])
function handleUpload(e) { function handleUpload(e) {
const file = e.target.files[0] const file = e.target.files[0]
if (currentFolder == null || file == null) return if (currentFolder == null || file == null) return
const id = uuidV4() const id = uuidV4()
setUploadingFiles(prevUploadingFiles => [ setUploadingFiles((prevUploadingFiles) => [
...prevUploadingFiles, ...prevUploadingFiles,
{ id: id, name: file.name, progress: 0, error: false }, { id: id, name: file.name, progress: 0, error: false },
]) ])
const filePath = const uniqueid = uuidV4()
currentFolder === ROOT_FOLDER
? `${currentFolder.path.join("/")}/${file.name}`
: `${currentFolder.path.join("/")}/${currentFolder.name}/${file.name}`
const uploadTask = storage const uploadTask = storage
.ref(`/files/${firebase.auth().currentUser.uid}/${filePath}`) .ref(`/files/${firebase.auth().currentUser.uid}/${uniqueid}`)
.put(file) .put(file)
uploadTask.on( uploadTask.on(
"state_changed", 'state_changed',
snapshot => { (snapshot) => {
const progress = snapshot.bytesTransferred / snapshot.totalBytes const progress = snapshot.bytesTransferred / snapshot.totalBytes
setUploadingFiles(prevUploadingFiles => { setUploadingFiles((prevUploadingFiles) => {
return prevUploadingFiles.map(uploadFile => { return prevUploadingFiles.map((uploadFile) => {
if (uploadFile.id === id) { if (uploadFile.id === id) {
return { ...uploadFile, progress: progress } return { ...uploadFile, progress: progress }
} }
...@@ -45,8 +41,8 @@ export default function AddFile({ currentFolder }) { ...@@ -45,8 +41,8 @@ export default function AddFile({ currentFolder }) {
}) })
}, },
() => { () => {
setUploadingFiles(prevUploadingFiles => { setUploadingFiles((prevUploadingFiles) => {
return prevUploadingFiles.map(uploadFile => { return prevUploadingFiles.map((uploadFile) => {
if (uploadFile.id === id) { if (uploadFile.id === id) {
return { ...uploadFile, error: true } return { ...uploadFile, error: true }
} }
...@@ -55,19 +51,19 @@ export default function AddFile({ currentFolder }) { ...@@ -55,19 +51,19 @@ export default function AddFile({ currentFolder }) {
}) })
}, },
() => { () => {
setUploadingFiles(prevUploadingFiles => { setUploadingFiles((prevUploadingFiles) => {
return prevUploadingFiles.filter(uploadFile => { return prevUploadingFiles.filter((uploadFile) => {
return uploadFile.id !== id return uploadFile.id !== id
}) })
}) })
uploadTask.snapshot.ref.getDownloadURL().then(url => { uploadTask.snapshot.ref.getDownloadURL().then((url) => {
database.files database.files
.where("name", "==", file.name) .where('name', '==', file.name)
.where("userId", "==", firebase.auth().currentUser.uid) .where('userId', '==', firebase.auth().currentUser.uid)
.where("folderId", "==", currentFolder.id) .where('folderId', '==', currentFolder.id)
.get() .get()
.then(existingFiles => { .then((existingFiles) => {
const existingFile = existingFiles.docs[0] const existingFile = existingFiles.docs[0]
if (existingFile) { if (existingFile) {
existingFile.ref.update({ url: url }) existingFile.ref.update({ url: url })
...@@ -75,6 +71,7 @@ export default function AddFile({ currentFolder }) { ...@@ -75,6 +71,7 @@ export default function AddFile({ currentFolder }) {
database.files.add({ database.files.add({
url: url, url: url,
name: file.name, name: file.name,
uniqueid: uniqueid,
createdAt: database.getTime(), createdAt: database.getTime(),
folderId: currentFolder.id, folderId: currentFolder.id,
userId: firebase.auth().currentUser.uid, userId: firebase.auth().currentUser.uid,
...@@ -88,31 +85,31 @@ export default function AddFile({ currentFolder }) { ...@@ -88,31 +85,31 @@ export default function AddFile({ currentFolder }) {
return ( return (
<> <>
<label className="btn btn-outline-success btn-sm m-0 mr-2"> <label className='btn btn-outline-success btn-sm m-0 mr-2'>
<FontAwesomeIcon icon={faFileUpload} /> <FontAwesomeIcon icon={faFileUpload} />
<input <input
name="upload" name='upload'
type="file" type='file'
onChange={handleUpload} onChange={handleUpload}
style={{ opacity: 0, position: "absolute", left: "-9999px" }} style={{ opacity: 0, position: 'absolute', left: '-9999px' }}
/> />
</label> </label>
{uploadingFiles.length > 0 && {uploadingFiles.length > 0 &&
ReactDOM.createPortal( ReactDOM.createPortal(
<div <div
style={{ style={{
position: "absolute", position: 'absolute',
bottom: "4rem", bottom: '4rem',
right: "2rem", right: '2rem',
maxWidth: "250px", maxWidth: '250px',
}} }}
> >
{uploadingFiles.map(file => ( {uploadingFiles.map((file) => (
<Toast <Toast
key={file.id} key={file.id}
onClose={() => { onClose={() => {
setUploadingFiles(prevUploadingFiles => { setUploadingFiles((prevUploadingFiles) => {
return prevUploadingFiles.filter(uploadFile => { return prevUploadingFiles.filter((uploadFile) => {
return uploadFile.id !== file.id return uploadFile.id !== file.id
}) })
}) })
...@@ -120,18 +117,18 @@ export default function AddFile({ currentFolder }) { ...@@ -120,18 +117,18 @@ export default function AddFile({ currentFolder }) {
> >
<Toast.Header <Toast.Header
closeButton={file.error} closeButton={file.error}
className="text-truncate w-100 d-block" className='text-truncate w-100 d-block'
> >
{file.name} {file.name}
</Toast.Header> </Toast.Header>
<Toast.Body> <Toast.Body>
<ProgressBar <ProgressBar
animated={!file.error} animated={!file.error}
variant={file.error ? "danger" : "primary"} variant={file.error ? 'danger' : 'primary'}
now={file.error ? 100 : file.progress * 100} now={file.error ? 100 : file.progress * 100}
label={ label={
file.error file.error
? "Error" ? 'Error'
: `${Math.round(file.progress * 100)}%` : `${Math.round(file.progress * 100)}%`
} }
/> />
......
...@@ -51,13 +51,10 @@ export default function Dropzone({ currentFolder }) { ...@@ -51,13 +51,10 @@ export default function Dropzone({ currentFolder }) {
...prevUploadingFiles, ...prevUploadingFiles,
{ id: id, name: file.name, progress: 0, error: false }, { id: id, name: file.name, progress: 0, error: false },
]) ])
const filePath = const uniqueid = uuidV4()
currentFolder === ROOT_FOLDER
? `${currentFolder.path.join('/')}/${file.name}`
: `${currentFolder.path.join('/')}/${currentFolder.name}/${file.name}`
const uploadTask = storage const uploadTask = storage
.ref(`/files/${firebase.auth().currentUser.uid}/${filePath}`) .ref(`/files/${firebase.auth().currentUser.uid}/${uniqueid}`)
.put(file) .put(file)
uploadTask.on( uploadTask.on(
...@@ -105,6 +102,7 @@ export default function Dropzone({ currentFolder }) { ...@@ -105,6 +102,7 @@ export default function Dropzone({ currentFolder }) {
database.files.add({ database.files.add({
url: url, url: url,
name: file.name, name: file.name,
uniqueid:uniqueid,
createdAt: database.getTime(), createdAt: database.getTime(),
folderId: currentFolder.id, folderId: currentFolder.id,
userId: firebase.auth().currentUser.uid, userId: firebase.auth().currentUser.uid,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment