Make custom fields settings more reusable
[MAILPOET-2453]
This commit is contained in:
committed by
Rostislav Wolný
parent
79bdcd5e4f
commit
49f92ef77c
@@ -6,39 +6,24 @@ import {
|
|||||||
} from '@wordpress/components';
|
} from '@wordpress/components';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import MailPoet from 'mailpoet';
|
import MailPoet from 'mailpoet';
|
||||||
import { useDispatch, useSelect } from '@wordpress/data';
|
|
||||||
|
|
||||||
const CustomFieldSettings = ({
|
const CustomFieldSettings = ({
|
||||||
mandatory,
|
mandatory,
|
||||||
validate,
|
validate,
|
||||||
customFieldId,
|
isSaving,
|
||||||
updateAttributes,
|
onSave,
|
||||||
}) => {
|
}) => {
|
||||||
const [localMandatory, setLocalMandatory] = useState(mandatory);
|
const [localMandatory, setLocalMandatory] = useState(mandatory);
|
||||||
const [localValidate, setLocalValidate] = useState(validate);
|
const [localValidate, setLocalValidate] = useState(validate);
|
||||||
const { saveCustomField } = useDispatch('mailpoet-form-editor');
|
|
||||||
const isSaving = useSelect(
|
|
||||||
(sel) => sel('mailpoet-form-editor').getIsCustomFieldSaving(),
|
|
||||||
[]
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Button
|
<Button
|
||||||
isPrimary
|
isPrimary
|
||||||
isDefault
|
isDefault
|
||||||
onClick={() => saveCustomField({
|
onClick={() => onSave({
|
||||||
customFieldId,
|
mandatory: localMandatory,
|
||||||
data: {
|
validate: localValidate,
|
||||||
params: {
|
|
||||||
required: localMandatory ? '1' : undefined,
|
|
||||||
validate: localValidate,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
onFinish: () => updateAttributes({
|
|
||||||
mandatory: localMandatory,
|
|
||||||
validate: localValidate,
|
|
||||||
}),
|
|
||||||
})}
|
})}
|
||||||
isBusy={isSaving}
|
isBusy={isSaving}
|
||||||
disabled={isSaving}
|
disabled={isSaving}
|
||||||
@@ -81,12 +66,13 @@ const CustomFieldSettings = ({
|
|||||||
CustomFieldSettings.propTypes = {
|
CustomFieldSettings.propTypes = {
|
||||||
mandatory: PropTypes.bool,
|
mandatory: PropTypes.bool,
|
||||||
validate: PropTypes.string,
|
validate: PropTypes.string,
|
||||||
customFieldId: PropTypes.number.isRequired,
|
onSave: PropTypes.func.isRequired,
|
||||||
updateAttributes: PropTypes.func.isRequired,
|
isSaving: PropTypes.bool,
|
||||||
};
|
};
|
||||||
|
|
||||||
CustomFieldSettings.defaultProps = {
|
CustomFieldSettings.defaultProps = {
|
||||||
mandatory: false,
|
mandatory: false,
|
||||||
|
isSaving: false,
|
||||||
validate: '',
|
validate: '',
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -8,10 +8,17 @@ import {
|
|||||||
import { InspectorControls } from '@wordpress/block-editor';
|
import { InspectorControls } from '@wordpress/block-editor';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import MailPoet from 'mailpoet';
|
import MailPoet from 'mailpoet';
|
||||||
|
import { useDispatch, useSelect } from '@wordpress/data';
|
||||||
|
|
||||||
import CustomFieldSettings from './custom_field_settings.jsx';
|
import CustomFieldSettings from './custom_field_settings.jsx';
|
||||||
|
|
||||||
const CustomTextEdit = ({ attributes, setAttributes }) => {
|
const CustomTextEdit = ({ attributes, setAttributes }) => {
|
||||||
|
const isSaving = useSelect(
|
||||||
|
(sel) => sel('mailpoet-form-editor').getIsCustomFieldSaving(),
|
||||||
|
[]
|
||||||
|
);
|
||||||
|
const { saveCustomField } = useDispatch('mailpoet-form-editor');
|
||||||
|
|
||||||
const inspectorControls = (
|
const inspectorControls = (
|
||||||
<InspectorControls>
|
<InspectorControls>
|
||||||
<Panel>
|
<Panel>
|
||||||
@@ -21,6 +28,22 @@ const CustomTextEdit = ({ attributes, setAttributes }) => {
|
|||||||
customFieldId={attributes.customFieldId}
|
customFieldId={attributes.customFieldId}
|
||||||
mandatory={attributes.mandatory}
|
mandatory={attributes.mandatory}
|
||||||
validate={attributes.validate}
|
validate={attributes.validate}
|
||||||
|
isSaving={isSaving}
|
||||||
|
onSave={(params) => {
|
||||||
|
saveCustomField({
|
||||||
|
customFieldId: attributes.customFieldId,
|
||||||
|
data: {
|
||||||
|
params: {
|
||||||
|
required: params.mandatory ? '1' : undefined,
|
||||||
|
validate: params.validate,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
onFinish: () => setAttributes({
|
||||||
|
mandatory: params.mandatory,
|
||||||
|
validate: params.validate,
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
</PanelBody>
|
</PanelBody>
|
||||||
</Panel>
|
</Panel>
|
||||||
|
@@ -1,84 +1,34 @@
|
|||||||
import React, { useState } from 'react';
|
import React, { useState } from 'react';
|
||||||
import {
|
import {
|
||||||
Button,
|
|
||||||
SelectControl,
|
SelectControl,
|
||||||
ToggleControl,
|
|
||||||
} from '@wordpress/components';
|
} from '@wordpress/components';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import MailPoet from 'mailpoet';
|
import MailPoet from 'mailpoet';
|
||||||
import { useDispatch, useSelect } from '@wordpress/data';
|
|
||||||
|
import CustomTextSettings from '../custom_text/custom_field_settings.jsx';
|
||||||
|
|
||||||
const CustomFieldSettings = ({
|
const CustomFieldSettings = ({
|
||||||
mandatory,
|
mandatory,
|
||||||
validate,
|
validate,
|
||||||
lines,
|
lines,
|
||||||
customFieldId,
|
isSaving,
|
||||||
updateAttributes,
|
onSave,
|
||||||
}) => {
|
}) => {
|
||||||
const [localMandatory, setLocalMandatory] = useState(mandatory);
|
|
||||||
const [localValidate, setLocalValidate] = useState(validate);
|
|
||||||
const [localLines, setLocalLines] = useState(lines);
|
const [localLines, setLocalLines] = useState(lines);
|
||||||
const { saveCustomField } = useDispatch('mailpoet-form-editor');
|
|
||||||
const isSaving = useSelect(
|
|
||||||
(sel) => sel('mailpoet-form-editor').getIsCustomFieldSaving(),
|
|
||||||
[]
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Button
|
<CustomTextSettings
|
||||||
isPrimary
|
validate={validate}
|
||||||
isDefault
|
mandatory={mandatory}
|
||||||
onClick={() => saveCustomField({
|
isSaving={isSaving}
|
||||||
customFieldId,
|
onSave={(customTextParams) => {
|
||||||
data: {
|
onSave({
|
||||||
params: {
|
...customTextParams,
|
||||||
required: localMandatory ? '1' : undefined,
|
|
||||||
validate: localValidate,
|
|
||||||
lines: localLines,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
onFinish: () => updateAttributes({
|
|
||||||
mandatory: localMandatory,
|
|
||||||
validate: localValidate,
|
|
||||||
lines: localLines,
|
lines: localLines,
|
||||||
}),
|
});
|
||||||
})}
|
}}
|
||||||
isBusy={isSaving}
|
|
||||||
disabled={isSaving}
|
|
||||||
className="button-on-top"
|
|
||||||
>
|
|
||||||
{MailPoet.I18n.t('customFieldSaveCTA')}
|
|
||||||
</Button>
|
|
||||||
<ToggleControl
|
|
||||||
label={MailPoet.I18n.t('blockMandatory')}
|
|
||||||
checked={localMandatory}
|
|
||||||
onChange={setLocalMandatory}
|
|
||||||
/>
|
/>
|
||||||
<SelectControl
|
|
||||||
label={`${MailPoet.I18n.t('customFieldValidateFor')}:`}
|
|
||||||
options={[
|
|
||||||
{
|
|
||||||
label: MailPoet.I18n.t('customFieldValidateNothing'),
|
|
||||||
value: '',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: MailPoet.I18n.t('customFieldValidateNumbersOnly'),
|
|
||||||
value: 'alphanum',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: MailPoet.I18n.t('customFieldValidateAlphanumerical'),
|
|
||||||
value: 'number',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: MailPoet.I18n.t('customFieldValidatePhoneNumber'),
|
|
||||||
value: 'phone',
|
|
||||||
},
|
|
||||||
]}
|
|
||||||
value={localValidate}
|
|
||||||
onChange={setLocalValidate}
|
|
||||||
/>
|
|
||||||
|
|
||||||
<SelectControl
|
<SelectControl
|
||||||
label={`${MailPoet.I18n.t('customFieldNumberOfLines')}:`}
|
label={`${MailPoet.I18n.t('customFieldNumberOfLines')}:`}
|
||||||
value={localLines}
|
value={localLines}
|
||||||
@@ -114,14 +64,15 @@ CustomFieldSettings.propTypes = {
|
|||||||
mandatory: PropTypes.bool,
|
mandatory: PropTypes.bool,
|
||||||
validate: PropTypes.string,
|
validate: PropTypes.string,
|
||||||
lines: PropTypes.string,
|
lines: PropTypes.string,
|
||||||
customFieldId: PropTypes.number.isRequired,
|
onSave: PropTypes.func.isRequired,
|
||||||
updateAttributes: PropTypes.func.isRequired,
|
isSaving: PropTypes.bool,
|
||||||
};
|
};
|
||||||
|
|
||||||
CustomFieldSettings.defaultProps = {
|
CustomFieldSettings.defaultProps = {
|
||||||
mandatory: false,
|
mandatory: false,
|
||||||
validate: '',
|
validate: '',
|
||||||
lines: '1',
|
lines: '1',
|
||||||
|
isSaving: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default CustomFieldSettings;
|
export default CustomFieldSettings;
|
||||||
|
@@ -8,19 +8,39 @@ import {
|
|||||||
import { InspectorControls } from '@wordpress/block-editor';
|
import { InspectorControls } from '@wordpress/block-editor';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import MailPoet from 'mailpoet';
|
import MailPoet from 'mailpoet';
|
||||||
|
import { useDispatch, useSelect } from '@wordpress/data';
|
||||||
|
|
||||||
import CustomFieldSettings from './custom_field_settings.jsx';
|
import CustomFieldSettings from './custom_field_settings.jsx';
|
||||||
|
|
||||||
const CustomTextAreaEdit = ({ attributes, setAttributes }) => {
|
const CustomTextAreaEdit = ({ attributes, setAttributes }) => {
|
||||||
|
const isSaving = useSelect(
|
||||||
|
(sel) => sel('mailpoet-form-editor').getIsCustomFieldSaving(),
|
||||||
|
[]
|
||||||
|
);
|
||||||
|
const { saveCustomField } = useDispatch('mailpoet-form-editor');
|
||||||
const inspectorControls = (
|
const inspectorControls = (
|
||||||
<InspectorControls>
|
<InspectorControls>
|
||||||
<Panel>
|
<Panel>
|
||||||
<PanelBody title={MailPoet.I18n.t('customFieldSettings')} initialOpen>
|
<PanelBody title={MailPoet.I18n.t('customFieldSettings')} initialOpen>
|
||||||
<CustomFieldSettings
|
<CustomFieldSettings
|
||||||
updateAttributes={(attrs) => (setAttributes(attrs))}
|
|
||||||
customFieldId={attributes.customFieldId}
|
|
||||||
mandatory={attributes.mandatory}
|
mandatory={attributes.mandatory}
|
||||||
validate={attributes.validate}
|
validate={attributes.validate}
|
||||||
|
isSaving={isSaving}
|
||||||
|
onSave={(params) => saveCustomField({
|
||||||
|
customFieldId: attributes.customFieldId,
|
||||||
|
data: {
|
||||||
|
params: {
|
||||||
|
required: params.mandatory ? '1' : undefined,
|
||||||
|
validate: params.validate,
|
||||||
|
lines: params.lines,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
onFinish: () => setAttributes({
|
||||||
|
mandatory: params.mandatory,
|
||||||
|
validate: params.validate,
|
||||||
|
lines: params.lines,
|
||||||
|
}),
|
||||||
|
})}
|
||||||
/>
|
/>
|
||||||
</PanelBody>
|
</PanelBody>
|
||||||
</Panel>
|
</Panel>
|
||||||
@@ -39,7 +59,6 @@ const CustomTextAreaEdit = ({ attributes, setAttributes }) => {
|
|||||||
/>
|
/>
|
||||||
</PanelBody>
|
</PanelBody>
|
||||||
</Panel>
|
</Panel>
|
||||||
|
|
||||||
</InspectorControls>
|
</InspectorControls>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user