Refactor to not define components inside a component

This commit is contained in:
Amine Ben hammou
2019-07-12 03:09:42 +01:00
committed by M. Shull
parent ab04cbab27
commit c8c47eb37a

View File

@ -1,29 +1,15 @@
import React, { useLayoutEffect } from 'react';
import PropTypes from 'prop-types';
import MailPoet from 'mailpoet';
import _ from 'underscore';
import generateColumnSelection from './generate_column_selection.jsx';
import matchColumns from './match_columns.jsx';
const MAX_SUBSCRIBERS_SHOWN = 10;
function MatchTable({
subscribersCount,
subscribers,
header,
}) {
let selectedColumns = [];
useLayoutEffect(() => {
generateColumnSelection((selectedOptionId, columnIndex) => {
selectedColumns[columnIndex] = selectedOptionId;
});
});
function ColumnDataMatch() {
function ColumnDataMatch({ header, subscribers }) {
const matchedColumnTypes = matchColumns(subscribers, header);
selectedColumns = _.pluck(matchedColumnTypes, 'column_id');
// selectedColumns = _.pluck(matchedColumnTypes, 'column_id');
return (
<tr>
<th>{MailPoet.I18n.t('matchData')}</th>
@ -44,8 +30,12 @@ function MatchTable({
</tr>
);
}
ColumnDataMatch.propTypes = {
header: PropTypes.arrayOf(PropTypes.string).isRequired,
subscribers: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.string)).isRequired,
};
function Header() {
function Header({ header }) {
return (
<tr className="mailpoet_header">
<td />
@ -53,6 +43,9 @@ function MatchTable({
</tr>
);
}
Header.propTypes = {
header: PropTypes.arrayOf(PropTypes.string).isRequired,
};
function Subscriber({ subscriber, index }) {
return (
@ -63,13 +56,12 @@ function MatchTable({
</>
);
}
Subscriber.propTypes = {
subscriber: PropTypes.arrayOf(PropTypes.string).isRequired,
index: PropTypes.node.isRequired,
};
function Subscribers() {
function Subscribers({ subscribers, subscribersCount }) {
const filler = '. . .';
const fillerArray = Array(subscribers[0].length).fill(filler);
return (
@ -103,16 +95,33 @@ function MatchTable({
</>
);
}
Subscribers.propTypes = {
subscribersCount: PropTypes.number.isRequired,
subscribers: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.string)).isRequired,
};
function MatchTable({
subscribersCount,
subscribers,
header,
}) {
const selectedColumns = [];
useLayoutEffect(() => {
generateColumnSelection((selectedOptionId, columnIndex) => {
selectedColumns[columnIndex] = selectedOptionId;
});
});
return (
<div className="subscribers_data">
<table className="mailpoet_subscribers widefat fixed">
<thead>
<ColumnDataMatch />
<ColumnDataMatch header={header} subscribers={subscribers} />
</thead>
<tbody>
<Header />
<Subscribers />
<Header header={header} />
<Subscribers subscribers={subscribers} subscribersCount={subscribersCount} />
</tbody>
</table>
</div>