mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-09-06 21:24:23 +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;
|
||||
}
|
||||
},
|
||||
{
|
||||
}, {
|
||||
targets: 'row-stock',
|
||||
className: 'item-stock',
|
||||
sWidth: '1%',
|
||||
|
@ -541,7 +540,9 @@ var RepositoryDatatable = (function(global) {
|
|||
// Show number of selected rows near pages info
|
||||
$('#repository-table_info').append('<span id="selected_info"></span>');
|
||||
$('#selected_info').html(' (' + rowsSelected.length + ' entries selected)');
|
||||
checkArchivedColumnsState();
|
||||
if ($('.repository-show').hasClass('archived')) {
|
||||
TABLE.columns([6, 7]).visible(true);
|
||||
}
|
||||
},
|
||||
preDrawCallback: function() {
|
||||
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() {
|
||||
let dropdown = $('#repositoryFilterTemplate').html();
|
||||
$('.toolbar-filters').html(dropdown);
|
||||
|
|
|
@ -19,15 +19,15 @@ module InputSanitizeHelper
|
|||
end
|
||||
|
||||
def custom_auto_link(text, options = {})
|
||||
simple_f = options.fetch(:simple_format) { true }
|
||||
team = options.fetch(:team) { nil }
|
||||
simple_f = options.fetch(:simple_format, true)
|
||||
team = options.fetch(:team, nil)
|
||||
wrapper_tag = options.fetch(:wrapper_tag) { {} }
|
||||
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)
|
||||
base64_encoded_imgs = options.fetch(:base64_encoded_imgs) { false }
|
||||
base64_encoded_imgs = options.fetch(:base64_encoded_imgs, false)
|
||||
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(
|
||||
custom_link_open_new_tab(smart_annotation_parser(text, team, base64_encoded_imgs, preview_repository)),
|
||||
link: :urls,
|
||||
|
|
|
@ -4,17 +4,18 @@ module RepositoryDatatableHelper
|
|||
include InputSanitizeHelper
|
||||
|
||||
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?
|
||||
reminders_enabled = Repository.reminders_enabled?
|
||||
reminder_row_ids = reminders_enabled ? repository_reminder_row_ids(repository_rows, repository) : []
|
||||
|
||||
repository_rows.map do |record|
|
||||
default_cells = public_send("#{repository.class.name.underscore}_default_columns", record)
|
||||
row = {
|
||||
'DT_RowId': record.id,
|
||||
'DT_RowAttr': { 'data-state': row_style(record) },
|
||||
'recordInfoUrl': Rails.application.routes.url_helpers.repository_repository_row_path(repository, record),
|
||||
'hasActiveReminders': reminder_row_ids.include?(record.id),
|
||||
'rowRemindersUrl':
|
||||
DT_RowId: record.id,
|
||||
DT_RowAttr: { 'data-state': row_style(record) },
|
||||
recordInfoUrl: Rails.application.routes.url_helpers.repository_repository_row_path(repository, record),
|
||||
hasActiveReminders: reminder_row_ids.include?(record.id),
|
||||
rowRemindersUrl:
|
||||
Rails.application.routes.url_helpers
|
||||
.active_reminder_repository_cells_repository_repository_row_url(
|
||||
repository,
|
||||
|
@ -51,7 +52,7 @@ module RepositoryDatatableHelper
|
|||
|
||||
custom_cells.each do |cell|
|
||||
row[columns_mappings[cell.repository_column.id]] =
|
||||
display_cell_value(cell, team, repository)
|
||||
display_cell_value(cell, team, repository, reminders_enabled: reminders_enabled)
|
||||
end
|
||||
|
||||
stock_cell = record.repository_cells.find { |cell| cell.value_type == 'RepositoryStockValue' }
|
||||
|
@ -67,7 +68,7 @@ module RepositoryDatatableHelper
|
|||
|
||||
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])
|
||||
consumed_stock_formatted =
|
||||
number_with_precision(
|
||||
|
@ -97,7 +98,9 @@ module RepositoryDatatableHelper
|
|||
end
|
||||
|
||||
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|
|
||||
row = {
|
||||
|
@ -105,8 +108,8 @@ module RepositoryDatatableHelper
|
|||
DT_RowAttr: { 'data-state': row_style(record) },
|
||||
'0': escape_input(record.name),
|
||||
recordInfoUrl: Rails.application.routes.url_helpers.repository_repository_row_path(record.repository, record),
|
||||
'hasActiveReminders': reminder_row_ids.include?(record.id),
|
||||
'rowRemindersUrl':
|
||||
hasActiveReminders: reminder_row_ids.include?(record.id),
|
||||
rowRemindersUrl:
|
||||
Rails.application.routes.url_helpers
|
||||
.active_reminder_repository_cells_repository_repository_row_url(
|
||||
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?
|
||||
# Always disabled in a simple view
|
||||
stock_managable = false
|
||||
|
@ -164,6 +167,7 @@ module RepositoryDatatableHelper
|
|||
end
|
||||
|
||||
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|
|
||||
row = {
|
||||
'DT_RowId': record.id,
|
||||
|
@ -180,7 +184,7 @@ module RepositoryDatatableHelper
|
|||
row[columns_mappings[cell.repository_column.id]] = display_cell_value(cell, team, repository_snapshot)
|
||||
end
|
||||
|
||||
if options[:include_stock_consumption] && repository_snapshot.has_stock_management?
|
||||
if has_stock_management
|
||||
row['stock'] = if record.repository_stock_cell.present?
|
||||
display_cell_value(record.repository_stock_cell, team, repository_snapshot)
|
||||
else
|
||||
|
@ -251,7 +255,7 @@ module RepositoryDatatableHelper
|
|||
}
|
||||
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.new(
|
||||
cell.value,
|
||||
|
@ -259,7 +263,8 @@ module RepositoryDatatableHelper
|
|||
team: team,
|
||||
user: current_user,
|
||||
column: cell.repository_column,
|
||||
repository: repository
|
||||
repository: repository,
|
||||
options: options
|
||||
}
|
||||
).serializable_hash
|
||||
end
|
||||
|
@ -271,9 +276,6 @@ module RepositoryDatatableHelper
|
|||
end
|
||||
|
||||
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
|
||||
return [] if repository_rows.blank? || repository.archived?
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ module RepositoryDatatable
|
|||
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']
|
||||
if !scope[:repository].is_a?(RepositorySnapshot) && reminder_delta
|
||||
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')
|
||||
}
|
||||
|
||||
if RepositoryBase.reminders_enabled?
|
||||
if scope.dig(:options, :reminders_enabled)
|
||||
reminder_delta = scope[:column].metadata['reminder_delta']
|
||||
if !scope[:repository].is_a?(RepositorySnapshot) && reminder_delta
|
||||
data[:reminder] = DateTime.now + reminder_delta.to_i.seconds >= object.data
|
||||
|
|
|
@ -10,7 +10,7 @@ module RepositoryDatatable
|
|||
@user = scope[:user]
|
||||
{
|
||||
view: custom_auto_link(object.data, simple_format: true, team: scope[:team]),
|
||||
edit: sanitize_input(object.data)
|
||||
edit: object.data
|
||||
}
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
json.draw @draw
|
||||
json.data do
|
||||
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
|
||||
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,
|
||||
@columns_mappings,
|
||||
@repository_snapshot.team,
|
||||
@repository_snapshot,
|
||||
{ include_stock_consumption: @repository_snapshot.has_stock_management? })
|
||||
@repository_snapshot)
|
||||
end
|
||||
json.recordsFiltered @repository_rows.first ? @repository_rows.first.filtered_count : 0
|
||||
json.recordsTotal @all_rows_count
|
||||
|
|
|
@ -45,7 +45,7 @@
|
|||
<% end %>
|
||||
</div>
|
||||
<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 %>
|
||||
<%= text_area_tag 'message', comment.message, disabled: true, class: 'smart-text-area hidden' %>
|
||||
<% end %>
|
||||
|
|
Loading…
Add table
Reference in a new issue