autolab/Autolab

View on GitHub
app/assets/javascripts/init_handin_datetimepickers.js

Summary

Maintainability
A
1 hr
Test Coverage
// Initialize all Flatpicker Datetime Pickers on the page

$(document).ready(function() {

  function createDatePicker(selector, config) {   
    var elt = $(selector)
    var defaults = {
      enableTime: true,
      altInput: true,
      disableMobile: true,
      defaultDate: moment(elt.val(), elt.data("date-format")).toDate(),
      parseDate: (datestr, format) => {
        return moment(datestr, format, true).toDate();
      },
      formatDate: (date, format) => {
        return moment(date).format(format);
      },
    }
    Object.assign(defaults, config);
    /* Invoke flatpickr library */
    return flatpickr(selector, defaults)
  }
  
  /* Add custom onClose handler for end at date picker */
  var end_at_pickr = createDatePicker('#assessment_end_at');

  function dueAtOnCloseHandler(selected_dates, date_str, flatpickr_inst) {
      var cur_date = selected_dates[0];

      if (end_at_pickr.selectedDates[0].getTime() < cur_date.getTime()) {
        end_at_pickr.setDate(cur_date, true);
      }
  }

  /* Add custom onClose handler for due at date picker */
  var due_at_pickr = createDatePicker('#assessment_due_at', {onClose : dueAtOnCloseHandler});

  function startAtPickronCloseHandler(selected_dates, date_str, flatpickr_inst){
    var cur_date = selected_dates[0];
    
    if (due_at_pickr.selectedDates[0].getTime() < cur_date.getTime()) {
      due_at_pickr.setDate(cur_date, true);
    }

    if (end_at_pickr.selectedDates[0].getTime() < cur_date.getTime()) {
      end_at_pickr.setDate(cur_date, true);
    }
  }

  /* Add custom onClose handler for start_at date picker */
  createDatePicker('#assessment_start_at', {onClose: startAtPickronCloseHandler});
})