earlymarket/CoPosition

View on GitHub
app/assets/javascripts/date_picker.es6

Summary

Maintainability
Test Coverage
window.COPO = window.COPO || {};
window.COPO.datePicker = {

  init: function() {
    $('.datepick').datepicker({
      selectMonths: true,
      selectYears: 15,
      onSet: function(arg) {
        var from_picker = $('#input_from').datepicker()
        var to_picker = $('#input_to').datepicker()
        var selectedPicker = this.component.$node[0].name;
        if (selectedPicker === 'from') {
          COPO.datePicker.setLimits(arg, to_picker, from_picker, 'min')
        } else if (selectedPicker === 'to') {
          COPO.datePicker.setLimits(arg, from_picker, to_picker, 'max')
        }
        if ('select' in arg) { //prevent closing on selecting month/year
          this.close();
        }
      }
    });
    let from_picker = $('#input_from').datepicker()
    let to_picker = $('#input_to').datepicker()
    // Check if there’s a “from” or “to” date to start with.
    COPO.datePicker.checkPickers(to_picker, from_picker, 'min')
    COPO.datePicker.checkPickers(from_picker, to_picker, 'max')
    COPO.datePicker.checkPickers(to_picker, to_picker, 'select')
    COPO.datePicker.checkPickers(from_picker, from_picker, 'select')
  },

  setLimits: function(event, beingSet, setter, limit) {
    if (event.select) {
      beingSet.set(limit, setter.get('select'))
    }
    else if ('clear' in event) {
      beingSet.set(limit, false)
    }
  },

  checkPickers: function(beingSet, setter, limit) {
    if (setter.get('value')) {
      let dateArray = setter.get('value').split(" ");
      let date = new Date(dateArray[1].replace(/\D/g,'') + " " + dateArray[2] + " " + dateArray[3])
      beingSet.set(limit, date)
    }
  },

  openIfSet: function(picker) {
    if (picker.get('value')) {
      $('#date-range-toggle').click()
    }
  }
}