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;