import React, { useState } from "react"; import firebase from "firebase/app"; import "firebase/storage"; import { Stack } from "@mui/system"; import { Button } from "@mui/material"; const IDLE = 0; const IMAGE_SET = 1; const UPLOADING = 2; const DONE = 3; function ImageUpload({ onImageURLSet }) { const [state, setState] = useState(); const [image, setImage] = useState(null); const [imageUrl, setImageUrl] = useState(""); const [progress, setProgress] = useState(0); const handleChange = (e) => { if (e.target.files[0]) { // setState(1); let image = e.target.files[0]; const uploadTask = firebase .storage() .ref(`images/${image.name}`) .put(image); setState(UPLOADING); uploadTask.on( "state_changed", (snapshot) => { const progress = Math.round( (snapshot.bytesTransferred / snapshot.totalBytes) * 100 ); setProgress(progress); }, (error) => { console.log(error); }, () => { firebase .storage() .ref("images") .child(image.name) .getDownloadURL() .then((url) => { setImageUrl(url); setProgress(0); setImage(null); onImageURLSet(url); setState(3); }); } ); } }; let componente; switch (state) { default: case IDLE: componente = ( <> ); break; case IMAGE_SET: componente = ( ); break; case UPLOADING: componente = (
); break; case DONE: componente = (
); } return componente; } export default ImageUpload;