Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Взаимосвязанные фильтры (https://javascript.ru/forum/misc/78818-vzaimosvyazannye-filtry.html)

Shitbox2 08.11.2019 22:29

Взаимосвязанные фильтры
 
Есть список товаров и несколько связанных с ним и друг с другом фильтров. Например: страна, город, сеть магазинов. Страна-город - связь один ко многим, сеть магазинов - многие ко многим. Т.е., при выборе сетей магазинов должны ограничиваться города и соответственно страны теми, где эта сеть представлена (а так же удаляться ранее выбранные, если в них ничего нет). И наоборот. В общем всё влияет на всё.

Это пример. Фильтров может быть больше и логика сложнее. Существует ли более-менее универсальный js-плагин для фильтрации связанных списков? Можно не только на js, хоть на Питоне

laimas 09.11.2019 01:14

Цитата:

Сообщение от Shitbox2
Можно не только на js, хоть на Питоне

... WHERE field1 = val [AND | OR field2 = val ....]

SQL тоже язык, в других языках суть та же самая. Так какая вам нужна универсальность если фильтр, это условия, которых может быть от 0 до N, или что подразумевается под универсальностью?

Shitbox2 09.11.2019 07:38

Набросал за ночь что-то такое:
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, время: 15:28.