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,
     ...