mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-09-06 05:04:35 +08:00
Add view renders for DateTime column types
This commit is contained in:
parent
cac4c11071
commit
5f2407e3fb
11 changed files with 153 additions and 11 deletions
|
@ -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;
|
||||
};
|
||||
|
|
|
@ -33,6 +33,7 @@ class RepositoryRowsController < ApplicationController
|
|||
:created_by,
|
||||
repository_cells: :value
|
||||
)
|
||||
@current_user = current_user
|
||||
end
|
||||
|
||||
def create
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -6,5 +6,6 @@ json.data do
|
|||
@repository,
|
||||
@columns_mappings,
|
||||
@repository.team,
|
||||
@assigned_rows)
|
||||
@assigned_rows,
|
||||
@current_user)
|
||||
end
|
||||
|
|
Loading…
Add table
Reference in a new issue