From eb494d5ea9a1821207a8bc1ff1cecad9b59ece12 Mon Sep 17 00:00:00 2001 From: Rostislav Wolny Date: Mon, 18 May 2020 17:03:50 +0200 Subject: [PATCH] Add live preview of width/position settings to preview [MAILPOET-2811] --- assets/css/src/components-public/_public.scss | 6 +-- .../components/preview/preview.tsx | 19 +++++++ assets/js/src/public.jsx | 49 +++++++++++++++++++ 3 files changed, 71 insertions(+), 3 deletions(-) diff --git a/assets/css/src/components-public/_public.scss b/assets/css/src/components-public/_public.scss index 0798a08018..b8fa2c9c2b 100644 --- a/assets/css/src/components-public/_public.scss +++ b/assets/css/src/components-public/_public.scss @@ -230,13 +230,13 @@ div.mailpoet_form_popup { display: none; left: 50%; max-height: calc(100vh - 60px); - max-width: 560px !important; + max-width: 560px; overflow-y: auto; padding: 20px; position: fixed; top: 50%; transform: translate(-50%, -50%); - width: 560px !important; + width: 560px; z-index: 100001; } @@ -264,7 +264,7 @@ div.mailpoet_form_fixed_bar { overflow-y: auto; padding: 10px; position: fixed; - width: 100% !important; + width: 100%; z-index: 100000; form { diff --git a/assets/js/src/form_editor/components/preview/preview.tsx b/assets/js/src/form_editor/components/preview/preview.tsx index 4bf9d2f3c8..62e90abe5f 100644 --- a/assets/js/src/form_editor/components/preview/preview.tsx +++ b/assets/js/src/form_editor/components/preview/preview.tsx @@ -1,6 +1,7 @@ import React, { useEffect, useState, + useRef, } from 'react'; import MailPoet from 'mailpoet'; import { Spinner } from '@wordpress/components'; @@ -16,6 +17,7 @@ import FixedBarSettings from './fixed_bar_settings'; import SlideInSettings from './slide_in_settings'; const FormPreview = () => { + const iframeElement = useRef(null); const [iframeLoaded, setIframeLoaded] = useState(false); const { hidePreview, changePreviewSettings } = useDispatch('mailpoet-form-editor'); const isPreview = useSelect( @@ -32,6 +34,11 @@ const FormPreview = () => { [] ); + const formSettings = useSelect( + (select) => select('mailpoet-form-editor').getFormSettings(), + [] + ); + const formId = useSelect( (select) => select('mailpoet-form-editor').getFormData().id, [] @@ -41,6 +48,17 @@ const FormPreview = () => { setIframeLoaded(false); }, [isPreview]); + useEffect(() => { + if (!iframeElement.current) { + return; + } + const data = { formType: previewSettings.formType, formSettings }; + iframeElement.current.contentWindow.postMessage( + data, + (window as any).mailpoet_form_preview_page + ); + }, [formSettings, iframeElement, previewSettings]); + if (!isPreview) return null; function setFormType(type) { @@ -107,6 +125,7 @@ const FormPreview = () => { )}