import React, { useCallback, useState } from 'react' import { useDropzone } from 'react-dropzone' import Button from '@material-ui/core/Button' import axios from 'axios' import ReactCrop from 'react-image-crop' import { Dialog } from '@material-ui/core' import { Image as CloudinaryImage } from 'cloudinary-react' import 'react-image-crop/dist/ReactCrop.css' import Svg from 'src/components/Svg' const CLOUDINARY_UPLOAD_PRESET = 'CadHub_project_images' const CLOUDINARY_UPLOAD_URL = 'https://api.cloudinary.com/v1_1/irevdev/upload' export default function ImageUploader({ onImageUpload = () => {}, imageUrl, aspectRatio, className, isEditable, width = 600, }) { const [isModalOpen, setIsModalOpen] = useState(false) const [file, setFile] = useState() const [cloudinaryId, setCloudinaryId] = useState(imageUrl) const [imageObj, setImageObj] = useState() const [crop, setCrop] = useState({ aspect: aspectRatio, unit: '%', width: 100, }) async function handleImageUpload() { const croppedFile = await getCroppedImg(imageObj, crop, 'avatar') const imageData = new FormData() imageData.append('upload_preset', CLOUDINARY_UPLOAD_PRESET) imageData.append('file', croppedFile) let upload = axios.post(CLOUDINARY_UPLOAD_URL, imageData) try { const { data } = await upload if (data && data.public_id !== '') { onImageUpload({ cloudinaryPublicId: data.public_id }) setCloudinaryId(data.public_id) setIsModalOpen(false) } } catch (e) { console.error('ERROR', e) } } // Drag and Drop const onDrop = useCallback((acceptedFiles) => { setIsModalOpen(true) const fileReader = new FileReader() fileReader.onload = () => { setFile(fileReader.result) } fileReader.readAsDataURL(acceptedFiles[0]) }, []) const { getRootProps, getInputProps, isDragActive } = useDropzone({ onDrop }) return (