Add a component for select custom fields

[MAILPOET-3220]
This commit is contained in:
Pavel Dohnal
2021-05-12 15:45:47 +02:00
committed by Veljko V
parent c90d1783aa
commit 6349a1cd89
3 changed files with 67 additions and 1 deletions

View File

@@ -0,0 +1,57 @@
import React from 'react';
import {
assign,
find,
} from 'lodash/fp';
import MailPoet from 'mailpoet';
import ReactSelect from 'common/form/react_select/react_select';
import {
WordpressRoleFormItem,
OnFilterChange, SelectOption,
} from '../../types';
import { SegmentFormData } from '../../segment_form_data';
interface Props {
onChange: OnFilterChange;
item: WordpressRoleFormItem;
}
interface ParamsType {
values?: {
value: string;
}[];
}
export const RadioSelect: React.FunctionComponent<Props> = ({ onChange, item }) => {
const customField = find({ id: Number(item.customFieldId) }, SegmentFormData.customFieldsList);
if (!customField) return null;
const params = (customField.params as ParamsType);
if (!params || !Array.isArray(params.values)) return null;
const options = params.values.map((currentValue) => ({
value: currentValue.value,
label: currentValue.value,
}));
return (
<>
<div className="mailpoet-gap" />
<ReactSelect
isFullWidth
placeholder={MailPoet.I18n.t('selectValue')}
options={options}
value={
item.value ? { value: item.value, label: item.value } : null
}
onChange={(option: SelectOption): void => {
onChange(
assign(item, { value: option.value, operator: 'equals' })
);
}}
automationId="segment-wordpress-role"
/>
</>
);
};

View File

@@ -6,6 +6,7 @@ import ReactSelect from 'common/form/react_select/react_select';
import { SegmentFormData } from '../segment_form_data'; import { SegmentFormData } from '../segment_form_data';
import { Text } from './custom_fields/text'; import { Text } from './custom_fields/text';
import { RadioSelect } from './custom_fields/select';
import { import {
WordpressRoleFormItem, WordpressRoleFormItem,
@@ -30,6 +31,8 @@ interface Props {
const componentsMap = { const componentsMap = {
[CustomFieldsTypes.TEXT]: Text, [CustomFieldsTypes.TEXT]: Text,
[CustomFieldsTypes.TEXTAREA]: Text, [CustomFieldsTypes.TEXTAREA]: Text,
[CustomFieldsTypes.RADIO]: RadioSelect,
[CustomFieldsTypes.SELECT]: RadioSelect,
}; };
export const MailPoetCustomFields: React.FunctionComponent<Props> = ({ onChange, item }) => { export const MailPoetCustomFields: React.FunctionComponent<Props> = ({ onChange, item }) => {
@@ -59,7 +62,12 @@ export const MailPoetCustomFields: React.FunctionComponent<Props> = ({ onChange,
const customField = find({ id: Number(option.value) }, SegmentFormData.customFieldsList); const customField = find({ id: Number(option.value) }, SegmentFormData.customFieldsList);
if (!customField) return; if (!customField) return;
onChange( onChange(
assign(item, { customFieldId: option.value, customFieldType: customField.type }) assign(item, {
customFieldId: option.value,
customFieldType: customField.type,
operator: undefined,
value: undefined,
})
); );
}} }}
automationId="segment-wordpress-role" automationId="segment-wordpress-role"

View File

@@ -151,6 +151,7 @@
'equals': __('equals'), 'equals': __('equals'),
'contains': __('contains'), 'contains': __('contains'),
'value': __('value'), 'value': __('value'),
'selectValue': __('Select value'),
'before': _x('before', 'Meaning: "Subscriber subscribed before Aprile"'), 'before': _x('before', 'Meaning: "Subscriber subscribed before Aprile"'),
'after': _x('after', 'Meaning: "Subscriber subscribed after April'), 'after': _x('after', 'Meaning: "Subscriber subscribed after April'),