Prevent Past Event Creation

Sometimes we don't want users to be able to create events in the past or to alter past events. This might be role based in some cases or applied in general to the calendar.

To disable past event creation and manipulation, a couple of things need to be handled:

  • Invalidate past dates & times - this takes care of validating event drop and event creation on past dates and times that are before the past hour
  • Mark past events as fixed - to do this, set the editable property of the event object to false for the events that should remain fixed
  • Handle past occurrences of recurring events - recurring events are loaded as a single event and the occurrences are generated by the scheduler.

Moving the past occurrences need to be handled in the onEventUpdate and onEventCreate lifecycle events

  • Give feedback to the user - optionally, a toast can be displayed to give feedback to the user why an event cannot be dropped, moved and created in the past. For this we can use the onEventCreateFailed and onEventUpdateFailed lifecycle events
Download and try example

Demo

Loading the live demo

Preview in full screen

Block event creation and editing on past dates in the Scheduler — past dates are blocked, past events are locked, and failed attempts show a toast.

Code

mobiscroll.setOptions({
  locale:  ,
  theme: ' ',
  themeVariant: ' '
});

var now = new Date();
var today = new Date(now.setMinutes(59));
var yesterday = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 1);

var inst = mobiscroll.eventcalendar('#demo-disallow-past-event-creation', {
  view: {
    scheduler: {
      type: 'week',
    },
  },
  invalid: [
    {
      recurring: {
        repeat: 'daily',
        until: yesterday,
      },
    },
    {
      start: yesterday,
      end: today,
    },
  ],
  clickToCreate: true,
  dragToCreate: true,
  dragToMove: true,
  dragToResize: true,
  onEventCreateFailed: function (args) {
    if (!args.originEvent) {
      mobiscroll.toast({
        message: "Can't create event in the past",
      });
    }
  },
  onEventUpdateFailed: function (args) {
    if (!args.oldEventOccurrence) {
      mobiscroll.toast({
        message: "Can't move event in the past",
      });
    }
  },
  onEventCreate: function (args) {
    var oldEvent = args.originEvent;
    var start = oldEvent && oldEvent.start ? oldEvent.start : null;

    // Handle recurring events
    if (start && start < today) {
      inst.updateEvent(oldEvent);
      mobiscroll.toast({
        message: "Can't move past event",
      });
      return false;
    }
  },
  onEventUpdate: function (args) {
    var oldEvent = args.oldEvent;
    var start = oldEvent && oldEvent.start ? oldEvent.start : null;
    var oldEventOccurrence = args.oldEventOccurrence;
    var occurrenceStart = oldEventOccurrence && oldEventOccurrence.start ? oldEventOccurrence.start : null;

    // Handle recurring events
    if ((start && start < today) || (occurrenceStart && occurrenceStart < today)) {
      inst.updateEvent(oldEvent);
      return false;
    }
  },
});

mobiscroll.getJson(
  'https://trial.mobiscroll.com/events/?vers=5',
  function (events) {
    for (var i = 0; i < events.length; ++i) {
      var event = events[i];
      // Convert dates to date objects
      event.start = event.start ? new Date(event.start) : event.start;
      event.end = event.end ? new Date(event.end) : event.end;
      // Mark past events as fixed by setting the event.editable property to false
      event.editable = event.start && today < event.start;
    }
    inst.setEvents(events);
  },
  'jsonp',
);
  

Duplicate Session

You have signed in on a different machine. To keep everything in sync, you have been signed out of this session.

If you need to invite team members, manage seats and accounts you can do it from the licenses page.

Duplicate Session

We noticed you are logged in on a different machine and have closed your old session.

If you need to invite team members, manage seats and accounts you can do it from the licenses page.