Add view renders for DateTime column types

This commit is contained in:
Urban Rotnik 2019-11-27 13:06:46 +01:00
parent cac4c11071
commit 5f2407e3fb
11 changed files with 153 additions and 11 deletions

View file

@ -44,3 +44,51 @@ $.fn.dataTable.render.RepositoryStatusValue = function(data) {
$.fn.dataTable.render.defaultRepositoryStatusValue = function() {
return '';
};
$.fn.dataTable.render.defaultRepositoryDateValue = function() {
return '';
};
$.fn.dataTable.render.RepositoryDateValue = function(data) {
return data.value;
};
$.fn.dataTable.render.defaultRepositoryDateTimeValue = function() {
return '';
};
$.fn.dataTable.render.RepositoryDateTimeValue = function(data) {
return data.value;
};
$.fn.dataTable.render.defaultRepositoryTimeValue = function() {
return '';
};
$.fn.dataTable.render.RepositoryTimeValue = function(data) {
return data.value;
};
$.fn.dataTable.render.defaultRepositoryTimeRangeValue = function() {
return '';
};
$.fn.dataTable.render.RepositoryTimeRangeValue = function(data) {
return data.value;
};
$.fn.dataTable.render.defaultRepositoryDateTimeRangeValue = function() {
return '';
};
$.fn.dataTable.render.RepositoryDateTimeRangeValue = function(data) {
return data.value;
};
$.fn.dataTable.render.defaultRepositoryDateRangeValue = function() {
return '';
};
$.fn.dataTable.render.RepositoryDateRangeValue = function(data) {
return data.value;
};

View file

@ -33,6 +33,7 @@ class RepositoryRowsController < ApplicationController
:created_by,
repository_cells: :value
)
@current_user = current_user
end
def create

View file

@ -7,7 +7,8 @@ module RepositoryDatatableHelper
repository,
columns_mappings,
_team,
assigned_rows)
assigned_rows,
current_user)
parsed_records = []
includes_json = { repository_cells: Extends::REPOSITORY_SEARCH_INCLUDES }
@ -36,7 +37,7 @@ module RepositoryDatatableHelper
# Add custom columns
record.repository_cells.each do |cell|
row[columns_mappings[cell.repository_column.id]] =
display_cell_value(cell)
display_cell_value(cell, current_user)
end
parsed_records << row
end
@ -66,7 +67,8 @@ module RepositoryDatatableHelper
Constants::REPOSITORY_TABLE_DEFAULT_STATE['columns'].to_json
end
def display_cell_value(cell)
"RepositoryDatatable::#{cell.value_type}Serializer".constantize.new(cell).serializable_hash
def display_cell_value(cell, user)
"RepositoryDatatable::#{cell.repository_column.data_type}Serializer"
.constantize.new(cell, user: user).serializable_hash
end
end

View file

@ -1,6 +1,6 @@
# frozen_string_literal: true
class RepositoryCell < ActiveRecord::Base
class RepositoryCell < ApplicationRecord
attr_accessor :importing
belongs_to :repository_row
@ -54,10 +54,10 @@ class RepositoryCell < ActiveRecord::Base
end),
optional: true, foreign_key: :value_id, inverse_of: :repository_cell
validates_inclusion_of :repository_column,
in: (lambda do |cell|
cell.repository_row&.repository&.repository_columns || []
end)
validates :repository_column,
inclusion: { in: (lambda do |cell|
cell.repository_row&.repository&.repository_columns || []
end) }
validates :repository_column, presence: true
validate :repository_column_data_type
validates :repository_row,
@ -80,8 +80,20 @@ class RepositoryCell < ActiveRecord::Base
private
def repository_column_data_type
if !repository_column || value_type != repository_column.data_type
if !repository_column || value_type != repository_column.data_type && !date_time_compatibility_checks
errors.add(:value_type, 'must match column data type')
end
end
def date_time_compatibility_checks
case value_type
when 'RepositoryDateTimeValue'
%w(RepositoryTimeValue RepositoryDateTimeValue RepositoryDateValue).include?(repository_column.data_type)
when 'RepositoryDateTimeRangeValue'
%w(RepositoryTimeRangeValue RepositoryDateTimeRangeValue RepositoryDateRangeValue)
.include?(repository_column.data_type)
else
false
end
end
end

View file

@ -0,0 +1,13 @@
# frozen_string_literal: true
module RepositoryDatatable
class RepositoryDateRangeValueSerializer < ActiveModel::Serializer
attributes :value, :value_type
def value
date_time_format = @instance_options[:user].settings[:date_format]
cell = object.repository_date_time_range_value
cell.start_time.strftime(date_time_format) + ' - ' + cell.end_time.strftime(date_time_format)
end
end
end

View file

@ -0,0 +1,13 @@
# frozen_string_literal: true
module RepositoryDatatable
class RepositoryDateTimeRangeValueSerializer < ActiveModel::Serializer
attributes :value, :value_type
def value
date_time_format = @instance_options[:user].settings[:date_format] + ', %H:%M'
cell = object.repository_date_time_range_value
cell.start_time.strftime(date_time_format) + ' - ' + cell.end_time.strftime(date_time_format)
end
end
end

View file

@ -0,0 +1,13 @@
# frozen_string_literal: true
module RepositoryDatatable
class RepositoryDateTimeValueSerializer < ActiveModel::Serializer
attributes :value, :value_type
def value
date_time_format = @instance_options[:user].settings[:date_format] + ', %H:%M'
cell = object.repository_date_time_value
cell.data.strftime(date_time_format)
end
end
end

View file

@ -0,0 +1,13 @@
# frozen_string_literal: true
module RepositoryDatatable
class RepositoryDateValueSerializer < ActiveModel::Serializer
attributes :value, :value_type
def value
date_time_format = @instance_options[:user].settings[:date_format]
cell = object.repository_date_time_value
cell.data.strftime(date_time_format)
end
end
end

View file

@ -0,0 +1,13 @@
# frozen_string_literal: true
module RepositoryDatatable
class RepositoryTimeRangeValueSerializer < ActiveModel::Serializer
attributes :value, :value_type
def value
date_time_format = '%H:%M'
cell = object.repository_date_time_range_value
cell.start_time.strftime(date_time_format) + ' - ' + cell.end_time.strftime(date_time_format)
end
end
end

View file

@ -0,0 +1,13 @@
# frozen_string_literal: true
module RepositoryDatatable
class RepositoryTimeValueSerializer < ActiveModel::Serializer
attributes :value, :value_type
def value
date_time_format = '%H:%M'
cell = object.repository_date_time_value
cell.data.strftime(date_time_format)
end
end
end

View file

@ -6,5 +6,6 @@ json.data do
@repository,
@columns_mappings,
@repository.team,
@assigned_rows)
@assigned_rows,
@current_user)
end