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".

Как я могу это исправить, чтобы получить поведение, которое я хочу?

0 ответов

Другие вопросы по тегам