diff --git a/assets/js/src/form_editor/components/editor.jsx b/assets/js/src/form_editor/components/editor.jsx index afacb22804..96a997ccaf 100644 --- a/assets/js/src/form_editor/components/editor.jsx +++ b/assets/js/src/form_editor/components/editor.jsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import React, { useState, useEffect } from 'react'; import '@wordpress/core-data'; import { select, useSelect, useDispatch } from '@wordpress/data'; import { @@ -43,6 +43,10 @@ export default () => { (sel) => sel('mailpoet-form-editor').getSidebarOpened(), [] ); + const isFullscreen = useSelect( + (sel) => sel('mailpoet-form-editor').isFullscreenEnabled(), + [] + ); const canUserUpload = useSelect( (sel) => sel('core').canUser('create', 'media'), [] @@ -63,6 +67,14 @@ export default () => { const { blocksChangedInBlockEditor } = useDispatch('mailpoet-form-editor'); + useEffect(() => { + if (isFullscreen) { + document.body.classList.add('is-fullscreen-mode'); + } else { + document.body.classList.remove('is-fullscreen-mode'); + } + }, [isFullscreen]); + // Editor settings - see @wordpress/block-editor/src/store/defaults.js const editorSettings = { mediaUpload: canUserUpload ? uploadMedia : null, diff --git a/assets/js/src/form_editor/components/header.jsx b/assets/js/src/form_editor/components/header.jsx index 8fdc11befd..3b906316b3 100644 --- a/assets/js/src/form_editor/components/header.jsx +++ b/assets/js/src/form_editor/components/header.jsx @@ -29,8 +29,16 @@ const Header = ({ isInserterOpened, setIsInserterOpened }) => { (select) => select('mailpoet-form-editor').getIsPreviewShown(), [] ); - const isFullsScreen = true; - const { toggleSidebar, saveForm, showPreview } = useDispatch('mailpoet-form-editor'); + const isFullscreen = useSelect( + (select) => select('mailpoet-form-editor').isFullscreenEnabled(), + [] + ); + const { + toggleSidebar, + saveForm, + showPreview, + toggleFullscreen, + } = useDispatch('mailpoet-form-editor'); return (
@@ -71,8 +79,8 @@ const Header = ({ isInserterOpened, setIsInserterOpened }) => { shortcut="Ctrl+Shift+Alt+F" label="Fullscreen mode" info="Work without distraction" - isActive={isFullsScreen} - onToggle={() => console.log('click')} + isActive={isFullscreen} + onToggle={() => toggleFullscreen(!isFullscreen)} /> )} diff --git a/assets/js/src/form_editor/store/actions.ts b/assets/js/src/form_editor/store/actions.ts index 7818bfe7a2..0c930acb27 100644 --- a/assets/js/src/form_editor/store/actions.ts +++ b/assets/js/src/form_editor/store/actions.ts @@ -21,6 +21,18 @@ export function toggleForm(enabled) { }; } +export function* toggleFullscreen(toggleTo) { + yield { + type: 'STORE_LOCALLY', + key: 'mailpoet_form_view_options', + value: toggleTo, + }; + yield { + type: 'TOGGLE_FULLSCREEN', + toggleTo, + }; +} + export function changeFormBlocks(blocks) { return { type: 'CHANGE_FORM_BLOCKS', diff --git a/assets/js/src/form_editor/store/reducer.jsx b/assets/js/src/form_editor/store/reducer.jsx index 0f157c285b..32723ef2e6 100644 --- a/assets/js/src/form_editor/store/reducer.jsx +++ b/assets/js/src/form_editor/store/reducer.jsx @@ -34,6 +34,7 @@ import { disableForm, enableForm, } from './reducers/toggle_form'; +import toggleFullscreen from './reducers/toggle_fullscreen'; const createCustomFieldStarted = createCustomFieldStartedFactory(MailPoet); const saveFormStarted = saveFormStartedFactory(MailPoet); @@ -42,6 +43,7 @@ export default (defaultState) => (state = defaultState, action) => { switch (action.type) { case 'ENABLE_FORM': return enableForm(state); case 'DISABLE_FORM': return disableForm(state); + case 'TOGGLE_FULLSCREEN': return toggleFullscreen(state, action); case 'CREATE_CUSTOM_FIELD_DONE': return createCustomFieldDone(state, action); case 'CREATE_CUSTOM_FIELD_FAILED': return createCustomFieldFailed(state, action); case 'CREATE_CUSTOM_FIELD_STARTED': return createCustomFieldStarted(state, action); diff --git a/assets/js/src/form_editor/store/reducers/toggle_fullscreen.ts b/assets/js/src/form_editor/store/reducers/toggle_fullscreen.ts new file mode 100644 index 0000000000..edf7af3f24 --- /dev/null +++ b/assets/js/src/form_editor/store/reducers/toggle_fullscreen.ts @@ -0,0 +1,4 @@ +export default (state, action) => ({ + ...state, + fullscreenStatus: action.toggleTo, +}); diff --git a/assets/js/src/form_editor/store/selectors.jsx b/assets/js/src/form_editor/store/selectors.jsx index 49b3a2f107..4d1c63726e 100644 --- a/assets/js/src/form_editor/store/selectors.jsx +++ b/assets/js/src/form_editor/store/selectors.jsx @@ -19,6 +19,9 @@ export default { isFormEnabled(state) { return state.formData.status === 'enabled'; }, + isFullscreenEnabled(state) { + return state.fullscreenStatus; + }, getSidebarOpened(state) { return state.sidebarOpened; }, diff --git a/assets/js/src/form_editor/store/store.jsx b/assets/js/src/form_editor/store/store.jsx index 6f075847a3..b237a1c14c 100644 --- a/assets/js/src/form_editor/store/store.jsx +++ b/assets/js/src/form_editor/store/store.jsx @@ -42,6 +42,13 @@ export default () => { // We just keep it null } + let fullscreenStatus = null; + try { + fullscreenStatus = JSON.parse(window.localStorage.getItem('mailpoet_form_view_options')); + } catch (e) { + fullscreenStatus = 'disabled'; + } + const defaultState = { formBlocks, formData: mapFormDataAfterLoading(formData), @@ -63,6 +70,7 @@ export default () => { openedPanels: ['basic-settings'], }, previewSettings, + fullscreenStatus, editorUrl: window.location.href, previewPageUrl: window.mailpoet_form_preview_page, closeIconsUrl: window.mailpoet_close_icons_url,