import { h, Component } from 'preact'; import PropTypes from 'prop-types'; import { generateMainImage } from '../actions'; export default class ImageManagement extends Component { constructor(props) { super(props); this.state = { insertionImageUrl: null, uploadError: false, uploadErrorMessage: null, }; } handleMainImageUpload = e => { e.preventDefault(); this.clearUploadError(); const payload = { image: e.target.files, wrap_cloudinary: true }; const { onMainImageUrlChange } = this.props; generateMainImage(payload, onMainImageUrlChange, this.onUploadError); }; handleInsertionImageUpload = e => { this.clearUploadError(); const payload = { image: e.target.files }; generateMainImage( payload, this.handleInsertImageUploadSuccess, this.onUploadError, ); }; handleInsertImageUploadSuccess = response => { this.setState({ insertionImageUrl: response.link, }); }; triggerMainImageRemoval = e => { e.preventDefault(); const { onMainImageUrlChange } = this.props; onMainImageUrlChange({ link: null, }); }; clearUploadError = () => { this.setState({ uploadError: false, uploadErrorMessage: null, }); }; onUploadError = error => { this.setState({ insertionImageUrl: null, uploadError: true, uploadErrorMessage: error.message, }); }; render() { const { onExit, mainImage, version } = this.props; const { insertionImageUrl, uploadError, uploadErrorMessage } = this.state; let mainImageArea; if (mainImage) { mainImageArea = (
main
); } else { mainImageArea = (
); } let insertionImageArea; if (insertionImageUrl) { insertionImageArea = (

Markdown Image:

Direct URL:

); } else { insertionImageArea = (
); } let imageOptions; if (version === 'v1') { imageOptions = (

Upload an Image

{insertionImageArea}

To add a cover image for the post, add cover_image: direct_url_to_image.jpg to the frontmatter

) } else { imageOptions = (

Cover Image

{mainImageArea}

Body Images

{insertionImageArea}
) } return (
{uploadError && ( {uploadErrorMessage} )} {imageOptions}
); } } ImageManagement.propTypes = { onExit: PropTypes.func.isRequired, onMainImageUrlChange: PropTypes.func.isRequired, mainImage: PropTypes.string.isRequired, version: PropTypes.string.isRequired };