Набросал за ночь что-то такое:
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, но вместо значений отфильтрованные списки с учетом всех зависимостей.
Не хочу писать велосипеды, может быть кто-то видел что-нибудь подобное?