diff --git a/assets/js/src/form_editor/blocks/blocks.jsx b/assets/js/src/form_editor/blocks/blocks.jsx index 22f514dd11..1681d5c356 100644 --- a/assets/js/src/form_editor/blocks/blocks.jsx +++ b/assets/js/src/form_editor/blocks/blocks.jsx @@ -2,6 +2,7 @@ import { registerBlockType, setCategories } from '@wordpress/blocks'; import { select } from '@wordpress/data'; import MailPoet from 'mailpoet'; import formatCustomFieldBlockName from './format_custom_field_block_name.jsx'; +import getCustomFieldBlocksSettings from './custom_fields_blocks.jsx'; import * as divider from './divider/divider.jsx'; import * as email from './email/email.jsx'; @@ -11,40 +12,9 @@ import * as lastName from './last_name/last_name.jsx'; import * as segmentSelect from './segment_select/segment_select.jsx'; import * as html from './html/html.jsx'; -import * as customDate from './custom_date/custom_date.jsx'; -import * as customText from './custom_text/custom_text.jsx'; -import * as customTextArea from './custom_textarea/custom_textarea.jsx'; -import * as customRadio from './custom_radio/custom_radio.jsx'; -import * as customCheckbox from './custom_checkbox/custom_checkbox.jsx'; -import * as customSelect from './custom_select/custom_select.jsx'; const registerCustomFieldBlock = (customField) => { - const namesMap = { - date: { - name: customDate.name, - settings: customDate.getSettings(customField), - }, - text: { - name: customText.name, - settings: customText.getSettings(customField), - }, - textarea: { - name: customTextArea.name, - settings: customTextArea.getSettings(customField), - }, - radio: { - name: customRadio.name, - settings: customRadio.getSettings(customField), - }, - checkbox: { - name: customCheckbox.name, - settings: customCheckbox.getSettings(customField), - }, - select: { - name: customSelect.name, - settings: customSelect.getSettings(customField), - }, - }; + const namesMap = getCustomFieldBlocksSettings(customField); if (!namesMap[customField.type]) return; diff --git a/assets/js/src/form_editor/blocks/custom_fields_blocks.jsx b/assets/js/src/form_editor/blocks/custom_fields_blocks.jsx new file mode 100644 index 0000000000..3fa483bc1d --- /dev/null +++ b/assets/js/src/form_editor/blocks/custom_fields_blocks.jsx @@ -0,0 +1,35 @@ +import * as customDate from './custom_date/custom_date.jsx'; +import * as customText from './custom_text/custom_text.jsx'; +import * as customTextArea from './custom_textarea/custom_textarea.jsx'; +import * as customRadio from './custom_radio/custom_radio.jsx'; +import * as customCheckbox from './custom_checkbox/custom_checkbox.jsx'; +import * as customSelect from './custom_select/custom_select.jsx'; + +export default function getCustomFieldBlocksSettings(customField) { + return { + date: { + name: customDate.name, + settings: customDate.getSettings(customField), + }, + text: { + name: customText.name, + settings: customText.getSettings(customField), + }, + textarea: { + name: customTextArea.name, + settings: customTextArea.getSettings(customField), + }, + radio: { + name: customRadio.name, + settings: customRadio.getSettings(customField), + }, + checkbox: { + name: customCheckbox.name, + settings: customCheckbox.getSettings(customField), + }, + select: { + name: customSelect.name, + settings: customSelect.getSettings(customField), + }, + }; +} diff --git a/assets/js/src/form_editor/store/controls.jsx b/assets/js/src/form_editor/store/controls.jsx index 5aae09d70e..73fb3d00ea 100644 --- a/assets/js/src/form_editor/store/controls.jsx +++ b/assets/js/src/form_editor/store/controls.jsx @@ -1,7 +1,10 @@ import { select, dispatch } from '@wordpress/data'; import MailPoet from 'mailpoet'; import { merge } from 'lodash'; +import { unregisterBlockType } from '@wordpress/blocks'; import blocksToFormBody from './blocks_to_form_body.jsx'; +import formatCustomFieldBlockName from '../blocks/format_custom_field_block_name.jsx'; +import getCustomFieldBlockSettings from '../blocks/custom_fields_blocks.jsx'; export default { SAVE_FORM() { @@ -64,6 +67,9 @@ export default { DELETE_CUSTOM_FIELD(actionData) { dispatch('mailpoet-form-editor').deleteCustomFieldStarted(); + const customFields = select('mailpoet-form-editor').getAllAvailableCustomFields(); + const customField = customFields.find((cf) => cf.id === actionData.customFieldId); + const namesMap = getCustomFieldBlockSettings(customField); MailPoet.Ajax.post({ api_version: window.mailpoet_api_version, endpoint: 'customFields', @@ -75,6 +81,9 @@ export default { .then(() => { dispatch('mailpoet-form-editor').deleteCustomFieldDone(actionData.customFieldId, actionData.clientId); dispatch('core/block-editor').removeBlock(actionData.clientId); + unregisterBlockType( + formatCustomFieldBlockName(namesMap[customField.type].name, customField) + ); }) .fail((response) => { let errorMessage = null;