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: '', sizeUpload: this.props.sizeUpload === undefined ? 1 : this.props.sizeUpload } } 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' }) } } } componentDidMount() { if (this.props.docName !== undefined && this.props.docName !== "") { // console.log('masuk'); this.setState({ docName: this.props.docName, docSize: this.props.docSize, inputVisible: false, editVisible: true }) } } 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(sizeFile); if (this.props.intent === 'management') { if (acceptedFiles) { // if (this.props.acceptedFiles.includes(fileType)) { if ((acceptedFiles[0].size / 1000).toFixed(0) < (this.props.sizeUpload * 1000)) { 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 ${this.props.sizeUpload} MB`, 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, editVisible: false, inputVisible: true, uploadProgress: false, percentage: '0' }) this.props.onDelete("delete") } else { this.setState({ previewVisible: false, editVisible: 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 < this.state.sizeUpload * 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 { if (this.state.sizeFile < this.state.sizeUpload * 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} {/* edit */} {this.state.editVisible ?
{this.state.docName}
{this.state.docSize/1000} KB
: 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