Компонент иерархической фильтрации данных.
Всем привет! В свое время передо мной была поставлена задача реализовать логику данного компонента:
Есть некоторое XML описание блока внутри которого могут быть виджеты и другие вложенные блоки. Вложенность бесконечная.
Виджеты и блоки могут иметь фильтры.
Фильтрация в общем случае происходит по некоторым абстрактным ключам параметров.
Фильтры находящиеся по иерархии ниже перекрывают действия фильтров находящихся выше по иерархии.
Как только фильтр в блоке или виджете был снят полностью он открывает возможное действие для фильтра более высокого уровня.
Умерло много котиков, когда я не смог найти хоть какого - либо готового решения.
Пришлось писать самому. Хочу поделиться исходниками представленными в каноническом виде. Данный компонент лишь дает информацию что и по каким ключам нужно обновить согласно описанной иерархии. Сама визуализации блока, виджетов могут реализовываться естественно сторонними фреймворками. А также методы получения данных в виджеты должны быть реализованы через отдельные модули, что естественно я еще буду расширять.
Исходный код:
https://github.com/yriiarutiunian/cif
Спасибо