/* global Runtime */ import { h } from 'preact'; import { useReducer } from 'preact/hooks'; import { generateMainImage } from '../actions'; import { validateFileInputs } from '../../packs/validateFileInputs'; import { ClipboardButton } from './ClipboardButton'; import { Button, Spinner } from '@crayons'; const ImageIcon = () => ( ); ImageIcon.displayName = 'ImageIcon'; function imageUploaderReducer(state, action) { const { type, payload } = action; switch (type) { case 'uploading_image': return { ...state, uploadError: false, uploadingErrorMessage: null, uploadingImage: true, insertionImageUrls: [], showImageCopiedMessage: false, }; case 'upload_error': return { ...state, insertionImageUrls: [], uploadError: true, uploadErrorMessage: payload.errorMessage, uploadingImage: false, }; case 'show_copied_image_message': return { ...state, showImageCopiedMessage: true, }; case 'upload_image_success': return { ...state, insertionImageUrls: payload.insertionImageUrls, uploadingImage: false, }; default: return state; } } export const ImageUploader = () => { const [state, dispatch] = useReducer(imageUploaderReducer, { insertionImageUrls: [], uploadError: false, uploadErrorMessage: null, showImageCopiedMessage: false, uploadingImage: false, }); const { uploadingImage, showImageCopiedMessage, uploadErrorMessage, uploadError, insertionImageUrls, } = state; let imageMarkdownInput = null; function onUploadError(error) { dispatch({ type: 'upload_error', payload: { errorMessage: error.message }, }); } function copyText() { imageMarkdownInput = document.getElementById( 'image-markdown-copy-link-input', ); Runtime.copyToClipboard(imageMarkdownInput.value).then(() => { dispatch({ type: 'show_copied_image_message', }); }); } function handleInsertionImageUpload(e) { const { files } = e.target; if (files.length > 0 && validateFileInputs()) { const payload = { image: files }; dispatch({ type: 'uploading_image', }); generateMainImage(payload, handleInsertImageUploadSuccess, onUploadError); } } function handleInsertImageUploadSuccess(response) { dispatch({ type: 'upload_image_success', payload: { insertionImageUrls: response.links }, }); } return (