import { useRef, useState } from 'react' import AvatarEditor from 'react-avatar-editor' import Button from 'react-bootstrap/Button' import BootstrapForm from 'react-bootstrap/Form' import Upload from './upload' import EditImage from '../svgs/image-edit-fill.svg' import Moon from '../svgs/moon-fill.svg' import { useShowModal } from './modal' export default function Avatar ({ onSuccess }) { const [uploading, setUploading] = useState() const showModal = useShowModal() const Body = ({ onClose, file, upload }) => { const [scale, setScale] = useState(1) const ref = useRef() return ( <div className='text-end mt-1 p-4'> <AvatarEditor ref={ref} width={200} height={200} image={file} scale={scale} style={{ width: '100%', height: 'auto' }} /> <BootstrapForm.Group controlId='formBasicRange'> <BootstrapForm.Range onChange={e => setScale(parseFloat(e.target.value))} min={1} max={2} step='0.05' // defaultValue={scale} /> </BootstrapForm.Group> <Button onClick={() => { ref.current.getImageScaledToCanvas().toBlob(blob => { if (blob) { upload(blob) onClose() } }, 'image/jpeg') }} >save </Button> </div> ) } return ( <Upload as={({ onClick }) => <div className='position-absolute p-1 bg-dark pointer' onClick={onClick} style={{ bottom: '0', right: '0' }}> {uploading ? <Moon className='fill-white spin' /> : <EditImage className='fill-white' />} </div>} onError={e => { console.log(e) setUploading(false) }} onSelect={(file, upload) => { showModal(onClose => <Body onClose={onClose} file={file} upload={upload} />) }} onSuccess={async key => { onSuccess && onSuccess(key) setUploading(false) }} onStarted={() => { setUploading(true) }} /> ) }