ReactiveSearch - * и * операция над массивом объектов
Рассмотрим следующего пользователя, который хранится в нашей коллекции "users" базы данных mongo, которая синхронизируется с appbase.io:
{
name: "John Doe",
id: "jdoe",
courses: [
{
name: "CS100",
academic_year: "2018-2019",
academic_term: "Fall"
},
{
name: "ECON1",
academic_year: "2017-2018",
academic_term: "Winter"
}
]
}
В нашем приложении мы хотим, чтобы была возможность фильтровать коллекцию наших пользователей по курсу, учебному году и академическому сроку. Таким образом, мы используем компоненты SingleList реактивного поиска для выбора фильтров. Вот как выглядит этот код:
<div> Course: </div>
<SingleList
componentId="CourseFilter"
dataField="courses.name.keyword"
placeholder="Enter Course"
react={{
and: ["CourseYearFilter", "CourseTermFilter"]
}}
/>
<div> Academic Year: </div>
<SingleList
componentId="CourseYearFilter"
dataField="courses.academic_year.keyword"
placeholder="Enter Academic Year"
react={{
and: ["CourseFilter", "CourseTermFilter"]
}}
/>
<div> Term: </div>
<SingleList
componentId="CourseTermFilter"
dataField="courses.academic_term.keyword"
placeholder="Enter Academic Term"
react={{
and: ["CourseFilter", "CourseYearFilter"]
}}
/>
Теперь вот поведение, которое мы хотим: Все три компонента должны реагировать на изменения друг в друге. Таким образом, если я выберу "CS100" в курсе SingleList, то учебный год SingleList должен показывать ТОЛЬКО "2018-2019" в качестве опции, а академический термин SingleList должен отображать ТОЛЬКО "Fall" в качестве опции. Думайте об этом как об операции и внутри объектов, вложенных в массив.
Этоповедение, которое мы наблюдаем: если я выберу "CS100" в курсе SingleList, то учебный год SingleList покажет мне и "2018-2019", и "2017-2018" в качестве опций, даже если CS100 был явно выбран в "2017-2018". Кроме того, академический термин SingleList показывает мне и "осень" и "зима" в качестве вариантов. Причиной этого, по-видимому, является то, что реактивный поиск не ищет точки данных в одном и том же объекте, скорее, он просто проверяет все поля acade_year и acade_term, которые существуют в одном и том же пользователе, который принял "CS100".
Как я могу это исправить, чтобы получить поведение, которое я хочу?