'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

var _rollupPluginBabelHelpers = require('../../../_virtual/_rollupPluginBabelHelpers.js');

// Утилита, возвращающая отфильтрованное дерево items.
// Фильтрация происходит как по названиям категорий, так и по названиям конечных элементов.
// По дефолту регистр игнорируется. Но можно прокинуть свою функцию для кастомной фильтрации.
// Фильтрация отключается в 2 случаях:
//   1) При пустом инпуте (юзер пока еще не ввел значение или уже очистил);
//   2) Если значение инпута совпадает с выбранным элементом (когда юзер выбрал айтем, но потом решил снова открыть);
// Не мутирует исходные данные.
var filterItems = function filterItems(items, textValue, currentLabel, customFilter) {
  if (!textValue && !customFilter || textValue === currentLabel) return items;
  var filter = customFilter || defaultFilter;
  var dfs = function dfs(items) {
    var newItems = [];
    items.forEach(function (item) {
      if (item.items) {
        if (filter(item, textValue)) {
          newItems.push(item);
          return;
        }
        var res = dfs(item.items);
        if (res.length > 0) {
          newItems.push(_rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({}, item), {}, {
            items: res
          }));
        }
      } else if (filter(item, textValue)) {
        newItems.push(item);
      }
    });
    return newItems;
  };
  return dfs(items);
};
var defaultFilter = function defaultFilter(item, textValue) {
  return item.label.toLowerCase().includes(textValue.toLowerCase());
};

exports.defaultFilter = defaultFilter;
exports.filterItems = filterItems;
