JSFiddle - React, Tailwind, and code Playground

by Jens Kühn

TypeScript

function filterTree(data: any[] = [], filterText: string, prop: string): any[] {
  if (data === []) {
    return [];
  }
  const result: any[] = [];
  data.forEach(d => {
    if (d.hasOwnProperty(prop)) {
      if (d[prop].includes(filterText)) {
        result.push(d);
      } else if (typeof d.items === 'object') {
        const childResults = filterTree(d.items, filterText, prop);
        if (childResults.length > 0) {
          result.push({...d, items: childResults});
        }
      }
    }
  });
  return result;
}


const t = [{
    "name": "kpis",
    "items": [{
      "name": "Budget Per Campaign",
      "items": [{
        "name": "Budget Per Campaign",
        "identifier": "[Measures].[Budget Per Campaign Trend]"
      }, {
        "name": "Budget Per Campaign",
        "identifier": "[Measures].[Budget Per Campaign Status]"
      }, {
        "name": "Budget Per Campaign",
        "identifier": ""
      }, {
        "name": "Budget Per Campaign",
        "identifier": "[Measures].[Budget Per Campaign Value]"
      }]
    }]
  },
  {
    "name": "measures",
    "items": [{
        "name": "Bridge_Date",
        "items": [{
          "name": "Campaign ID",
          "identifier": "[Measures].[Campaign ID]"
        }]
      },
      {
        "name": "Budget Per Campaign",
        "items": [{
          "name": "Budget Per Campaign",
          "identifier": "[Measures].[Budget Per Campaign Trend]"
        }, {
          "name": "Budget Per Campaign",
          "identifier": "[Measures].[Budget Per Campaign Status]"
        }, {
          "name": "Budget Per Campaign",
          "identifier": ""
        }, {
          "name": "Budget Per Campaign",
          "identifier": "[Measures].[Budget Per Campaign Value]"
        }]
      },
      {
        "name": "Delivery",
        "items": [{
          "name": "Internal",
          "items": [{
            "name": "CTR_Impressions",
            "identifier": "[Measures].[CTR_Impressions]"
          }, {
        ...