Взаимосвязанные фильтры
Есть список товаров и несколько связанных с ним и друг с другом фильтров. Например: страна, город, сеть магазинов. Страна-город - связь один ко многим, сеть магазинов - многие ко многим. Т.е., при выборе сетей магазинов должны ограничиваться города и соответственно страны теми, где эта сеть представлена (а так же удаляться ранее выбранные, если в них ничего нет). И наоборот. В общем всё влияет на всё.
Это пример. Фильтров может быть больше и логика сложнее. Существует ли более-менее универсальный 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, время: 06:50. |