Фильтрация событий двумя или более отдельными фильтрами в FullCalendar

У меня есть список событий в fullCalendar, которые принадлежат определенным пользователям и для разных клиентов. Я хочу фильтровать по пользователю и клиенту, чтобы при нажатии на одного пользователя отображались только его события. И пока щелкают этого пользователя, я щелкаю клиента, в календаре отображаются только события с этим клиентом и пользователем.

https://codepen.io/anon/pen/Owmqwe?page=1&

В моем примере, когда я нажимаю "Jack and Petco", должны отображаться только события клиента Jack's Petco. Но проблема в том, что когда я нажимаю Jack, затем Petco, вместо этого появляются ВСЕ события petco. То же самое происходит и наоборот, когда я нажимаю Petsmart, а затем - Jack. Появляется событие Jacks Petco, когда должны отображаться только события Jack's petsmart.

Я считаю, что проблема заключается в строке 96 JS, она как-то связана с этим оператором return eventRender, который я не знаю, как решить, я прочитал документы JQUERY, но у меня все еще нет опыта.

eventRender: function(event, element, view) {
          return $('input[type=radio][name=user_selector]:checked').val() === 'all' && $('input[type=radio][name=type_selector]:checked').val() === 'all'
                   || event.client.indexOf($("input[type=radio][name=type_selector]:checked").val()) >= 0
                   || event.user.indexOf($("input[type=radio][name=user_selector]:checked").val()) >= 0;

Еще одна вещь: я мог фильтровать пользователей через массивы источников событий. Но проблема в том, что хотя мой пример был статическим массивом, на практике я получаю события из базы данных динамически. Это означает, что я не смогу фильтровать события, у которых есть новые пользователи, мне придется постоянно обновлять код вручную. Так что это не сработает для меня, если нет обходного пути, о котором я не могу придумать.

Фильтрация событий путем добавления и удаления нескольких источников событий


person Redskins and Tesla    schedule 24.07.2018    source источник


Ответы (1)


Неправильное использование && и ||. Я считаю, что вам нужно что-то вроде этого:

eventRender: function(event, element, view) {
      return ($('input[type=radio][name=user_selector]:checked').val() === 'all' || event.user.indexOf($("input[type=radio][name=user_selector]:checked").val()) >= 0)
          && ($('input[type=radio][name=type_selector]:checked').val() === 'all' || event.client.indexOf($("input[type=radio][name=type_selector]:checked").val()) >= 0);
    },
person Laurynas Gerbutavicius    schedule 24.07.2018
comment
Идеально! Еще раз спасибо, Лауринас - person Redskins and Tesla; 24.07.2018