berkmancenter/bookanook

View on GitHub
app/assets/javascripts/administrate/components/date_time_picker.js

Summary

Maintainability
C
1 day
Test Coverage
$(function () {
  $(".datetimepicker").datetimepicker({
    debug: false,
    format: "YYYY-MM-DD HH:mm:ss",
  });
  $(".datepicker").datetimepicker({
    debug: false,
    format: "YYYY-MM-DD",
  });

  if ($('.reservation-when-times').length) {
    $('#reservation_start_time').parent().hide();
    $('#reservation_end_time').parent().hide();

    var timeSelector = new TimeSelect('.reservation-when-times', {
      continuous: true
    });

    updateInputs(timeSelector);

    $('#reservation_date').on('dp.change', function (ev) {
      updateInputs(timeSelector);
    });

    $('.reservation-when-times').on('timeSelector:change', function(e, selector) {
      updateInputs(selector);
    });
  }

  // for setting start/time in Reservation create/edit form
  function updateInputs(selector) {
    if ($('#reservation_date').val()) {
      var startDate = new Date($('#reservation_date').val());
      var endDate = new Date($('#reservation_date').val());
      var dateTimeRange = getDateTimeRange(selector, startDate, endDate);
      updateTimeRangeLabel(dateTimeRange, $('.time-range'));
      if(dateTimeRange[0] == 'InvalidDate') {
        $('input[id=reservation_start_time]').attr('value', '');
        $('input[id=reservation_end_time]').attr('value', '');
      } else {
        $('input[id=reservation_start_time]').attr('value', dateTimeRange[0]);
        $('input[id=reservation_end_time]').attr('value', dateTimeRange[1]);
      }
    }
  }

  // copied from reservation.js
  function updateTimeRangeLabel(dateRange, $rangeLabel) {
    var startTime = ''
    var endTime = ''

    if(dateRange[0] != 'Invalid Date') {
      startTime = dateRange[0].toLocaleTimeString().replace(/:\d{2}\s/,' ');
      endTime = ' - ' + dateRange[1].toLocaleTimeString().replace(/:\d{2}\s/,' ');
    }

    $rangeLabel.find('.start').text(startTime);
    $rangeLabel.find('.end').text(endTime);
  }

  // copied from reservation.js
  function getDateTimeRange(timeSelector, startDate, endDate) {
    startDate = startDate || new Date();
    endDate = endDate || new Date();

    var selectedTimes = timeSelector.getSelected();
    var startTime = _.first(selectedTimes);
    var endTime = _.last(selectedTimes);
    var startHours = Math.floor(startTime / 100);
    var endHours = Math.floor(endTime / 100);
    startDate.setHours(startHours);
    startDate.setMinutes(startTime - startHours * 100);
    startDate.setSeconds(0, 0);
    endDate.setHours(endHours);
    endDate.setMinutes(endTime - endHours * 100 + 30);
    endDate.setSeconds(0, 0);
    return [startDate, endDate];
  }

});