/** * Internal dependencies */ import './style.scss'; /** * WordPress dependencies */ const { jQuery: $, canvasLayouts, } = window; const { __, } = wp.i18n; const { registerBlockType, createBlock, parse, } = wp.blocks; const { Component, } = wp.element; const { Modal, SelectControl, } = wp.components; const { compose, } = wp.compose; const { withDispatch, } = wp.data; /** * Add layouts button to Gutenberg toolbar */ $(document).on('DOMContentLoaded', () => { wp.data.subscribe(function () { setTimeout(function () { if (!document.getElementById('canvas-toolbar-import-layout')) { const $toolbar = $('.edit-post-header-toolbar'); if (Object.keys(canvasLayouts.layouts).length && $toolbar.length) { $toolbar.append(`
` ); } } }, 1) }); // Insert `canvas/layout` block. $(document).on('click', '.canvas-toolbar-import-layout button', (e) => { e.preventDefault(); const { insertBlocks, } = wp.data.dispatch('core/block-editor'); insertBlocks(createBlock('canvas/layouts')); }); }); /** * Component */ class LayoutsBlockEdit extends Component { constructor() { super(...arguments); this.state = { category: '', }; this.getLayouts = this.getLayouts.bind(this); } getLayouts() { const { category, } = this.state; const result = {}; Object.keys(canvasLayouts.layouts).forEach((k) => { const layout = canvasLayouts.layouts[k]; if (category) { if (layout.category && layout.category.indexOf(category) > -1) { result[k] = layout; } } else { result[k] = layout; } }) return result; } render() { const { insertLayout, closeModal, } = this.props; const categories = [ { label: __('--- Select Category ---', 'canvas'), value: '', }, ...Object.keys(canvasLayouts.categories).map((name) => { return { label: canvasLayouts.categories[name], value: name, }; }), ]; const layouts = this.getLayouts(); return ( { closeModal(); }} shouldCloseOnClickOutside={false} className="cnvs-extension-layouts-modal" >
{categories.length > 1 ? (
{ this.setState({ category: val, }); }} />
) : ''} {Object.keys(layouts).length ? (
{ __('Layouts:', 'canvas')}   {Object.keys(layouts).length}
) : ''} {Object.keys(layouts).length ? (
{ Object.keys(layouts).map((k) => { return ( ); })}
) : (

{__('No layouts found.', 'canvas')}

)}
); } } const LayoutsBlockEditWithSelect = compose( withDispatch((dispatch, ownProps) => { const { clientId } = ownProps; const { replaceBlocks, removeBlock, } = dispatch('core/block-editor'); return { closeModal() { removeBlock(clientId); }, insertLayout(content) { const parsedBlocks = parse(content); replaceBlocks(clientId, parsedBlocks); }, }; }), )(LayoutsBlockEdit); /** * Register block. */ registerBlockType('canvas/layouts', { title: __('Canvas Layouts', 'canvas'), description: __('Add a pre-configured layouts.', 'canvas'), category: 'common', supports: { customClassName: false, html: false, inserter: false, multiple: false, reusable: false, }, edit: LayoutsBlockEditWithSelect, save: function () { return null } });