diff --git a/assets/js/src/form_editor/blocks/blocks.jsx b/assets/js/src/form_editor/blocks/blocks.jsx
index 3ef15fbee2..de4af4b331 100644
--- a/assets/js/src/form_editor/blocks/blocks.jsx
+++ b/assets/js/src/form_editor/blocks/blocks.jsx
@@ -1,3 +1,4 @@
+import slugify from 'slugify';
import { registerBlockType, setCategories } from '@wordpress/blocks';
import { select } from '@wordpress/data';
import MailPoet from 'mailpoet';
@@ -12,12 +13,22 @@ import * as customHtml from './custom_html/custom_html.jsx';
import * as customText from './custom_text/custom_text.jsx';
+export function getCustomFieldName(blockName, customField) {
+ const name = slugify(customField.name, { lower: true })
+ .replace(/[^a-z0-9]+/g, '')
+ .replace(/-$/, '');
+ return `${blockName}-${name}`;
+}
+
const registerCustomFieldBlock = (customField) => {
console.log('custom Field', customField);
// eslint-disable-next-line default-case
switch (customField.type) {
case 'text':
- registerBlockType(customText.name, customText.getSettings(customField));
+ registerBlockType(
+ getCustomFieldName(customText.name, customField),
+ customText.getSettings(customField)
+ );
break;
}
};
diff --git a/assets/js/src/form_editor/blocks/custom_text/custom_text.jsx b/assets/js/src/form_editor/blocks/custom_text/custom_text.jsx
index 2ae95f3c15..a5d9bc0715 100644
--- a/assets/js/src/form_editor/blocks/custom_text/custom_text.jsx
+++ b/assets/js/src/form_editor/blocks/custom_text/custom_text.jsx
@@ -1,5 +1,5 @@
-import MailPoet from 'mailpoet';
import Icon from './icon.jsx';
+import Edit from './edit.jsx';
export const name = 'mailpoet-form/custom-text';
@@ -12,7 +12,7 @@ export function getSettings(customField) {
attributes: {
label: {
type: 'string',
- default: MailPoet.I18n.t('blockFirstName'),
+ default: customField.name,
},
labelWithinInput: {
type: 'boolean',
@@ -28,9 +28,7 @@ export function getSettings(customField) {
customClassName: false,
multiple: false,
},
- edit() {
- return null;
- }, // TODO
+ edit: Edit,
save() {
return null;
},
diff --git a/assets/js/src/form_editor/blocks/custom_text/edit.jsx b/assets/js/src/form_editor/blocks/custom_text/edit.jsx
new file mode 100644
index 0000000000..430b806242
--- /dev/null
+++ b/assets/js/src/form_editor/blocks/custom_text/edit.jsx
@@ -0,0 +1,82 @@
+import React from 'react';
+import {
+ Panel,
+ PanelBody,
+ TextControl,
+ ToggleControl,
+} from '@wordpress/components';
+import { InspectorControls } from '@wordpress/block-editor';
+import PropTypes from 'prop-types';
+import MailPoet from 'mailpoet';
+
+const FirstNameEdit = ({ attributes, setAttributes }) => {
+ const inspectorControls = (
+
+
+
+ (setAttributes({ label }))}
+ />
+ (setAttributes({ labelWithinInput }))}
+ />
+ (setAttributes({ mandatory }))}
+ />
+
+
+
+
+ );
+
+ const getTextInput = (placeholder) => (
+
+ );
+
+ const getLabel = () => {
+ if (attributes.mandatory) {
+ return `${attributes.label} *`;
+ }
+ return attributes.label;
+ };
+
+ return (
+ <>
+ {inspectorControls}
+ {attributes.labelWithinInput ? (getTextInput(getLabel())
+ ) : (
+
+ )}
+ >
+ );
+};
+
+FirstNameEdit.propTypes = {
+ attributes: PropTypes.shape({
+ label: PropTypes.string.isRequired,
+ labelWithinInput: PropTypes.bool.isRequired,
+ mandatory: PropTypes.bool.isRequired,
+ }).isRequired,
+ setAttributes: PropTypes.func.isRequired,
+};
+
+export default FirstNameEdit;