diff --git a/assets/js/src/post_editor_block/edit.jsx b/assets/js/src/post_editor_block/edit.jsx index 0a63229ed9..1afa2f2933 100644 --- a/assets/js/src/post_editor_block/edit.jsx +++ b/assets/js/src/post_editor_block/edit.jsx @@ -1,6 +1,8 @@ /* eslint-disable react/react-in-jsx-scope */ import PropTypes from 'prop-types'; +const wp = window.wp; +const ServerSideRender = wp.serverSideRender; const allForms = window.mailpoet_forms; function Edit({ attributes, setAttributes }) { @@ -26,10 +28,28 @@ function Edit({ attributes, setAttributes }) { ); } + function renderForm() { + return ( + + ); + } + return (

MailPoet Subscription Form

- {displayFormsSelect()} + { + attributes.selectedForm === null && ( + displayFormsSelect() + ) + } + { + attributes.selectedForm !== null && ( + renderForm() + ) + }
); } diff --git a/lib/Config/PostEditorBlock.php b/lib/Config/PostEditorBlock.php index fdcd3ed3ca..074daf5c9a 100644 --- a/lib/Config/PostEditorBlock.php +++ b/lib/Config/PostEditorBlock.php @@ -3,6 +3,7 @@ namespace MailPoet\Config; use MailPoet\Form\FormsRepository; +use MailPoet\Form\Widget; use MailPoet\WP\Functions as WPFunctions; class PostEditorBlock { @@ -32,7 +33,7 @@ class PostEditorBlock { $this->wp->wpEnqueueScript( 'mailpoet-block-form-block-js', Env::$assetsUrl . '/dist/js/' . $this->renderer->getJsAsset('post_editor_block.js'), - ['wp-blocks', 'wp-components'], + ['wp-blocks', 'wp-components', 'wp-server-side-render'], Env::$version, true ); @@ -49,6 +50,16 @@ class PostEditorBlock { 'editor_script' => 'mailpoet/form-block', ]); + register_block_type( 'mailpoet/form-block-render', [ + 'attributes' => [ + 'form' => [ + 'type' => 'number', + 'default' => null, + ], + ], + 'render_callback' => [$this, 'renderForm'], + ]); + if (is_admin()) { add_action('admin_head', function() { $forms = $this->formsRepository->findAllNotDeleted(); @@ -62,4 +73,15 @@ class PostEditorBlock { } + public function renderForm($attributes) { + if (!$attributes) { + return ''; + } + $basicForm = new Widget(); + return $basicForm->widget([ + 'form' => (int)$attributes['form'], + 'form_type' => 'html', + ]); + } + }