Add TimeRange and DateRange renderer

This commit is contained in:
Urban Rotnik 2019-12-17 13:42:25 +01:00
parent 5d4453470a
commit dfe3c5292e
8 changed files with 137 additions and 33 deletions

View file

@ -2,7 +2,6 @@
/* eslint-disable no-unused-vars */ /* eslint-disable no-unused-vars */
var DateTimeHelper = (function() { var DateTimeHelper = (function() {
function isValidTimeStr(timeStr) { function isValidTimeStr(timeStr) {
return /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/.test(timeStr); return /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/.test(timeStr);
} }
@ -53,8 +52,8 @@ var DateTimeHelper = (function() {
} }
function replaceForRangeHiddenField($container) { function replaceForRangeHiddenField($container) {
let startTimeContainer = $container.find('.start-time') let startTimeContainer = $container.find('.start-time');
let endTimeContainer = $container.find('.end-time') let endTimeContainer = $container.find('.end-time');
let startTime = startTimeContainer.find('input[type=hidden]').val(); let startTime = startTimeContainer.find('input[type=hidden]').val();
let endTime = endTimeContainer.find('input[type=hidden]').val(); let endTime = endTimeContainer.find('input[type=hidden]').val();
let formId = startTimeContainer.find('input[type!=hidden]').data('form-id'); let formId = startTimeContainer.find('input[type!=hidden]').data('form-id');
@ -73,9 +72,9 @@ var DateTimeHelper = (function() {
} }
hiddenField = ` hiddenField = `
<input type="hidden" <input type="hidden"
form="${formId}" form="${formId}"
name="repository_cells[${columnId}]" name="repository_cells[${columnId}]"
value='${value}' />`; value='${value}' />`;
$container.find('.cell-range-container').html(hiddenField); $container.find('.cell-range-container').html(hiddenField);
@ -84,7 +83,7 @@ var DateTimeHelper = (function() {
} }
function insertHiddenField($input) { function insertHiddenField($input) {
let fieldType = $input.data('datetime-part') let fieldType = $input.data('datetime-part');
let $container = $input.parent().find('.cell-timestamp-container'); let $container = $input.parent().find('.cell-timestamp-container');
let dateStr = $container.data('current-date'); let dateStr = $container.data('current-date');
let columnType = $container.data('datetime-type'); let columnType = $container.data('datetime-type');
@ -144,7 +143,7 @@ var DateTimeHelper = (function() {
}); });
$cell.find('.calendar-input').on('dp.change', function(e) { $cell.find('.calendar-input').on('dp.change', function(e) {
let $input = $(this) let $input = $(this);
let date = e.date._d; let date = e.date._d;
let $container = $input.parent().find('.cell-timestamp-container'); let $container = $input.parent().find('.cell-timestamp-container');
@ -287,10 +286,70 @@ var DateTimeHelper = (function() {
initChangeEvents($cell); initChangeEvents($cell);
} }
function initDateRangeEditMode(formId, columnId, $cell, startDate, startDatetime, endDate, endDatetime) {
let inputFields = `
<div class="form-group">
<div class="cell-range-container"></div>
<div class="start-time range-type">
<div class="cell-timestamp-container" data-current-date="${startDatetime}" data-datetime-type="date"></div>
${dateInputField(formId, columnId, startDate)}
</div>
<div class="end-time range-type">
<div class="cell-timestamp-container" data-current-date="${endDatetime}" data-datetime-type="date"></div>
${dateInputField(formId, columnId, endDate)}
</div>
</div>
`;
$cell.html(inputFields);
let $cal1 = $cell.find('.calendar-input').first().datetimepicker({ ignoreReadonly: true, locale: 'en', format: formatJS });
let $cal2 = $cell.find('.calendar-input').last().datetimepicker({ ignoreReadonly: true, locale: 'en', format: formatJS });
$cal1.on('dp.change', function(e) {
$cal2.data('DateTimePicker').minDate(e.date);
});
$cal2.on('dp.change', function(e) {
$cal1.data('DateTimePicker').maxDate(e.date);
});
initChangeEvents($cell);
}
function initTimeRangeEditMode(formId, columnId, $cell, startTime, startDatetime, endTime, endDatetime) {
let inputFields = `
<div class="form-group">
<div class="cell-range-container"></div>
<div class="start-time range-type">
<div class="cell-timestamp-container" data-current-date="${startDatetime}" data-datetime-type="time"></div>
${timeInputField(formId, columnId, startTime)}
</div>
<div class="end-time range-type">
<div class="cell-timestamp-container" data-current-date="${endDatetime}" data-datetime-type="time"></div>
${timeInputField(formId, columnId, endTime)}
</div>
</div>
`;
$cell.html(inputFields);
Inputmask('datetime', {
inputFormat: 'HH:MM',
placeholder: 'HH:mm',
clearIncomplete: true,
showMaskOnHover: true,
hourFormat: 24
}).mask($cell.find('input[data-mask-type="time"]'));
initChangeEvents($cell);
}
return { return {
initDateEditMode: initDateEditMode, initDateEditMode: initDateEditMode,
initTimeEditMode: initTimeEditMode, initTimeEditMode: initTimeEditMode,
initDateTimeEditMode: initDateTimeEditMode, initDateTimeEditMode: initDateTimeEditMode,
initDateTimeRangeEditMode: initDateTimeRangeEditMode initDateTimeRangeEditMode: initDateTimeRangeEditMode,
initDateRangeEditMode: initDateRangeEditMode,
initTimeRangeEditMode: initTimeRangeEditMode
}; };
}()); }());

View file

@ -131,11 +131,27 @@ $.fn.dataTable.render.editRepositoryDateTimeRangeValue = function(formId, column
}; };
$.fn.dataTable.render.editRepositoryDateRangeValue = function(formId, columnId, cell) { $.fn.dataTable.render.editRepositoryDateRangeValue = function(formId, columnId, cell) {
return ''; let $cell = $(cell.node());
let $startSpan = $cell.find('span').first();
let startDate = $startSpan.data('date');
let startDatetime = $startSpan.data('datetime');
let $endSpan = $cell.find('span').last();
let endDate = $endSpan.data('date');
let endDatetime = $endSpan.data('datetime');
DateTimeHelper.initDateRangeEditMode(formId, columnId, $cell, startDate, startDatetime, endDate, endDatetime);
}; };
$.fn.dataTable.render.editRepositoryTimeRangeValue = function(formId, columnId, cell) { $.fn.dataTable.render.editRepositoryTimeRangeValue = function(formId, columnId, cell) {
return ''; let $cell = $(cell.node());
let $startSpan = $cell.find('span').first();
let startTime = $startSpan.data('time');
let startDatetime = $startSpan.data('datetime');
let $endSpan = $cell.find('span').last();
let endTime = $endSpan.data('time');
let endDatetime = $endSpan.data('datetime');
DateTimeHelper.initTimeRangeEditMode(formId, columnId, $cell, startTime, startDatetime, endTime, endDatetime);
}; };
$.fn.dataTable.render.editRepositoryChecklistValue = function(formId, columnId, cell) { $.fn.dataTable.render.editRepositoryChecklistValue = function(formId, columnId, cell) {

View file

@ -99,19 +99,17 @@ $.fn.dataTable.render.newRepositoryDateValue = function(formId, columnId, $cell)
}; };
$.fn.dataTable.render.newRepositoryDateTimeRangeValue = function(formId, columnId, $cell) { $.fn.dataTable.render.newRepositoryDateTimeRangeValue = function(formId, columnId, $cell) {
// let $cell = $(cell.node());
// let $startSpan = $cell.find('span').first();
// let startDate = $startSpan.data('date');
// let startTime = $startSpan.data('time');
// let startDatetime = $startSpan.data('datetime');
// let $endSpan = $cell.find('span').last();
// let endDate = $endSpan.data('date');
// let endTime = $endSpan.data('time');
// let endDatetime = $endSpan.data('datetime');
DateTimeHelper.initDateTimeRangeEditMode(formId, columnId, $cell, '', '', '', '', '', ''); DateTimeHelper.initDateTimeRangeEditMode(formId, columnId, $cell, '', '', '', '', '', '');
}; };
$.fn.dataTable.render.newRepositoryDateRangeValue = function(formId, columnId, $cell) {
DateTimeHelper.initDateRangeEditMode(formId, columnId, $cell, '', '', '', '');
};
$.fn.dataTable.render.newRepositoryTimeRangeValue = function(formId, columnId, $cell) {
DateTimeHelper.initTimeRangeEditMode(formId, columnId, $cell, '', '', '', '');
};
$.fn.dataTable.render.newRepositoryCheckboxValue = function(formId, columnId) { $.fn.dataTable.render.newRepositoryCheckboxValue = function(formId, columnId) {
return ''; return '';
}; };

View file

@ -82,7 +82,10 @@ $.fn.dataTable.render.defaultRepositoryTimeRangeValue = function() {
}; };
$.fn.dataTable.render.RepositoryTimeRangeValue = function(data) { $.fn.dataTable.render.RepositoryTimeRangeValue = function(data) {
return `<span data-datetime="${data.value.datetime}">${data.value.formatted}</span>`; return `<span data-time="${data.value.start_time.formatted}"
data-datetime="${data.value.start_time.datetime}">${data.value.start_time.formatted}</span> -
<span data-time="${data.value.end_time.formatted}"
data-datetime="${data.value.end_time.datetime}">${data.value.end_time.formatted}</span>`;
}; };
$.fn.dataTable.render.defaultRepositoryDateTimeRangeValue = function() { $.fn.dataTable.render.defaultRepositoryDateTimeRangeValue = function() {
@ -103,7 +106,10 @@ $.fn.dataTable.render.defaultRepositoryDateRangeValue = function() {
}; };
$.fn.dataTable.render.RepositoryDateRangeValue = function(data) { $.fn.dataTable.render.RepositoryDateRangeValue = function(data) {
return data.value; return `<span data-datetime="${data.value.start_time.datetime}"
data-date="${data.value.start_time.formatted}">${data.value.start_time.formatted}</span> -
<span data-datetime="${data.value.end_time.datetime}"
data-date="${data.value.end_time.formatted}">${data.value.end_time.formatted}</span>`;
}; };
$.fn.dataTable.render.RepositoryChecklistValue = function(data) { $.fn.dataTable.render.RepositoryChecklistValue = function(data) {

View file

@ -2,8 +2,9 @@
class RepositoryDateRangeValue < RepositoryDateTimeRangeValueBase class RepositoryDateRangeValue < RepositoryDateTimeRangeValueBase
def data_changed?(new_data) def data_changed?(new_data)
st = Time.zone.parse(new_data[:start_time]) data = JSON.parse(new_data).symbolize_keys
et = Time.zone.parse(new_data[:end_time]) st = Time.zone.parse(data[:start_time])
et = Time.zone.parse(data[:end_time])
st.to_date != start_time.to_date || et.to_date != end_time.to_date st.to_date != start_time.to_date || et.to_date != end_time.to_date
end end
@ -12,9 +13,11 @@ class RepositoryDateRangeValue < RepositoryDateTimeRangeValueBase
end end
def self.new_with_payload(payload, attributes) def self.new_with_payload(payload, attributes)
data = JSON.parse(payload).symbolize_keys
value = new(attributes) value = new(attributes)
value.start_time = Time.zone.parse(payload[:start_time]) value.start_time = Time.zone.parse(data[:start_time])
value.end_time = Time.zone.parse(payload[:end_time]) value.end_time = Time.zone.parse(data[:end_time])
value value
end end
end end

View file

@ -2,8 +2,10 @@
class RepositoryTimeRangeValue < RepositoryDateTimeRangeValueBase class RepositoryTimeRangeValue < RepositoryDateTimeRangeValueBase
def data_changed?(new_data) def data_changed?(new_data)
st = Time.zone.parse(new_data[:start_time]) data = JSON.parse(new_data).symbolize_keys
et = Time.zone.parse(new_data[:end_time])
st = Time.zone.parse(data[:start_time])
et = Time.zone.parse(data[:end_time])
st.hour != start_time.hour || et.hour != end_time.hour || st.min != start_time.min || et.min != end_time.min st.hour != start_time.hour || et.hour != end_time.hour || st.min != start_time.min || et.min != end_time.min
end end
@ -12,9 +14,11 @@ class RepositoryTimeRangeValue < RepositoryDateTimeRangeValueBase
end end
def self.new_with_payload(payload, attributes) def self.new_with_payload(payload, attributes)
data = JSON.parse(payload).symbolize_keys
value = new(attributes) value = new(attributes)
value.start_time = Time.zone.parse(payload[:start_time]) value.start_time = Time.zone.parse(data[:start_time])
value.end_time = Time.zone.parse(payload[:end_time]) value.end_time = Time.zone.parse(data[:end_time])
value value
end end
end end

View file

@ -3,7 +3,16 @@
module RepositoryDatatable module RepositoryDatatable
class RepositoryDateRangeValueSerializer < RepositoryBaseValueSerializer class RepositoryDateRangeValueSerializer < RepositoryBaseValueSerializer
def value def value
I18n.l(object.start_time, format: :full_date) + ' - ' + I18n.l(object.end_time, format: :full_date) {
start_time: {
formatted: I18n.l(object.start_time, format: :full_date),
datetime: object.start_time.strftime('%Y/%m/%d %H:%M')
},
end_time: {
formatted: I18n.l(object.end_time, format: :full_date),
datetime: object.end_time.strftime('%Y/%m/%d %H:%M')
}
}
end end
end end
end end

View file

@ -3,7 +3,16 @@
module RepositoryDatatable module RepositoryDatatable
class RepositoryTimeRangeValueSerializer < RepositoryBaseValueSerializer class RepositoryTimeRangeValueSerializer < RepositoryBaseValueSerializer
def value def value
I18n.l(object.start_time, format: :time) + ' - ' + I18n.l(object.end_time, format: :time) {
start_time: {
formatted: I18n.l(object.start_time, format: :time),
datetime: object.start_time.strftime('%Y/%m/%d %H:%M')
},
end_time: {
formatted: I18n.l(object.end_time, format: :time),
datetime: object.end_time.strftime('%Y/%m/%d %H:%M')
}
}
end end
end end
end end