import React, { Component, createRef } from "react" import Dropzone from 'react-dropzone' import LinearProgress from '@material-ui/core/LinearProgress' import Images from "../assets/Images" import MuiAlert from '@material-ui/lab/Alert'; import { withStyles, Snackbar } from "@material-ui/core"; const dropzoneRef = createRef() const Alert = withStyles({ })((props) => ); class Upload extends Component { constructor(props) { super(props) this.state = { file: '', nameFile: 'File name', typeFile: '', sizeFile: '0', inputVisible: true, previewVisible: false, labelUploadVisible: false, iconButtonUpload: 'fa fa-1x fa-upload', uploadProgress: false, percentage: '0', completed: '0', alert: false, alertMessage: '' } } componentDidUpdate(prevs, next) { if (prevs.percentage > 0 && prevs.percentage <= 100) { console.log('old percentage', prevs.percentage) console.log('new percentage', this.state.percentage) if (this.state.percentage !== prevs.percentage) { this.setState({ percentage: prevs.percentage }) } } if (prevs.result === 'success' || prevs.result === 'error') { if (this.state.uploadProgress === true) { this.setState({ uploadProgress: false, percentage: '100', iconButtonUpload: 'fa fa-1x fa-check' }) } } } onDrop = (acceptedFiles) => { const formData = new FormData() let length = acceptedFiles[0].name.split(".").length let fileType = acceptedFiles[0].name.split(".")[length - 1] formData.append('file', acceptedFiles[0]) console.log(fileType); if (this.props.intent === 'management') { if (acceptedFiles) { if (this.props.acceptedFiles.includes(fileType)) { if (this.state.sizeFile < 10000) { this.setState({ file: acceptedFiles[0], typeFile: fileType, nameFile: acceptedFiles[0].name, sizeFile: (acceptedFiles[0].size / 1000).toFixed(0), previewVisible: true, inputVisible: false, uploadProgress: false, percentage: '0' }) this.props.onHandle(acceptedFiles[0]) } else { this.setState({ alertMessage: 'The file is too large. Allowed maximum size is 10MB', alert: true }) // alert('File Tidak Boleh Lebih Dari 1MB') } } else { this.setState({ alertMessage: 'File extension not allowed', alert: true }) // alert('File Tidak Mendukung') } } else { this.setState({ previewVisible: false, inputVisible: true, uploadProgress: false, percentage: '0' }) this.setState({ alertMessage: "File extension not allowed", alert: true }) // alert("Unsupported Media Type") } } else { if (acceptedFiles) { this.setState({ file: acceptedFiles[0], typeFile: fileType, nameFile: acceptedFiles[0].name, sizeFile: (acceptedFiles[0].size / 1000).toFixed(0), previewVisible: true, inputVisible: false, uploadProgress: false, percentage: '0' }) this.props.onHandle(acceptedFiles[0]) } else { this.setState({ previewVisible: false, inputVisible: true, uploadProgress: false, percentage: '0' }) this.setState({ alertMessage: "File extension not allowed", alert: true }) // alert("Unsupported Media Type") } } } onRemove = () => { if (this.props.intent === "management") { this.setState({ previewVisible: false, inputVisible: true, uploadProgress: false, percentage: '0' }) this.props.onDelete("delete") } else { this.setState({ previewVisible: false, inputVisible: true, uploadProgress: false, percentage: '0' }) } } onUpload = () => { // this.props.onUpload() var strProps = this.props.acceptedFiles var strState = this.state.typeFile // console.log(strProps); // console.log(strState); if (strProps.includes(strState)) { if (this.props.intent === 'management') { if (this.state.sizeFile < 10000) { this.props.onUpload() } else { this.setState({ alertMessage: 'The file is too large. Allowed maximum size is 10MB', alert: true }) // alert('File Tidak Boleh Lebih Dari 1MB') } } else { if (this.state.sizeFile < 1000) { this.props.onUpload() } else { this.setState({ alertMessage: 'The file is too large. Allowed maximum size is 1MB', alert: true }) // alert('File Tidak Boleh Lebih Dari 1MB') } } } else { this.setState({ alertMessage: 'File extension not allowed', alert: true }) // alert('File Tidak Mendukung') } } closeAlert() { this.setState({ alert: false }) } render() { return (
{({ getRootProps, getInputProps }) => (
this.closeAlert()}> this.closeAlert()} severity={"warning"}> {this.state.alertMessage}
{/* label */} {this.state.inputVisible ?
Drag 'n' drop some files here, or click to select files
: null} {/* file */} {this.state.previewVisible ?
{this.state.nameFile}
{this.state.sizeFile} KB
{/* this.state.uploadProgress === true ? (
({this.state.percentage})%
) : null */} {this.props.type === 'upload' ?
Uploading {this.state.percentage}%
: null} {this.props.disableButtonUpload !== true ? (
) : null}
{this.props.type === 'upload' ?
: null} {/* this.state.uploadProgress === true ? (
) : null */}
: null} {/* image */} {/*
*/}
)}
) } } export default Upload