diff --git a/assets/js/src/form_editor/blocks/segment_select/edit.jsx b/assets/js/src/form_editor/blocks/segment_select/edit.jsx
index 5fa80c929d..af0a2a59da 100644
--- a/assets/js/src/form_editor/blocks/segment_select/edit.jsx
+++ b/assets/js/src/form_editor/blocks/segment_select/edit.jsx
@@ -1,71 +1,14 @@
import React from 'react';
import {
- Panel,
- PanelBody,
- TextControl,
CheckboxControl,
- SelectControl,
BaseControl,
} from '@wordpress/components';
-import { InspectorControls } from '@wordpress/block-editor';
-import { useSelect } from '@wordpress/data';
import PropTypes from 'prop-types';
import MailPoet from 'mailpoet';
+import Settings from './settings.jsx';
+
const SegmentSelectEdit = ({ attributes, setAttributes }) => {
- const allSegments = useSelect(
- (select) => select('mailpoet-form-editor').getAllAvailableSegments(),
- []
- );
-
- const segmentsListToBeAdded = allSegments.map((segment) => ({
- label: segment.name,
- value: segment.id,
- }))
- .filter((segment) => !attributes.values.find((s) => s.id === segment.value));
-
- const addSegment = (segmentId) => {
- const segment = allSegments.find((s) => s.id === segmentId);
- setAttributes({
- values: [
- ...attributes.values,
- {
- name: segment.name,
- isChecked: false,
- id: segmentId,
- },
- ],
- });
- };
-
- const inspectorControls = (
-
-
-
- (setAttributes({ label }))}
- />
- {segmentsListToBeAdded.length ? (
-
- ) : null}
-
-
-
- );
-
const renderValues = () => {
if (attributes.values.length === 0) {
return (
{MailPoet.I18n.t('blockSegmentSelectNoLists')}
);
@@ -82,7 +25,17 @@ const SegmentSelectEdit = ({ attributes, setAttributes }) => {
return (
<>
- {inspectorControls}
+ (setAttributes({ label }))}
+ segmentsAddedIntoSelection={attributes.values}
+ addSegmentIntoSelection={(newSegment) => setAttributes({
+ values: [
+ ...attributes.values,
+ newSegment,
+ ],
+ })}
+ />
diff --git a/assets/js/src/form_editor/blocks/segment_select/settings.jsx b/assets/js/src/form_editor/blocks/segment_select/settings.jsx
new file mode 100644
index 0000000000..5b424fb859
--- /dev/null
+++ b/assets/js/src/form_editor/blocks/segment_select/settings.jsx
@@ -0,0 +1,79 @@
+import React from 'react';
+import MailPoet from 'mailpoet';
+import PropTypes from 'prop-types';
+import { InspectorControls } from '@wordpress/block-editor';
+import {
+ Panel,
+ PanelBody,
+ SelectControl,
+ TextControl,
+} from '@wordpress/components';
+import { useSelect } from '@wordpress/data';
+
+const SegmentSelectSettings = ({
+ label,
+ onLabelChanged,
+ segmentsAddedIntoSelection,
+ addSegmentIntoSelection,
+}) => {
+ const allSegments = useSelect(
+ (select) => select('mailpoet-form-editor').getAllAvailableSegments(),
+ []
+ );
+
+ const segmentsListToBeAdded = allSegments.map((segment) => ({
+ label: segment.name,
+ value: segment.id,
+ }))
+ .filter((segment) => !segmentsAddedIntoSelection.find((s) => s.id === segment.value));
+
+ const addSegment = (segmentId) => {
+ const segment = allSegments.find((s) => s.id === segmentId);
+ addSegmentIntoSelection({
+ name: segment.name,
+ isChecked: false,
+ id: segmentId,
+ });
+ };
+
+ return (
+
+
+
+
+ {segmentsListToBeAdded.length ? (
+
+ ) : null}
+
+
+
+ );
+};
+
+SegmentSelectSettings.propTypes = {
+ label: PropTypes.string.isRequired,
+ onLabelChanged: PropTypes.func.isRequired,
+ addSegmentIntoSelection: PropTypes.func.isRequired,
+ segmentsAddedIntoSelection: PropTypes.arrayOf(PropTypes.shape({
+ name: PropTypes.string.isRequired,
+ isChecked: PropTypes.boolean,
+ id: PropTypes.string.isRequired,
+ }).isRequired).isRequired,
+};
+
+export default SegmentSelectSettings;