import React, { useState, useEffect, useCallback } from 'react' import { useDropzone } from 'react-dropzone' import { Box, Image, Icon, Text, Spinner } from 'gestalt' import { request, cloudFront } from '~/services/S3' import { nanoid } from 'nanoid' import useAppContext from '~/hooks/useAppContext' const UploadItem = (props) => { const { file } = props const [uploading, setUploading] = useState(true) const [object_url, setObjectUrl] = useState(null) const [width, setWidth] = useState(1) const [height, setHeight] = useState(1) const id = nanoid() const { params } = useAppContext() useEffect(() => { getSize() }, []) const getSize = () => { const object_url = URL.createObjectURL(file) setObjectUrl(object_url) uploadFile() } const uploadFile = () => { request({ dirName: "geru-by-me/uploads", accessKeyId: params.accessKeyId, secretAccessKey: params.secretAccessKey, }).uploadFile(file, (id + file.name).replace(/\.[^/.]+$/, "")) .then(res => { props.onUploadDone(file, { url: cloudFront(res.location), }) }) .catch(err => { // console.log(err) alert(err) }) .then(() => setUploading(false)) } if(!uploading) return null return ( uploading { uploading && (
) }
) } const Upload = (props) => { const { acceptedTypes = 'image/png' } = props const [files, setFiles] = useState([]) const onDrop = useCallback(acceptedFiles => { // props.onDrop(acceptedFiles) setFiles(files => files.concat(acceptedFiles)) }, []) const {acceptedFiles, getRootProps, getInputProps} = useDropzone({ accept: { 'image/*': ['.jpeg', '.png'] }, onDrop }); const onUploadDone = (file, params) => { props.onUploadDone(params) setFiles(files.filter((current) => current.path != file.path)) } return (
Зураг оруулах
{ files.map((file, index) => ( )) }
) } export default Upload