import { h, Component } from 'preact'; import PropTypes from 'prop-types'; import linkCopyIcon from '../../../assets/images/content-copy.svg'; import { generateMainImage } from '../actions'; export default class ImageManagement extends Component { constructor(props) { super(props); this.state = { insertionImageUrls: [], 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({ insertionImageUrls: response.links, }); }; triggerMainImageRemoval = e => { e.preventDefault(); const { onMainImageUrlChange } = this.props; onMainImageUrlChange({ links: [], }); }; clearUploadError = () => { this.setState({ uploadError: false, uploadErrorMessage: null, }); }; onUploadError = error => { this.setState({ insertionImageUrls: [], uploadError: true, uploadErrorMessage: error.message, }); }; copyText = () => { this.imageMarkdownAnnouncer = document.getElementById( 'image-markdown-copy-link-announcer', ); this.imageMarkdownInput = document.getElementById( 'image-markdown-copy-link-input', ); const isIOSDevice = navigator.userAgent.match(/iPhone|iPad/i) || navigator.userAgent.match('CriOS') || navigator.userAgent === 'DEV-Native-ios'; if (isIOSDevice) { this.imageMarkdownInput.setSelectionRange( 0, this.imageMarkdownInput.value.length, ); document.execCommand('copy'); } else { this.imageMarkdownInput.focus(); this.imageMarkdownInput.setSelectionRange( 0, this.imageMarkdownInput.value.length, ); } this.imageMarkdownAnnouncer.hidden = false; }; linksToMarkdownForm = imageLinks => { return imageLinks.map(imageLink => ``).join('\n'); }; linksToDirectForm = imageLinks => { return imageLinks.join('\n'); }; render() { const { onExit, mainImage, version } = this.props; const { insertionImageUrls, uploadError, uploadErrorMessage } = this.state; let mainImageArea; if (mainImage) { mainImageArea = (
To add a cover image for the post, add
cover_image: direct_url_to_image.jpg
to the
frontmatter