Удалить дубликаты событий - PullRequest
0 голосов
/ 01 октября 2019

Проблема: я использую FullCalendar 4 и хочу создать «календарь встреч», и я использую rrule для выбора свободного места.

Если я добавлю новую встречу на определенную дату, я хочу удалить существующее свободное место и вставить новое событие.

Как: начало: 2019-10-10Т10: 00 название: свободное место

начало: 2019-10-10Т10: 00 название: заблокировано для клиента

Первыйдолжно исчезнуть, а второй должен отображаться.

Теперь 2 события отображаются одновременно.

Как я могу это исправить?

РЕДАКТИРОВАТЬ:

Итак, первое событие использует rrule и повторяется каждый понедельник, вторник и пятницу.

Но у меня также есть событие во вторник в 7:00 (второе). Теперь я хочу удалить событие, используя rrule в эту дату.

Как я могу это сделать?

document.addEventListener('DOMContentLoaded', function () {
  var calendarEl = document.getElementById('calendar');

  var calendar = new FullCalendar.Calendar(calendarEl, {
    plugins: ['interaction', 'dayGrid', 'timeGrid', 'list', 'rrule'],
    header: {
      left: 'prev,next today',
      center: 'title',
      right: 'dayGridMonth,timeGridWeek,timeGridDay,listMonth'
    },
    defaultDate: '2019-09-12',
    editable: true,
    events: [
      {
        "title": "Free",
        rrule: {
          freq: 'weekly',
          byweekday: ['mo', 'tu', 'fr'],
          dtstart: '2019-09-02T07:00',
          until: '2022-06-01'
        },
      },
      {
        "title": "Blocked",
        "type": "call",
        "start": "2019-09-03T07:00"
      }
    ],
    eventTimeFormat: { // like '14:30:00'
      hour: '2-digit',
      minute: '2-digit',
      hour12: false
    },
    eventColor: '#378006',
    eventClick: function (info) {
      alert('Event: ' + info.event.start);
      alert('Coordinates: ' + info.jsEvent.pageX + ',' + info.jsEvent.pageY);
      alert('View: ' + info.view.type);

      // change the border color just for fun
      info.el.style.borderColor = 'red';
    },
  });

  calendar.render();
});

1 Ответ

0 голосов
/ 25 октября 2019

Исключением, которое вы ищете, является EXDATE. Я не пользователь FullCalendar, но из быстрого просмотра документов видно, что вы используете плагин rrule, который подключается к этой библиотеке: https://github.com/jakubroztocil/rrule

EXDATE отображается там, но он появляетсямне кажется, что плагин rrule, вероятно, не дает вам доступа к этой функциональности (поскольку он поддерживает создание RRule, а не RRuleSet). Если вы можете использовать EXDATE, это прекрасно подходит для вашего случая использования.

В противном случае, я думаю, что ваш лучший вариант - разделить повторяющееся событие, когда это произойдет, - завершить его на назначении до того, которое было забронировано, и создать новое событие, которое начинается на следующем открытом слоте. Например:

events: [
      {
        "title": "Free",
        rrule: {
          freq: 'weekly',
          byweekday: ['mo', 'tu', 'fr'],
          dtstart: '2019-09-02T07:00',
          until: '2019-09-04'
        },
      },
      {
        "title": "Blocked",
        "type": "call",
        "start": "2019-09-06T07:00"
      },
      {
        "title": "Free",
        rrule: {
          freq: 'weekly',
          byweekday: ['mo', 'tu', 'fr'],
          dtstart: '2019-09-09T07:00',
          until: '2022-06-01'
        },
      }
    ]

Обратите внимание, что я переместил встречу «Заблокировано» для этого примера, чтобы я мог фактически показать то, что я описал. Поскольку в вашем примере заблокированное назначение является вторым в серии, было бы более целесообразно просто иметь два события (первый свободный слот и заблокированный) и повторяющийся ряд для остальных.

...