refactoring
JavaScript
/*
filterDataForTable (data) {
const {positionsStatusFilter, investmentTypeFilter} = this.props;
let filteredData = [];
if (!positionsStatusFilter.length && !investmentTypeFilter.length) return data;
if (positionsStatusFilter.length) {
filteredData = R.map(item =>
R.filter(R.propEq('changeType', item))(data), positionsStatusFilter);
}
if (investmentTypeFilter.length) {
filteredData = R.map(item =>
R.filter(R.propEq('investmentTypeDesc', item))(data), investmentTypeFilter);
}
if (positionsStatusFilter.length && investmentTypeFilter.length) {
filteredData = R.map(item =>
R.filter(R.propEq('changeType', item))(filteredData[0]), positionsStatusFilter);
}
return R.compose(
R.unnest
)(filteredData);
}
*/
// Good
dataFilter(investmentTypeFilter, positionsStatusFilter) {
return [{
condition: investmentTypeFilter.length,
filter: this.filterNoDataByType('investmentTypeDesc', investmentTypeFilter)
},
{
condition: positionsStatusFilter.length,
filter: this.filterNoDataByType('changeType', positionsStatusFilter)
}, {
condition: investmentTypeFilter.length && positionsStatusFilter.length,
filter: this.filterDataByType('investmentTypeDesc', investmentTypeFilter)
}];
}
filterHasDataByType(type, [filteredData]) {
return R.map(item => R.filter(R.propEq(type, item), filteredData));
}
filterNoDataByType(type, filteredData) {
return R.map(item => R.filter(R.propEq(type, item), filteredData));
}
reducer(data) {
return (item, acc) => {
if (item.condition) {
return item.filter(data);
}
return acc
}
}
filterDataForTable (dataFilter, data) {
const {positionsStatusFilter, investmentTypeFilter} = this.props;
if (R.and(R.isEmpty(positionsStatusFilter), R.isEmpty(investmentTypeFilter)) return data;
return R.compose(
R.unnest,
...