mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-09-08 14:15:35 +08:00
Improve repository table loading speed [SCI-7002]
This commit is contained in:
parent
b9d953b3a4
commit
382d54320e
9 changed files with 35 additions and 42 deletions
|
@ -487,8 +487,7 @@ var RepositoryDatatable = (function(global) {
|
||||||
}
|
}
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
},
|
}, {
|
||||||
{
|
|
||||||
targets: 'row-stock',
|
targets: 'row-stock',
|
||||||
className: 'item-stock',
|
className: 'item-stock',
|
||||||
sWidth: '1%',
|
sWidth: '1%',
|
||||||
|
@ -541,7 +540,9 @@ var RepositoryDatatable = (function(global) {
|
||||||
// Show number of selected rows near pages info
|
// Show number of selected rows near pages info
|
||||||
$('#repository-table_info').append('<span id="selected_info"></span>');
|
$('#repository-table_info').append('<span id="selected_info"></span>');
|
||||||
$('#selected_info').html(' (' + rowsSelected.length + ' entries selected)');
|
$('#selected_info').html(' (' + rowsSelected.length + ' entries selected)');
|
||||||
checkArchivedColumnsState();
|
if ($('.repository-show').hasClass('archived')) {
|
||||||
|
TABLE.columns([6, 7]).visible(true);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
preDrawCallback: function() {
|
preDrawCallback: function() {
|
||||||
var archived = $('.repository-show').hasClass('archived');
|
var archived = $('.repository-show').hasClass('archived');
|
||||||
|
@ -870,15 +871,6 @@ var RepositoryDatatable = (function(global) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function checkArchivedColumnsState() {
|
|
||||||
var archived = $('.repository-show').hasClass('archived');
|
|
||||||
$.each(TABLE.context[0].aoColumns, function(i, column) {
|
|
||||||
if (['archived-on', 'archived-by'].includes(column.nTh.id)) {
|
|
||||||
TABLE.column(column.idx).visible(archived);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function renderFiltersDropdown() {
|
function renderFiltersDropdown() {
|
||||||
let dropdown = $('#repositoryFilterTemplate').html();
|
let dropdown = $('#repositoryFilterTemplate').html();
|
||||||
$('.toolbar-filters').html(dropdown);
|
$('.toolbar-filters').html(dropdown);
|
||||||
|
|
|
@ -19,15 +19,15 @@ module InputSanitizeHelper
|
||||||
end
|
end
|
||||||
|
|
||||||
def custom_auto_link(text, options = {})
|
def custom_auto_link(text, options = {})
|
||||||
simple_f = options.fetch(:simple_format) { true }
|
simple_f = options.fetch(:simple_format, true)
|
||||||
team = options.fetch(:team) { nil }
|
team = options.fetch(:team, nil)
|
||||||
wrapper_tag = options.fetch(:wrapper_tag) { {} }
|
wrapper_tag = options.fetch(:wrapper_tag) { {} }
|
||||||
tags = options.fetch(:tags) { [] }
|
tags = options.fetch(:tags) { [] }
|
||||||
preview_repository = options.fetch(:preview_repository) { false }
|
preview_repository = options.fetch(:preview_repository, false)
|
||||||
format_opt = wrapper_tag.merge(sanitize: false)
|
format_opt = wrapper_tag.merge(sanitize: false)
|
||||||
base64_encoded_imgs = options.fetch(:base64_encoded_imgs) { false }
|
base64_encoded_imgs = options.fetch(:base64_encoded_imgs, false)
|
||||||
text = sanitize_input(text, tags)
|
text = sanitize_input(text, tags)
|
||||||
text = simple_format(sanitize_input(text), {}, format_opt) if simple_f
|
text = simple_format(text, {}, format_opt) if simple_f
|
||||||
auto_link(
|
auto_link(
|
||||||
custom_link_open_new_tab(smart_annotation_parser(text, team, base64_encoded_imgs, preview_repository)),
|
custom_link_open_new_tab(smart_annotation_parser(text, team, base64_encoded_imgs, preview_repository)),
|
||||||
link: :urls,
|
link: :urls,
|
||||||
|
|
|
@ -4,17 +4,18 @@ module RepositoryDatatableHelper
|
||||||
include InputSanitizeHelper
|
include InputSanitizeHelper
|
||||||
|
|
||||||
def prepare_row_columns(repository_rows, repository, columns_mappings, team, options = {})
|
def prepare_row_columns(repository_rows, repository, columns_mappings, team, options = {})
|
||||||
reminder_row_ids = repository_reminder_row_ids(repository_rows, repository)
|
|
||||||
has_stock_management = repository.has_stock_management?
|
has_stock_management = repository.has_stock_management?
|
||||||
|
reminders_enabled = Repository.reminders_enabled?
|
||||||
|
reminder_row_ids = reminders_enabled ? repository_reminder_row_ids(repository_rows, repository) : []
|
||||||
|
|
||||||
repository_rows.map do |record|
|
repository_rows.map do |record|
|
||||||
default_cells = public_send("#{repository.class.name.underscore}_default_columns", record)
|
default_cells = public_send("#{repository.class.name.underscore}_default_columns", record)
|
||||||
row = {
|
row = {
|
||||||
'DT_RowId': record.id,
|
DT_RowId: record.id,
|
||||||
'DT_RowAttr': { 'data-state': row_style(record) },
|
DT_RowAttr: { 'data-state': row_style(record) },
|
||||||
'recordInfoUrl': Rails.application.routes.url_helpers.repository_repository_row_path(repository, record),
|
recordInfoUrl: Rails.application.routes.url_helpers.repository_repository_row_path(repository, record),
|
||||||
'hasActiveReminders': reminder_row_ids.include?(record.id),
|
hasActiveReminders: reminder_row_ids.include?(record.id),
|
||||||
'rowRemindersUrl':
|
rowRemindersUrl:
|
||||||
Rails.application.routes.url_helpers
|
Rails.application.routes.url_helpers
|
||||||
.active_reminder_repository_cells_repository_repository_row_url(
|
.active_reminder_repository_cells_repository_repository_row_url(
|
||||||
repository,
|
repository,
|
||||||
|
@ -51,7 +52,7 @@ module RepositoryDatatableHelper
|
||||||
|
|
||||||
custom_cells.each do |cell|
|
custom_cells.each do |cell|
|
||||||
row[columns_mappings[cell.repository_column.id]] =
|
row[columns_mappings[cell.repository_column.id]] =
|
||||||
display_cell_value(cell, team, repository)
|
display_cell_value(cell, team, repository, reminders_enabled: reminders_enabled)
|
||||||
end
|
end
|
||||||
|
|
||||||
stock_cell = record.repository_cells.find { |cell| cell.value_type == 'RepositoryStockValue' }
|
stock_cell = record.repository_cells.find { |cell| cell.value_type == 'RepositoryStockValue' }
|
||||||
|
@ -67,7 +68,7 @@ module RepositoryDatatableHelper
|
||||||
|
|
||||||
row['stock']['value_type'] = 'RepositoryStockValue'
|
row['stock']['value_type'] = 'RepositoryStockValue'
|
||||||
|
|
||||||
if options[:include_stock_consumption] && record.repository.has_stock_management? && options[:my_module]
|
if options[:include_stock_consumption] && has_stock_management && options[:my_module]
|
||||||
consumption_managable = stock_consumption_managable?(record, repository, options[:my_module])
|
consumption_managable = stock_consumption_managable?(record, repository, options[:my_module])
|
||||||
consumed_stock_formatted =
|
consumed_stock_formatted =
|
||||||
number_with_precision(
|
number_with_precision(
|
||||||
|
@ -97,7 +98,9 @@ module RepositoryDatatableHelper
|
||||||
end
|
end
|
||||||
|
|
||||||
def prepare_simple_view_row_columns(repository_rows, repository, my_module, options = {})
|
def prepare_simple_view_row_columns(repository_rows, repository, my_module, options = {})
|
||||||
reminder_row_ids = repository_reminder_row_ids(repository_rows, repository)
|
has_stock_management = repository.has_stock_management?
|
||||||
|
reminders_enabled = Repository.reminders_enabled?
|
||||||
|
reminder_row_ids = reminders_enabled ? repository_reminder_row_ids(repository_rows, repository) : []
|
||||||
|
|
||||||
repository_rows.map do |record|
|
repository_rows.map do |record|
|
||||||
row = {
|
row = {
|
||||||
|
@ -105,8 +108,8 @@ module RepositoryDatatableHelper
|
||||||
DT_RowAttr: { 'data-state': row_style(record) },
|
DT_RowAttr: { 'data-state': row_style(record) },
|
||||||
'0': escape_input(record.name),
|
'0': escape_input(record.name),
|
||||||
recordInfoUrl: Rails.application.routes.url_helpers.repository_repository_row_path(record.repository, record),
|
recordInfoUrl: Rails.application.routes.url_helpers.repository_repository_row_path(record.repository, record),
|
||||||
'hasActiveReminders': reminder_row_ids.include?(record.id),
|
hasActiveReminders: reminder_row_ids.include?(record.id),
|
||||||
'rowRemindersUrl':
|
rowRemindersUrl:
|
||||||
Rails.application.routes.url_helpers
|
Rails.application.routes.url_helpers
|
||||||
.active_reminder_repository_cells_repository_repository_row_url(
|
.active_reminder_repository_cells_repository_repository_row_url(
|
||||||
record.repository,
|
record.repository,
|
||||||
|
@ -114,7 +117,7 @@ module RepositoryDatatableHelper
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
if options[:include_stock_consumption] && record.repository.has_stock_management?
|
if has_stock_management
|
||||||
stock_present = record.repository_stock_cell.present?
|
stock_present = record.repository_stock_cell.present?
|
||||||
# Always disabled in a simple view
|
# Always disabled in a simple view
|
||||||
stock_managable = false
|
stock_managable = false
|
||||||
|
@ -164,6 +167,7 @@ module RepositoryDatatableHelper
|
||||||
end
|
end
|
||||||
|
|
||||||
def prepare_snapshot_row_columns(repository_rows, columns_mappings, team, repository_snapshot, options = {})
|
def prepare_snapshot_row_columns(repository_rows, columns_mappings, team, repository_snapshot, options = {})
|
||||||
|
has_stock_management = repository_snapshot.has_stock_management?
|
||||||
repository_rows.map do |record|
|
repository_rows.map do |record|
|
||||||
row = {
|
row = {
|
||||||
'DT_RowId': record.id,
|
'DT_RowId': record.id,
|
||||||
|
@ -180,7 +184,7 @@ module RepositoryDatatableHelper
|
||||||
row[columns_mappings[cell.repository_column.id]] = display_cell_value(cell, team, repository_snapshot)
|
row[columns_mappings[cell.repository_column.id]] = display_cell_value(cell, team, repository_snapshot)
|
||||||
end
|
end
|
||||||
|
|
||||||
if options[:include_stock_consumption] && repository_snapshot.has_stock_management?
|
if has_stock_management
|
||||||
row['stock'] = if record.repository_stock_cell.present?
|
row['stock'] = if record.repository_stock_cell.present?
|
||||||
display_cell_value(record.repository_stock_cell, team, repository_snapshot)
|
display_cell_value(record.repository_stock_cell, team, repository_snapshot)
|
||||||
else
|
else
|
||||||
|
@ -251,7 +255,7 @@ module RepositoryDatatableHelper
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
def display_cell_value(cell, team, repository)
|
def display_cell_value(cell, team, repository, options = {})
|
||||||
serializer_class = "RepositoryDatatable::#{cell.repository_column.data_type}Serializer".constantize
|
serializer_class = "RepositoryDatatable::#{cell.repository_column.data_type}Serializer".constantize
|
||||||
serializer_class.new(
|
serializer_class.new(
|
||||||
cell.value,
|
cell.value,
|
||||||
|
@ -259,7 +263,8 @@ module RepositoryDatatableHelper
|
||||||
team: team,
|
team: team,
|
||||||
user: current_user,
|
user: current_user,
|
||||||
column: cell.repository_column,
|
column: cell.repository_column,
|
||||||
repository: repository
|
repository: repository,
|
||||||
|
options: options
|
||||||
}
|
}
|
||||||
).serializable_hash
|
).serializable_hash
|
||||||
end
|
end
|
||||||
|
@ -271,9 +276,6 @@ module RepositoryDatatableHelper
|
||||||
end
|
end
|
||||||
|
|
||||||
def repository_reminder_row_ids(repository_rows, repository)
|
def repository_reminder_row_ids(repository_rows, repository)
|
||||||
# don't load reminders if the stock management feature is disabled
|
|
||||||
return [] unless RepositoryBase.stock_management_enabled?
|
|
||||||
|
|
||||||
# don't load reminders for archived repositories
|
# don't load reminders for archived repositories
|
||||||
return [] if repository_rows.blank? || repository.archived?
|
return [] if repository_rows.blank? || repository.archived?
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ module RepositoryDatatable
|
||||||
datetime: object.data.strftime('%Y/%m/%d %H:%M')
|
datetime: object.data.strftime('%Y/%m/%d %H:%M')
|
||||||
}
|
}
|
||||||
|
|
||||||
if RepositoryBase.reminders_enabled?
|
if scope.dig(:options, :reminders_enabled)
|
||||||
reminder_delta = scope[:column].metadata['reminder_delta']
|
reminder_delta = scope[:column].metadata['reminder_delta']
|
||||||
if !scope[:repository].is_a?(RepositorySnapshot) && reminder_delta
|
if !scope[:repository].is_a?(RepositorySnapshot) && reminder_delta
|
||||||
data[:reminder] = reminder_delta.to_i + DateTime.now.to_i >= object.data.to_i
|
data[:reminder] = reminder_delta.to_i + DateTime.now.to_i >= object.data.to_i
|
||||||
|
|
|
@ -8,7 +8,7 @@ module RepositoryDatatable
|
||||||
datetime: object.data.strftime('%Y/%m/%d %H:%M')
|
datetime: object.data.strftime('%Y/%m/%d %H:%M')
|
||||||
}
|
}
|
||||||
|
|
||||||
if RepositoryBase.reminders_enabled?
|
if scope.dig(:options, :reminders_enabled)
|
||||||
reminder_delta = scope[:column].metadata['reminder_delta']
|
reminder_delta = scope[:column].metadata['reminder_delta']
|
||||||
if !scope[:repository].is_a?(RepositorySnapshot) && reminder_delta
|
if !scope[:repository].is_a?(RepositorySnapshot) && reminder_delta
|
||||||
data[:reminder] = DateTime.now + reminder_delta.to_i.seconds >= object.data
|
data[:reminder] = DateTime.now + reminder_delta.to_i.seconds >= object.data
|
||||||
|
|
|
@ -10,7 +10,7 @@ module RepositoryDatatable
|
||||||
@user = scope[:user]
|
@user = scope[:user]
|
||||||
{
|
{
|
||||||
view: custom_auto_link(object.data, simple_format: true, team: scope[:team]),
|
view: custom_auto_link(object.data, simple_format: true, team: scope[:team]),
|
||||||
edit: sanitize_input(object.data)
|
edit: object.data
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
json.draw @draw
|
json.draw @draw
|
||||||
json.data do
|
json.data do
|
||||||
json.array! prepare_simple_view_row_columns(
|
json.array! prepare_simple_view_row_columns(
|
||||||
@repository_rows, @repository, @my_module, { include_stock_consumption: @repository.has_stock_management? }
|
@repository_rows, @repository, @my_module
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
json.recordsFiltered @repository_rows.first ? @repository_rows.first.filtered_count : 0
|
json.recordsFiltered @repository_rows.first ? @repository_rows.first.filtered_count : 0
|
||||||
|
|
|
@ -5,8 +5,7 @@ json.data do
|
||||||
json.array! prepare_snapshot_row_columns(@repository_rows,
|
json.array! prepare_snapshot_row_columns(@repository_rows,
|
||||||
@columns_mappings,
|
@columns_mappings,
|
||||||
@repository_snapshot.team,
|
@repository_snapshot.team,
|
||||||
@repository_snapshot,
|
@repository_snapshot)
|
||||||
{ include_stock_consumption: @repository_snapshot.has_stock_management? })
|
|
||||||
end
|
end
|
||||||
json.recordsFiltered @repository_rows.first ? @repository_rows.first.filtered_count : 0
|
json.recordsFiltered @repository_rows.first ? @repository_rows.first.filtered_count : 0
|
||||||
json.recordsTotal @all_rows_count
|
json.recordsTotal @all_rows_count
|
||||||
|
|
|
@ -45,7 +45,7 @@
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
<div class="comment-message">
|
<div class="comment-message">
|
||||||
<div class="view-mode"><%= custom_auto_link(comment.message, team: current_team, simple_format: true).html_safe %></div>
|
<div class="view-mode"><%= custom_auto_link(comment.message, team: current_team, simple_format: true) %></div>
|
||||||
<% if edit_mode %>
|
<% if edit_mode %>
|
||||||
<%= text_area_tag 'message', comment.message, disabled: true, class: 'smart-text-area hidden' %>
|
<%= text_area_tag 'message', comment.message, disabled: true, class: 'smart-text-area hidden' %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
Loading…
Add table
Reference in a new issue