Add eslint rule to require parentheses in arrow functions

[MAILPOET-2162]
This commit is contained in:
Ján Mikláš
2019-07-31 10:58:56 +02:00
committed by Jack Kitterhing
parent a1bf7ec23f
commit a78562c774
78 changed files with 158 additions and 155 deletions

View File

@ -22,6 +22,7 @@
"react-hooks/rules-of-hooks": "error",
"react-hooks/exhaustive-deps": "warn",
// Exceptions
"arrow-parens": ["error", "always"],
"comma-dangle": ["error", "always-multiline"],
"no-script-url": 0,
"import/extensions": 0, // we wouldn't be able to import jQuery without this line

View File

@ -23,7 +23,7 @@ class FeatureAnnouncement extends React.Component {
const updateMailPoetNotice = ReactStringReplace(
MailPoet.I18n.t('updateMailPoetNotice'),
/\[link\](.*?)\[\/link\]/,
match => `<a href="update-core.php">${match}</a>`
(match) => `<a href="update-core.php">${match}</a>`
).join('');
jQuery('#beamerOverlay').append(
`<p id="mailpoet_update_notice" class="mailpoet_in_beamer_update_notice">${updateMailPoetNotice}</p>`

View File

@ -1,10 +1,10 @@
import PropTypes from 'prop-types';
import React from 'react';
const KeyValueTable = props => (
const KeyValueTable = (props) => (
<table className="widefat fixed" style={{ maxWidth: props.max_width }}>
<tbody>
{props.rows.map(row => (
{props.rows.map((row) => (
<tr key={`row_${row.key}`}>
<td className="row-title">{ row.key }</td>
<td>{ row.value }</td>

View File

@ -2,7 +2,7 @@ import PropTypes from 'prop-types';
import React from 'react';
import MailPoet from 'mailpoet';
const PrintBoolean = props => (
const PrintBoolean = (props) => (
<span>
{(props.children === true && props.truthy)
|| (props.children === false && props.falsy)

View File

@ -8,7 +8,7 @@ const SteppedProgressBar = (props) => {
return (
<div className="mailpoet_stepped_progress_bar">
{
[...Array(props.steps_count).keys()].map(step => (
[...Array(props.steps_count).keys()].map((step) => (
<div
className={`
mailpoet_stepped_progress_bar_step ${(step < props.step ? 'active' : '')} ${(step === (props.step - 1) ? 'current' : '')}

View File

@ -21,7 +21,7 @@ export const fromDom = async (element) => {
* @param {String} url
* @return {Promise<String>} DataURL of the generated image.
*/
export const fromUrl = url => new Promise((resolve, reject) => {
export const fromUrl = (url) => new Promise((resolve, reject) => {
const iframe = document.createElement('iframe');
const protocol = document.location.href.startsWith('https://') ? 'https:' : 'http:';
iframe.src = protocol + url.replace(/^https?:/, '');
@ -59,7 +59,7 @@ export const fromUrl = url => new Promise((resolve, reject) => {
* @param {Object} data
* @return {Promise<String>} DataURL of the generated image.
*/
export const fromNewsletter = data => new Promise((resolve, reject) => {
export const fromNewsletter = (data) => new Promise((resolve, reject) => {
const json = data;
if (!_.isUndefined(json.body)) {
json.body = JSON.stringify(json.body);
@ -69,7 +69,7 @@ export const fromNewsletter = data => new Promise((resolve, reject) => {
endpoint: 'newsletters',
action: 'showPreview',
data: json,
}).done(response => fromUrl(response.meta.preview_url)
}).done((response) => fromUrl(response.meta.preview_url)
.then(resolve)
.catch(reject)).fail(response => reject(response.errors));
.catch(reject)).fail((response) => reject(response.errors));
});

View File

@ -16,7 +16,7 @@ const ExperimentalFeatures = () => {
}).fail((response) => {
if (response.errors.length > 0) {
MailPoet.Notice.error(
response.errors.map(error => error.message),
response.errors.map((error) => error.message),
{ scroll: true }
);
}
@ -42,7 +42,7 @@ const ExperimentalFeatures = () => {
}).fail((response) => {
if (response.errors.length > 0) {
MailPoet.Notice.error(
response.errors.map(error => error.message),
response.errors.map((error) => error.message),
{ scroll: true }
);
}

View File

@ -22,7 +22,7 @@ class FormFieldCheckbox extends React.Component {
// it will be false in case value is "0" or empty
const isChecked = !!(Number(this.props.item[this.props.field.name]));
const options = Object.keys(this.props.field.values).map(
value => (
(value) => (
<p key={`checkbox-${value}`}>
<label htmlFor={this.props.field.name}>
<input

View File

@ -9,7 +9,7 @@ class FormFieldRadio extends React.Component { // eslint-disable-line react/pref
const selectedValue = this.props.item[this.props.field.name];
const options = Object.keys(this.props.field.values).map(
value => (
(value) => (
<p key={`radio-${value}`}>
<label htmlFor={this.props.field.name}>
<input

View File

@ -33,9 +33,9 @@ class FormFieldSelect extends React.Component {
keys = _.map(
_.sortBy(
_.pairs(this.props.field.values),
item => sortBy(item[0], item[1])
(item) => sortBy(item[0], item[1])
),
item => item[0]
(item) => item[0]
);
} else {
keys = Object.keys(this.props.field.values);
@ -47,7 +47,7 @@ class FormFieldSelect extends React.Component {
return filter(this.props.item, value);
})
.map(
value => (
(value) => (
<option
key={`option-${value}`}
value={value}

View File

@ -52,7 +52,7 @@ class Selection extends React.Component {
if (this.props.item !== undefined && this.props.field.name !== undefined) {
if (this.allowMultipleValues()) {
if (_.isArray(this.props.item[this.props.field.name])) {
return this.props.item[this.props.field.name].map(item => item.id);
return this.props.item[this.props.field.name].map((item) => item.id);
}
} else {
return this.props.item[this.props.field.name];

View File

@ -1,7 +1,7 @@
import React from 'react';
import PropTypes from 'prop-types';
const FormFieldTextarea = props => (
const FormFieldTextarea = (props) => (
<textarea
type="text"
className="regular-text"

View File

@ -175,7 +175,7 @@ class Form extends React.Component {
render() {
let errors;
if (this.getErrors() !== undefined) {
errors = this.getErrors().map(error => (
errors = this.getErrors().map((error) => (
<div className="mailpoet_notice notice inline error is-dismissible" key={`error-${error.message}`}>
<p>{ error.message }</p>
</div>

View File

@ -111,7 +111,7 @@ const itemActions = [
}).fail((response) => {
if (response.errors.length > 0) {
MailPoet.Notice.error(
response.errors.map(error => error.message),
response.errors.map((error) => error.message),
{ scroll: true }
);
}
@ -134,7 +134,7 @@ class FormList extends React.Component {
}).fail((response) => {
if (response.errors.length > 0) {
MailPoet.Notice.error(
response.errors.map(error => error.message),
response.errors.map((error) => error.message),
{ scroll: true }
);
}
@ -149,8 +149,8 @@ class FormList extends React.Component {
);
let segments = window.mailpoet_segments
.filter(segment => (jQuery.inArray(segment.id, form.segments) !== -1))
.map(segment => segment.name)
.filter((segment) => (jQuery.inArray(segment.id, form.segments) !== -1))
.map((segment) => segment.name)
.join(', ');
if (form.settings.segments_selected_by === 'user') {

View File

@ -14,7 +14,7 @@ const CronStatus = (props) => {
? (
<>
{
status.last_error.map(error => (
status.last_error.map((error) => (
<div key={error.worker}>
{error.worker}
:

View File

@ -47,13 +47,13 @@ const QueueStatus = (props) => {
]}
/>
<h4>{MailPoet.I18n.t('scheduledTasks')}</h4>
<TasksList show_scheduled_at tasks={status.latestTasks.filter(task => (task.status === 'scheduled'))} />
<TasksList show_scheduled_at tasks={status.latestTasks.filter((task) => (task.status === 'scheduled'))} />
<h4>{MailPoet.I18n.t('runningTasks')}</h4>
<TasksList tasks={status.latestTasks.filter(task => (task.status === null))} />
<TasksList tasks={status.latestTasks.filter((task) => (task.status === null))} />
<h4>{MailPoet.I18n.t('completedTasks')}</h4>
<TasksList tasks={status.latestTasks.filter(task => (task.status === 'completed'))} />
<TasksList tasks={status.latestTasks.filter((task) => (task.status === 'completed'))} />
</div>
);
};

View File

@ -9,7 +9,7 @@ function handleFocus(event) {
function printData(data) {
if (_.isObject(data)) {
const printableData = Object.keys(data).map(key => `${key}: ${data[key]}`);
const printableData = Object.keys(data).map((key) => `${key}: ${data[key]}`);
return (
<textarea

View File

@ -15,7 +15,7 @@ function renderStatusMessage(status, error, link) {
noticeMessage = ReactStringReplace(
noticeMessage,
/\[link\](.*?)\[\/link\]/g,
match => (
(match) => (
<a href={`${link}`} key="kb-link">{ match }</a>
)
);

View File

@ -12,7 +12,7 @@ const TasksList = (props) => {
<thead><TaskListLabelsRow show_scheduled_at={props.show_scheduled_at} /></thead>
<tbody>
{
props.tasks.length ? props.tasks.map(task => (
props.tasks.length ? props.tasks.map((task) => (
<TaskListDataRow
key={task.id}
task={task}

View File

@ -2,7 +2,7 @@ import PropTypes from 'prop-types';
import React from 'react';
import MailPoet from 'mailpoet';
const TasksListDataRow = props => (
const TasksListDataRow = (props) => (
<tr>
<td className="column column-primary">
{ props.task.id }

View File

@ -2,7 +2,7 @@ import PropTypes from 'prop-types';
import React from 'react';
import MailPoet from 'mailpoet';
const TasksListLabelsRow = props => (
const TasksListLabelsRow = (props) => (
<tr>
<th className="row-title">Id</th>
<th className="row-title">{MailPoet.I18n.t('type')}</th>

View File

@ -17,7 +17,7 @@ class ListingBulkActions extends React.Component {
getSelectedAction() {
const selectedAction = this.myRef.current.value;
if (selectedAction.length > 0) {
const action = this.props.bulk_actions.filter(act => (act.name === selectedAction));
const action = this.props.bulk_actions.filter((act) => (act.name === selectedAction));
if (action.length > 0) {
return action[0];
@ -100,7 +100,7 @@ class ListingBulkActions extends React.Component {
onChange={this.handleChangeAction}
>
<option value="">{MailPoet.I18n.t('bulkActions')}</option>
{ this.props.bulk_actions.map(action => (
{ this.props.bulk_actions.map((action) => (
<option
value={action.name}
key={`action-${action.name}`}

View File

@ -19,7 +19,7 @@ class ListingFilters extends React.Component {
getAvailableFilters = () => {
const filters = this.props.filters;
return Object.keys(filters).filter(filter => !(
return Object.keys(filters).filter((filter) => !(
filters[filter].length === 0
|| (
filters[filter].length === 1
@ -50,7 +50,7 @@ class ListingFilters extends React.Component {
key={`filter-${filter}`}
name={filter}
>
{ filters[filter].map(option => (
{ filters[filter].map((option) => (
<option
value={option.value}
key={`filter-option-${option.value}`}

View File

@ -123,7 +123,7 @@ class Listing extends React.Component {
setParams = () => {
if (this.props.location) {
const params = Object.keys(this.state)
.filter(key => (
.filter((key) => (
[
'group',
'filter',
@ -248,7 +248,7 @@ class Listing extends React.Component {
}).fail((response) => {
if (response.errors.length > 0) {
MailPoet.Notice.error(
response.errors.map(error => error.message),
response.errors.map((error) => error.message),
{ scroll: true }
);
}
@ -324,7 +324,7 @@ class Listing extends React.Component {
this.getItems();
}).fail((response) => {
MailPoet.Notice.error(
response.errors.map(error => error.message),
response.errors.map((error) => error.message),
{ scroll: true }
);
});
@ -353,7 +353,7 @@ class Listing extends React.Component {
this.getItems();
}).fail((response) => {
MailPoet.Notice.error(
response.errors.map(error => error.message),
response.errors.map((error) => error.message),
{ scroll: true }
);
});
@ -382,7 +382,7 @@ class Listing extends React.Component {
this.getItems();
}).fail((response) => {
MailPoet.Notice.error(
response.errors.map(error => error.message),
response.errors.map((error) => error.message),
{ scroll: true }
);
});
@ -402,7 +402,7 @@ class Listing extends React.Component {
this.handleGroup('all');
}).fail((response) => {
MailPoet.Notice.error(
response.errors.map(error => error.message),
response.errors.map((error) => error.message),
{ scroll: true }
);
});
@ -441,7 +441,7 @@ class Listing extends React.Component {
}).fail((response) => {
if (response.errors.length > 0) {
MailPoet.Notice.error(
response.errors.map(error => error.message),
response.errors.map((error) => error.message),
{ scroll: true }
);
}
@ -497,7 +497,7 @@ class Listing extends React.Component {
this.clearSelection();
} else {
this.setState((prevState) => {
const selectedIds = prevState.items.map(item => Number(item.id));
const selectedIds = prevState.items.map((item) => Number(item.id));
return {
selected_ids: selectedIds,
@ -575,7 +575,7 @@ class Listing extends React.Component {
// columns
let columns = this.props.columns || [];
columns = columns.filter(
column => (column.display === undefined || !!(column.display) === true)
(column) => (column.display === undefined || !!(column.display) === true)
);
// bulk actions

View File

@ -31,7 +31,7 @@ class ListingItem extends React.Component {
};
handleToggleItem = () => {
this.setState(prevState => ({
this.setState((prevState) => ({
expanded: !prevState.expanded,
}));
};
@ -67,7 +67,7 @@ class ListingItem extends React.Component {
if (customActions.length > 0) {
let isFirst = true;
itemActions = customActions
.filter(action => action.display === undefined || action.display(this.props.item))
.filter((action) => action.display === undefined || action.display(this.props.item))
.map((action, index) => {
let customAction = null;

View File

@ -14,7 +14,7 @@ const resumeMailerSending = () => {
}).fail((response) => {
if (response.errors.length > 0) {
MailPoet.Notice.error(
response.errors.map(error => error.message),
response.errors.map((error) => error.message),
{ scroll: true }
);
}
@ -132,7 +132,7 @@ const MailerCheckSettingsNotice = () => (
ReactStringReplace(
MailPoet.I18n.t('mailerCheckSettingsNotice'),
/\[link\](.*?)\[\/link\]/g,
match => <a href="?page=mailpoet-settings#mta" key="check-sending">{ match }</a>
(match) => <a href="?page=mailpoet-settings#mta" key="check-sending">{ match }</a>
)
}
</p>

View File

@ -54,7 +54,7 @@ class ListingPages extends React.Component {
this.setPage(e.target.value);
};
constrainPage = page => Math.min(Math.max(1, Math.abs(Number(page))), this.getLastPage());
constrainPage = (page) => Math.min(Math.max(1, Math.abs(Number(page))), this.getLastPage());
render() {
if (this.props.count === 0) {

View File

@ -19,7 +19,7 @@ const renderBreadcrumb = (newsletterType) => {
const initializeEditor = (config) => {
const editorContainer = document.getElementById('mailpoet_editor');
const getUrlParam = param => (document.location.search.split(`${param}=`)[1] || '').split('&')[0];
const getUrlParam = (param) => (document.location.search.split(`${param}=`)[1] || '').split('&')[0];
if (!editorContainer || !window.EditorApplication) return;
@ -65,7 +65,7 @@ const initializeEditor = (config) => {
.fail((pauseFailResponse) => {
if (pauseFailResponse.errors.length > 0) {
MailPoet.Notice.error(
pauseFailResponse.errors.map(error => error.message),
pauseFailResponse.errors.map((error) => error.message),
{ scroll: true, static: true }
);
}
@ -75,7 +75,7 @@ const initializeEditor = (config) => {
.fail((response) => {
if (response.errors.length > 0) {
MailPoet.Notice.error(
response.errors.map(error => error.message),
response.errors.map((error) => error.message),
{ scroll: true, static: true }
);
}

View File

@ -24,7 +24,7 @@ function NewsletterStatsInfo(props) {
newsletter.reply_to_name || ''
);
const segments = (newsletter.segments || []).map(segment => segment.name).join(', ');
const segments = (newsletter.segments || []).map((segment) => segment.name).join(', ');
return (
<div>

View File

@ -51,7 +51,7 @@ class CampaignStatsPage extends React.Component {
});
}).fail((response) => {
MailPoet.Notice.error(
response.errors.map(error => error.message),
response.errors.map((error) => error.message),
{ scroll: true }
);
this.setState({

View File

@ -147,7 +147,7 @@ const newsletterActions = [
}).fail((response) => {
if (response.errors.length > 0) {
MailPoet.Notice.error(
response.errors.map(error => error.message),
response.errors.map((error) => error.message),
{ scroll: true }
);
}
@ -196,7 +196,7 @@ class NewsletterListNotification extends React.Component {
});
};
renderStatus = newsletter => (
renderStatus = (newsletter) => (
<select
data-id={newsletter.id}
defaultValue={newsletter.status}
@ -211,7 +211,7 @@ class NewsletterListNotification extends React.Component {
let sendingFrequency;
// get list of segments' name
const segments = newsletter.segments.map(segment => segment.name);
const segments = newsletter.segments.map((segment) => segment.name);
const sendingToSegments = MailPoet.I18n.t('ifNewContentToSegments').replace(
'%$1s', segments.join(', ')
);

View File

@ -74,7 +74,7 @@ class NewsletterListNotificationHistory extends React.Component {
'has-row-actions'
);
const segments = newsletter.segments.map(segment => segment.name).join(', ');
const segments = newsletter.segments.map((segment) => segment.name).join(', ');
return (
<div>

View File

@ -102,7 +102,7 @@ const QueueSending = ({ newsletter }) => {
},
})
.done(() => setPaused(true))
.fail(response => setErrors(response.errors));
.fail((response) => setErrors(response.errors));
};
const resumeSending = () => {
@ -116,7 +116,7 @@ const QueueSending = ({ newsletter }) => {
},
})
.done(() => setPaused(false))
.fail(response => setErrors(response.errors));
.fail((response) => setErrors(response.errors));
};
return (

View File

@ -155,7 +155,7 @@ let newsletterActions = [
}).fail((response) => {
if (response.errors.length > 0) {
MailPoet.Notice.error(
response.errors.map(error => error.message),
response.errors.map((error) => error.message),
{ scroll: true }
);
}
@ -185,7 +185,7 @@ class NewsletterListStandard extends React.Component {
'has-row-actions'
);
const segments = newsletter.segments.map(segment => segment.name).join(', ');
const segments = newsletter.segments.map((segment) => segment.name).join(', ');
return (
<div>

View File

@ -57,7 +57,7 @@ export const checkCronStatus = (state) => {
const cronPingCheckNotice = ReactStringReplace(
MailPoet.I18n.t('cronNotAccessibleNotice'),
/\[link\](.*?)\[\/link\]/g,
match => (
(match) => (
<a
href="https://kb.mailpoet.com/article/231-sending-does-not-work"
target="_blank"

View File

@ -132,7 +132,7 @@ let newsletterActions = [
}).fail((response) => {
if (response.errors.length > 0) {
MailPoet.Notice.error(
response.errors.map(error => error.message),
response.errors.map((error) => error.message),
{ scroll: true }
);
}
@ -246,7 +246,7 @@ class NewsletterListWelcome extends React.Component {
// get segment
segment = _.find(
mailpoetSegments,
seg => (Number(seg.id) === Number(newsletter.options.segment))
(seg) => (Number(seg.id) === Number(newsletter.options.segment))
);
if (segment === undefined) {

View File

@ -37,7 +37,7 @@ const container = document.getElementById('newsletters_container');
const getAutomaticEmailsRoutes = () => {
if (!window.mailpoet_automatic_emails) return null;
return _.map(window.mailpoet_automatic_emails, automaticEmail => ({
return _.map(window.mailpoet_automatic_emails, (automaticEmail) => ({
path: `new/${automaticEmail.slug}`,
name: automaticEmail.slug,
component: AutomaticEmailEventsList,
@ -116,7 +116,7 @@ if (container) {
<HashRouter>
<Switch>
<Route exact path="/" render={() => <Redirect to="/standard" />} />
{routes.map(route => (
{routes.map((route) => (
<Route
key={route.path}
path={route.path}

View File

@ -25,7 +25,7 @@ const TIME_STEP_SECONDS = 3600;
const numberOfTimeSteps = SECONDS_IN_DAY / TIME_STEP_SECONDS;
const timeOfDayValues = _.object(_.map(
_.times(numberOfTimeSteps, step => step * TIME_STEP_SECONDS), (seconds) => {
_.times(numberOfTimeSteps, (step) => step * TIME_STEP_SECONDS), (seconds) => {
const date = new Date(null);
date.setSeconds(seconds);
const timeLabel = MailPoet.Date.format(date, { format: timeFormat, offset: 0 });
@ -46,7 +46,7 @@ const weekDayValues = {
const NUMBER_OF_DAYS_IN_MONTH = 28;
const monthDayValues = _.object(
_.map(
_.times(NUMBER_OF_DAYS_IN_MONTH, day => day), (day) => {
_.times(NUMBER_OF_DAYS_IN_MONTH, (day) => day), (day) => {
const labels = {
0: MailPoet.I18n.t('first'),
1: MailPoet.I18n.t('second'),

View File

@ -72,7 +72,7 @@ class NewsletterSend extends React.Component {
}
};
getThumbnailPromise = url => (
getThumbnailPromise = (url) => (
this.state.thumbnailPromise ? this.state.thumbnailPromise : fromUrl(url)
);
@ -96,7 +96,7 @@ class NewsletterSend extends React.Component {
errorMessage = ReactStringReplace(
errorMessage,
/\[link\](.*?)\[\/link\]/g,
match => `<a href="https://account.mailpoet.com/authorization" target="_blank" rel="noopener noreferrer">${match}</a>`
(match) => `<a href="https://account.mailpoet.com/authorization" target="_blank" rel="noopener noreferrer">${match}</a>`
);
jQuery('#field_sender_address')
.parsley()
@ -215,7 +215,7 @@ class NewsletterSend extends React.Component {
});
};
sendNewsletter = newsletter => MailPoet.Ajax.post(
sendNewsletter = (newsletter) => MailPoet.Ajax.post(
Hooks.applyFilters(
'mailpoet_newsletters_send_server_request_parameters',
{
@ -267,7 +267,7 @@ class NewsletterSend extends React.Component {
MailPoet.Modal.loading(false);
});
activateNewsletter = newsletter => MailPoet.Ajax.post({
activateNewsletter = (newsletter) => MailPoet.Ajax.post({
api_version: window.mailpoet_api_version,
endpoint: 'newsletters',
action: 'setStatus',
@ -336,7 +336,7 @@ class NewsletterSend extends React.Component {
}).fail((response) => {
if (response.errors.length > 0) {
MailPoet.Notice.error(
response.errors.map(error => error.message),
response.errors.map((error) => error.message),
{ scroll: true }
);
}
@ -408,7 +408,7 @@ class NewsletterSend extends React.Component {
showError = (response) => {
if (response.errors.length > 0) {
MailPoet.Notice.error(
response.errors.map(error => error.message),
response.errors.map((error) => error.message),
{ scroll: true }
);
}

View File

@ -107,7 +107,7 @@ class Congratulate extends React.Component {
id,
},
})
.done(response => this.newsletterLoaded(response.data));
.done((response) => this.newsletterLoaded(response.data));
}
newsletterLoaded(newsletter) {

View File

@ -39,7 +39,7 @@ let fields = [
},
transformChangedValue: function transformChangedValue(segmentIds) {
const allSegments = this.getItems();
return _.map(segmentIds, id => _.find(allSegments, segment => segment.id === id));
return _.map(segmentIds, (id) => _.find(allSegments, (segment) => segment.id === id));
},
validation: {
'data-parsley-required': true,

View File

@ -137,7 +137,7 @@ let fields = [
},
transformChangedValue: function transformChangedValue(segmentIds) {
const allSegments = this.getItems();
return _.map(segmentIds, id => _.find(allSegments, segment => segment.id === id));
return _.map(segmentIds, (id) => _.find(allSegments, (segment) => segment.id === id));
},
validation: {
'data-parsley-required': true,

View File

@ -4,7 +4,7 @@ import PropTypes from 'prop-types';
class TimeSelect extends React.Component { // eslint-disable-line react/prefer-stateless-function
render() {
const options = Object.keys(this.props.timeOfDayItems).map(
value => (
(value) => (
<option
key={`option-${this.props.timeOfDayItems[value]}`}
value={value}

View File

@ -39,8 +39,8 @@ const SendingStatus = (props) => {
id: newsletterId,
},
})
.done(res => setNewsletterSubject(res.data.subject))
.fail(res => MailPoet.Notice.showApiErrorNotice(res));
.done((res) => setNewsletterSubject(res.data.subject))
.fail((res) => MailPoet.Notice.showApiErrorNotice(res));
}, [newsletterId]);
return (
@ -77,8 +77,8 @@ const SendingStatusListing = React.memo(({ location, params }) => (
params={params}
endpoint="sending_task_subscribers"
base_url="sending-status/:id"
onRenderItem={item => <div><ListingItem {...item} /></div>}
getListingItemKey={item => `${item.taskId}-${item.subscriberId}`}
onRenderItem={(item) => <div><ListingItem {...item} /></div>}
getListingItemKey={(item) => `${item.taskId}-${item.subscriberId}`}
columns={columns}
messages={messages}
auto_refresh
@ -123,7 +123,7 @@ const ListingItem = ({
data: { taskId, subscriberId },
})
.done(() => window.mailpoet_listing.forceUpdate())
.fail(res => MailPoet.Notice.showApiErrorNotice(res));
.fail((res) => MailPoet.Notice.showApiErrorNotice(res));
};
const rowClasses = classNames(

View File

@ -9,7 +9,7 @@ import Hooks from 'wp-js-hooks';
import _ from 'underscore';
import PropTypes from 'prop-types';
const getEditorUrl = id => `admin.php?page=mailpoet-newsletter-editor&id=${id}`;
const getEditorUrl = (id) => `admin.php?page=mailpoet-newsletter-editor&id=${id}`;
const templatesCategories = [
{
@ -88,7 +88,7 @@ class NewsletterTemplates extends React.Component {
}).fail((response) => {
if (response.errors.length > 0) {
MailPoet.Notice.error(
response.errors.map(error => error.message),
response.errors.map((error) => error.message),
{ scroll: true }
);
}
@ -98,12 +98,12 @@ class NewsletterTemplates extends React.Component {
}
addTemplate(template) {
const categoriesNames = templatesCategories.map(category => category.name);
const categoriesNames = templatesCategories.map((category) => category.name);
let categories;
try {
categories = JSON.parse(template.categories)
.filter(name => categoriesNames.indexOf(name) !== -1);
.filter((name) => categoriesNames.indexOf(name) !== -1);
} catch (err) {
categories = [];
}
@ -156,7 +156,7 @@ class NewsletterTemplates extends React.Component {
}).fail((response) => {
if (response.errors.length > 0) {
MailPoet.Notice.error(
response.errors.map(error => error.message),
response.errors.map((error) => error.message),
{ scroll: true }
);
}
@ -173,7 +173,9 @@ class NewsletterTemplates extends React.Component {
afterTemplateDelete(success, id) {
if (success) {
Object.keys(this.templates).forEach((category) => {
this.templates[category] = this.templates[category].filter(template => template.id !== id);
this.templates[category] = this.templates[category].filter(
(template) => template.id !== id
);
});
}
this.setState({
@ -259,7 +261,7 @@ class NewsletterTemplates extends React.Component {
<Tabs
tabs={tabs}
selected={this.state.selectedTab}
select={name => this.setState({ selectedTab: name })}
select={(name) => this.setState({ selectedTab: name })}
/>
{content}

View File

@ -52,7 +52,7 @@ class ImportTemplate extends React.Component {
}).fail((response) => {
if (response.errors.length > 0) {
MailPoet.Notice.error(
response.errors.map(error => error.message),
response.errors.map((error) => error.message),
{ scroll: true }
);
}

View File

@ -36,7 +36,7 @@ class TemplateBox extends React.Component {
}).fail((response) => {
if (response.errors.length > 0) {
MailPoet.Notice.error(
response.errors.map(error => error.message),
response.errors.map((error) => error.message),
{ scroll: true }
);
}
@ -82,7 +82,7 @@ class TemplateBox extends React.Component {
}).fail((response) => {
if (response.errors.length > 0) {
MailPoet.Notice.error(
response.errors.map(error => error.message),
response.errors.map((error) => error.message),
{ scroll: true }
);
}

View File

@ -74,7 +74,7 @@ class NewsletterTypes extends React.Component {
}).fail((response) => {
if (response.errors.length > 0) {
MailPoet.Notice.error(
response.errors.map(error => error.message),
response.errors.map((error) => error.message),
{ scroll: true }
);
}
@ -175,7 +175,7 @@ class NewsletterTypes extends React.Component {
<Breadcrumb step="type" />
<ul className="mailpoet_boxes mailpoet_boxes_types">
{types.map(type => (
{types.map((type) => (
<li key={type.slug} data-type={type.slug} className="mailpoet_newsletter_types">
<div className="mailpoet_thumbnail">
{type.thumbnailImage ? <img src={type.thumbnailImage} alt="" /> : null}

View File

@ -49,7 +49,7 @@ class NewsletterNotification extends React.Component {
}).fail((response) => {
if (response.errors.length > 0) {
MailPoet.Notice.error(
response.errors.map(error => error.message),
response.errors.map((error) => error.message),
{ scroll: true }
);
}

View File

@ -59,13 +59,13 @@ class NotificationScheduling extends React.Component {
this.handleValueChanges(changes);
}
handleTimeOfDayChange = event => this.handleValueChanges({ timeOfDay: event.target.value });
handleTimeOfDayChange = (event) => this.handleValueChanges({ timeOfDay: event.target.value });
handleWeekDayChange = event => this.handleValueChanges({ weekDay: event.target.value });
handleWeekDayChange = (event) => this.handleValueChanges({ weekDay: event.target.value });
handleMonthDayChange = event => this.handleValueChanges({ monthDay: event.target.value });
handleMonthDayChange = (event) => this.handleValueChanges({ monthDay: event.target.value });
handleNthWeekDayChange = event => this.handleValueChanges({ nthWeekDay: event.target.value });
handleNthWeekDayChange = (event) => this.handleValueChanges({ nthWeekDay: event.target.value });
render() {
const value = this.getCurrentValue();

View File

@ -25,7 +25,7 @@ class NewsletterStandard extends React.Component {
}).fail((response) => {
if (response.errors.length > 0) {
MailPoet.Notice.error(
response.errors.map(error => error.message),
response.errors.map((error) => error.message),
{ scroll: true }
);
}

View File

@ -10,7 +10,7 @@ import { withRouter } from 'react-router-dom';
const availableRoles = window.mailpoet_roles || {};
const availableSegments = _.filter(
window.mailpoet_segments || [],
segment => segment.type === 'default'
(segment) => segment.type === 'default'
);
const events = {
@ -66,15 +66,15 @@ class WelcomeScheduling extends React.Component {
});
};
handleEventChange = event => this.handleValueChange('event', event.target.value);
handleEventChange = (event) => this.handleValueChange('event', event.target.value);
handleSegmentChange = event => this.handleValueChange('segment', event.target.value);
handleSegmentChange = (event) => this.handleValueChange('segment', event.target.value);
handleRoleChange = event => this.handleValueChange('role', event.target.value);
handleRoleChange = (event) => this.handleValueChange('role', event.target.value);
handleAfterTimeNumberChange = event => this.handleValueChange('afterTimeNumber', event.target.value);
handleAfterTimeNumberChange = (event) => this.handleValueChange('afterTimeNumber', event.target.value);
handleAfterTimeTypeChange = event => this.handleValueChange('afterTimeType', event.target.value);
handleAfterTimeTypeChange = (event) => this.handleValueChange('afterTimeType', event.target.value);
handleNext = () => {
MailPoet.Ajax.post({
@ -90,7 +90,7 @@ class WelcomeScheduling extends React.Component {
}).fail((response) => {
if (response.errors.length > 0) {
MailPoet.Notice.error(
response.errors.map(error => error.message),
response.errors.map((error) => error.message),
{ scroll: true }
);
}

View File

@ -17,7 +17,7 @@ class NewsletterWelcome extends React.Component {
super(props);
let availableSegments = window.mailpoet_segments || [];
let defaultSegment = 1;
availableSegments = availableSegments.filter(segment => segment.type === 'default');
availableSegments = availableSegments.filter((segment) => segment.type === 'default');
if (_.size(availableSegments) > 0) {
defaultSegment = _.first(availableSegments).id;
@ -57,7 +57,7 @@ class NewsletterWelcome extends React.Component {
}).fail((response) => {
if (response.errors.length > 0) {
MailPoet.Notice.error(
response.errors.map(error => error.message),
response.errors.map((error) => error.message),
{ scroll: true }
);
}

View File

@ -4,7 +4,7 @@ import Notice from 'notices/notice.jsx';
const APIErrorsNotice = ({ errors }) => {
if (errors.length < 1) return null;
return <Notice type="error">{errors.map(err => <p key={err.message}>{err.message}</p>)}</Notice>;
return <Notice type="error">{errors.map((err) => <p key={err.message}>{err.message}</p>)}</Notice>;
};
APIErrorsNotice.propTypes = {
errors: PropTypes.arrayOf(PropTypes.shape({

View File

@ -65,7 +65,7 @@ const useNpsPoll = () => {
return null;
};
const withNpsPoll = Component => (props) => {
const withNpsPoll = (Component) => (props) => {
useNpsPoll();
return <Component {...props} />;
};

View File

@ -1,6 +1,6 @@
import MailPoet from 'mailpoet';
const getSettingsKey = pollType => `show_poll_success_delivery_${pollType}`;
const getSettingsKey = (pollType) => `show_poll_success_delivery_${pollType}`;
const initTypeformScript = () => {
if (!document.getElementById('typef_orm')) {

View File

@ -30,7 +30,7 @@ const messages = {
},
};
const SegmentForm = props => (
const SegmentForm = (props) => (
<div>
<h1 className="title">
{MailPoet.I18n.t('segment')}

View File

@ -6,9 +6,9 @@ import PropTypes from 'prop-types';
import Listing from 'listing/listing.jsx';
const isWPUsersSegment = segment => segment.type === 'wp_users';
const isWooCommerceCustomersSegment = segment => segment.type === 'woocommerce_users';
const isSpecialSegment = segmt => isWPUsersSegment(segmt) || isWooCommerceCustomersSegment(segmt);
const isWPUsersSegment = (segment) => segment.type === 'wp_users';
const isWooCommerceCustomersSegment = (segment) => segment.type === 'woocommerce_users';
const isSpecialSegment = (segmt) => isWPUsersSegment(segmt) || isWooCommerceCustomersSegment(segmt);
const columns = [
{
@ -132,7 +132,7 @@ const itemActions = [
refresh();
}).fail((response) => {
MailPoet.Notice.error(
response.errors.map(error => error.message),
response.errors.map((error) => error.message),
{ scroll: true }
);
}),
@ -179,7 +179,7 @@ const itemActions = [
MailPoet.Modal.loading(false);
if (response.errors.length > 0) {
MailPoet.Notice.error(
response.errors.map(error => error.message),
response.errors.map((error) => error.message),
{ scroll: true }
);
}

View File

@ -58,8 +58,8 @@ const fields = [
}
return subscriber.subscriptions
.filter(subscription => subscription.status === 'subscribed')
.map(subscription => subscription.segment_id);
.filter((subscription) => subscription.status === 'subscribed')
.map((subscription) => subscription.segment_id);
},
filter: function filter(segment) {
return (!segment.deleted_at && segment.type === 'default');

View File

@ -23,7 +23,7 @@ const ImportSubscribers = () => {
<Switch>
<Route
path="/step_method_selection"
render={props => (
render={(props) => (
<StepMethodSelection
{...props}
setStepMethodSelectionData={setStepMethodSelectionData}
@ -33,7 +33,7 @@ const ImportSubscribers = () => {
/>
<Route
path="/step_input_validation"
render={props => (
render={(props) => (
<StepInputValidation
{...props}
stepMethodSelectionData={stepMethodSelectionData}
@ -42,7 +42,7 @@ const ImportSubscribers = () => {
/>
<Route
path="/step_data_manipulation"
render={props => (
render={(props) => (
<StepDataManipulation
{...props}
stepMethodSelectionData={stepMethodSelectionData}
@ -53,7 +53,7 @@ const ImportSubscribers = () => {
/>
<Route
path="/step_results"
render={props => (
render={(props) => (
<StepResults
{...props}
errors={stepDataManipulationData.errors}

View File

@ -3,7 +3,7 @@
import jQuery from 'jquery';
import _ from 'underscore';
const isRoleEmail = email => window.roleBasedEmails.findIndex(element => email.startsWith(`${element}@`)) >= 0;
const isRoleEmail = (email) => window.roleBasedEmails.findIndex((element) => email.startsWith(`${element}@`)) >= 0;
const detectAndCleanupEmail = (emailString) => {
let test;
@ -53,7 +53,7 @@ function sanitizeCSVData(csvData) {
let rowData;
let rowColumnCount;
Object.keys(csvData).forEach((rowCount) => {
rowData = csvData[rowCount].map(el => el.trim());
rowData = csvData[rowCount].map((el) => el.trim());
rowColumnCount = rowData.length;
// set the number of row elements based on the first non-empty row
if (columnCount === null) {

View File

@ -36,7 +36,7 @@ export default (onCreateSegment) => {
if (response.errors.length > 0) {
MailPoet.Notice.hide();
MailPoet.Notice.error(
response.errors.map(error => error.message),
response.errors.map((error) => error.message),
{ positionAfter: '#new_segment_name' }
);
}

View File

@ -66,7 +66,7 @@ export default (subscribersToImport, segments, updateExistingSubscribers, onImpo
MailPoet.Modal.loading(false);
if (response.errors.length > 0) {
MailPoet.Notice.error(
response.errors.map(error => error.message),
response.errors.map((error) => error.message),
{ scroll: true }
);
}
@ -89,9 +89,9 @@ export default (subscribersToImport, segments, updateExistingSubscribers, onImpo
importResult.segments = _.map(
_.filter(
importResult.segments,
segment => segments.includes(segment.id)
(segment) => segments.includes(segment.id)
),
data => data.name
(data) => data.name
);
onImportComplete(importResult);
}

View File

@ -74,7 +74,7 @@ export default () => {
}).fail((response) => {
if (response.errors.length > 0) {
MailPoet.Notice.error(
response.errors.map(error => error.message),
response.errors.map((error) => error.message),
{ positionAfter: '#field_name' }
);
}

View File

@ -17,7 +17,7 @@ export default (subscribers, header) => {
columnId = 'email';
} else if (header) {
headerName = header[i];
headerNameMatch = window.mailpoetColumns.map(el => el.name).indexOf(headerName);
headerNameMatch = window.mailpoetColumns.map((el) => el.name).indexOf(headerName);
// set column type using header
if (headerNameMatch !== -1) {
columnId = window.mailpoetColumns[headerNameMatch].id;

View File

@ -48,7 +48,7 @@ function Header({ header }) {
return (
<tr className="mailpoet_header">
<td />
{header.map(headerName => <td key={headerName}>{headerName}</td>)}
{header.map((headerName) => <td key={headerName}>{headerName}</td>)}
</tr>
);
}

View File

@ -30,11 +30,11 @@ const MethodMailChimp = ({ onFinish }) => {
.always(() => {
MailPoet.Modal.loading(false);
})
.done(response => setMailChimpLoadedLists(response.data))
.done((response) => setMailChimpLoadedLists(response.data))
.fail((response) => {
if (response.errors.length > 0) {
MailPoet.Notice.error(
response.errors.map(error => error.message),
response.errors.map((error) => error.message),
{ scroll: true }
);
}
@ -55,11 +55,11 @@ const MethodMailChimp = ({ onFinish }) => {
.always(() => {
MailPoet.Modal.loading(false);
})
.done(response => onFinish(response.data))
.done((response) => onFinish(response.data))
.fail((response) => {
if (response.errors.length > 0) {
MailPoet.Notice.error(
response.errors.map(error => error.message),
response.errors.map((error) => error.message),
{ scroll: true }
);
}
@ -80,7 +80,7 @@ const MethodMailChimp = ({ onFinish }) => {
forceSelect2: true,
values: mailChimpLoadedLists,
}}
onValueChange={e => setSelectedLists(e.target.value)}
onValueChange={(e) => setSelectedLists(e.target.value)}
/>
</div>
);

View File

@ -27,7 +27,7 @@ const MethodPaste = ({
{ReactStringReplace(
MailPoet.I18n.t('pasteDescription'),
/\[link\](.*?)\[\/link\]/,
match => (
(match) => (
<a
href={`${kbLink}`}
key="kb-link"

View File

@ -28,7 +28,7 @@ const MethodUpload = ({ onValueChange, canFinish, onFinish }) => {
{ReactStringReplace(
MailPoet.I18n.t('pasteDescription'),
/\[link\](.*?)\[\/link\]/,
match => (
(match) => (
<a
href={`${kbLink}`}
key="kb-link"

View File

@ -10,7 +10,7 @@ function RevenueTrackingPermission() {
MailPoet.Notice.showApiErrorNotice(response, { scroll: true });
};
const updateSettings = data => MailPoet.Ajax.post({
const updateSettings = (data) => MailPoet.Ajax.post({
api_version: window.mailpoet_api_version,
endpoint: 'settings',
action: 'set',

View File

@ -2,7 +2,7 @@ import PropTypes from 'prop-types';
import React from 'react';
import MailPoet from 'mailpoet';
const WelcomeWizardEmailCourseStep = props => (
const WelcomeWizardEmailCourseStep = (props) => (
<div className="mailpoet_welcome_wizard_step_content">
<h1>{MailPoet.I18n.t('welcomeWizardEmailCourseTitle')}</h1>
<p>{MailPoet.I18n.t('welcomeWizardEmailCourseText')}</p>

View File

@ -2,7 +2,7 @@ import PropTypes from 'prop-types';
import React from 'react';
import MailPoet from 'mailpoet';
const WelcomeWizardMigratedUserStep = props => (
const WelcomeWizardMigratedUserStep = (props) => (
<div className="mailpoet_welcome_wizard_step_content">
<h1>{MailPoet.I18n.t('welcomeWizardLetsStartTitle')}</h1>
<p>{MailPoet.I18n.t('welcomeWizardSenderMigratedUserText')}</p>

View File

@ -29,7 +29,7 @@ function RevenueTrackingPermissionStep({ submitForm, loading }) {
type="radio"
name="import_type"
checked={allowed === 'true'}
onChange={e => setAllowed(e.target.value)}
onChange={(e) => setAllowed(e.target.value)}
value="true"
/>
{MailPoet.I18n.t('revenueTrackingAllow')}
@ -40,7 +40,7 @@ function RevenueTrackingPermissionStep({ submitForm, loading }) {
type="radio"
name="import_type"
checked={allowed === 'false'}
onChange={e => setAllowed(e.target.value)}
onChange={(e) => setAllowed(e.target.value)}
value="false"
/>
{MailPoet.I18n.t('revenueTrackingDontAllow')}

View File

@ -3,7 +3,7 @@ import React from 'react';
import MailPoet from 'mailpoet';
import jQuery from 'jquery';
const WelcomeWizardSenderStep = props => (
const WelcomeWizardSenderStep = (props) => (
<div className="mailpoet_welcome_wizard_step_content">
<h1>{MailPoet.I18n.t('welcomeWizardLetsStartTitle')}</h1>
<p>{MailPoet.I18n.t('welcomeWizardSenderText')}</p>
@ -25,7 +25,7 @@ const WelcomeWizardSenderStep = props => (
placeholder="John Doe"
value={props.sender ? props.sender.name : ''}
data-parsley-required
onChange={e => props.update_sender({ name: e.target.value })}
onChange={(e) => props.update_sender({ name: e.target.value })}
/>
</label>
<label htmlFor="senderAddress">
@ -38,7 +38,7 @@ const WelcomeWizardSenderStep = props => (
value={props.sender ? props.sender.address : ''}
data-parsley-required
data-parsley-type="email"
onChange={e => props.update_sender({ address: e.target.value })}
onChange={(e) => props.update_sender({ address: e.target.value })}
/>
</label>
<div className="mailpoet_welcome_wizard_step_controls">

View File

@ -2,7 +2,7 @@ import PropTypes from 'prop-types';
import React from 'react';
import SteppedProgressBar from '../../common/stepped_progess_bar.jsx';
const WelcomeWizardStepLayout = props => (
const WelcomeWizardStepLayout = (props) => (
<>
<div className="mailpoet_welcome_wizard_header">
<img src={window.mailpoet_logo_url} width="200" height="87" alt="MailPoet logo" />

View File

@ -2,7 +2,7 @@ import PropTypes from 'prop-types';
import React from 'react';
import MailPoet from 'mailpoet';
const WelcomeWizardUsageTrackingStep = props => (
const WelcomeWizardUsageTrackingStep = (props) => (
<div className="mailpoet_welcome_wizard_step_content">
<h1>{MailPoet.I18n.t('welcomeWizardUsageTrackingStepTitle')}</h1>
<p>{MailPoet.I18n.t('welcomeWizardTrackingText')}</p>

View File

@ -2,7 +2,7 @@ import PropTypes from 'prop-types';
import React from 'react';
import MailPoet from 'mailpoet';
const WelcomeWizardWooCommerceStep = props => (
const WelcomeWizardWooCommerceStep = (props) => (
<div className="mailpoet_welcome_wizard_step_content">
<h1>{MailPoet.I18n.t('welcomeWizardWooCommerceStepTitle')}</h1>
<p>

View File

@ -48,7 +48,7 @@ const WelcomeWizardStepsController = (props) => {
setLoading(false);
if (response.errors.length > 0) {
MailPoet.Notice.error(
response.errors.map(error => error.message),
response.errors.map((error) => error.message),
{ scroll: true }
);
}