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 && (
)
}
)
}
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