Взаимосвязанные фильтры
Есть список товаров и несколько связанных с ним и друг с другом фильтров. Например: страна, город, сеть магазинов. Страна-город - связь один ко многим, сеть магазинов - многие ко многим. Т.е., при выборе сетей магазинов должны ограничиваться города и соответственно страны теми, где эта сеть представлена (а так же удаляться ранее выбранные, если в них ничего нет). И наоборот. В общем всё влияет на всё.
Это пример. Фильтров может быть больше и логика сложнее. Существует ли более-менее универсальный js-плагин для фильтрации связанных списков? Можно не только на js, хоть на Питоне |
Цитата:
SQL тоже язык, в других языках суть та же самая. Так какая вам нужна универсальность если фильтр, это условия, которых может быть от 0 до N, или что подразумевается под универсальностью? |
Набросал за ночь что-то такое:
const schema = { networkGateways: { affects: ['gatewayId=gateways.id', 'networkId=networks.id'], source: this.networkGateways }, networks: { affects: ['id=networkGateways.networkId', '~countryId=countries.id'], source: this.networks }, gateways: { affects: ['id=networkGateways.gatewayId'], source: this.gateways }, countries: { affects: ['id=networks.countryId'], source: this.countries } }; this.richFilter = new RichFilter(schema); const newFilteredLists = this.richFilter.update('countries', this.chosenCountryIds); Object.assign(this.filteredLists, newFilteredLists); // Дальше фреймворк обновит UI newFilteredLists - объект с такими же полями как у schema, но вместо значений отфильтрованные списки с учетом всех зависимостей. Не хочу писать велосипеды, может быть кто-то видел что-нибудь подобное? |
Часовой пояс GMT +3, время: 05:12. |