import { registerBlockType } from '@wordpress/blocks'; import React from 'react'; import UcUploader from './UcUploader'; import config from './uc-config'; import { __ } from '@wordpress/i18n'; import { RichText, MediaUpload } from '@wordpress/block-editor'; import { Button } from '@wordpress/components'; import FileInfoResponse from './interfaces/FileInfoResponse'; import imageIcon from './icons/image'; import WpMedia from './interfaces/WpMedia'; import UcMediaMeta from './UcMediaMeta'; config.config.imagesOnly = true; const uploader = new UcUploader(config.config); const cdnBase = config.config.cdnBase; const wrapperStyle = { backgroundColor: '#fff', padding: '.5rem', }; registerBlockType('uploadcare/image', { title: __('Uploadcare Image', 'uploadcare'), description: __('Add image with awesome Adaptive Delivery option'), category: 'media', icon: imageIcon(), attributes: { title: { type: 'array', source: 'children', selector: 'figcaption', }, mediaID: { type: 'number', }, mediaUid: { type: 'string', }, cdnUrlModifiers: { type: 'string', }, }, example: { attributes: { title: __('Uploadcare', 'uploadcare'), mediaURL: 'https://ucarecdn.com/6c5b97ee-4ce9-490f-92e9-50cba0271917/intelligence.svg', mediaID: '0000', mediaUid: '6c5b97ee-4ce9-490f-92e9-50cba0271917', cdnUrlModifiers: '', }, }, edit(props) { const {className, attributes: {title, mediaID, mediaUid, cdnUrlModifiers}, setAttributes} = props; if (mediaID && mediaID !== '0000') { UcMediaMeta.fetch(mediaID).then(data => { if (data.uploadcare_url_modifiers.length > 0) { setAttributes({cdnUrlModifiers: data.uploadcare_url_modifiers[0]}) } }) } const onChangeTitle = (value) => { setAttributes({title: value}); }; const setImage = () => { uploader.upload(mediaUid ? `${cdnBase}/${mediaUid}/${cdnUrlModifiers}`: undefined).then((fileInfo: FileInfoResponse) => onUploadImage(fileInfo)).catch(() => {}); }; const onUploadImage = (media: FileInfoResponse) => { setAttributes({ mediaURL: media.originalUrl, mediaID: media.attach_id, mediaUid: media.uuid, cdnUrlModifiers: media.cdnUrlModifiers, }); }; const onSelectImage = (wpMedia: WpMedia) => { setAttributes({ mediaURL: wpMedia.url, mediaID: wpMedia.id, mediaUid: wpMedia.meta['uploadcare_uuid'] || wpMedia.filename, cdnUrlModifiers: wpMedia.meta['uploadcare_url_modifiers'] || '', }); } return
{mediaID ?
{title}
:
{imageIcon()} {__('Uploadcare image', 'uploadcare')}
{__('Upload and edit image with Uploadcare', 'uploadcare')}
}
{!mediaID ? ( )} /> : null}
; }, save(props) { const {className, attributes: {title, mediaID, mediaUid, cdnUrlModifiers}} = props; return
{mediaID ? ({title}/) : null}
; }, }); export default registerBlockType;