mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-09-11 23:54:43 +08:00
Fix filtering for repository snapshots [SCI-6423]
This commit is contained in:
parent
8fcf4e9aa2
commit
34554e57e3
4 changed files with 29 additions and 13 deletions
|
@ -267,7 +267,7 @@ class RepositoryDatatableService
|
||||||
operator: filter_element_params[:operator],
|
operator: filter_element_params[:operator],
|
||||||
parameters: filter_element_params[:parameters]
|
parameters: filter_element_params[:parameters]
|
||||||
)
|
)
|
||||||
config = Extends::REPOSITORY_EXTRA_SEARCH_ATTR[filter_element.repository_column.data_type.to_sym]
|
config = Extends::REPOSITORY_ADVANCED_SEARCH_ATTR[filter_element.repository_column.data_type.to_sym]
|
||||||
|
|
||||||
if %w(empty file_not_attached).include?(filter_element_params[:operator])
|
if %w(empty file_not_attached).include?(filter_element_params[:operator])
|
||||||
repository_rows.left_outer_joins(config[:includes]).where(config[:field] => nil)
|
repository_rows.left_outer_joins(config[:includes]).where(config[:field] => nil)
|
||||||
|
|
|
@ -13,14 +13,13 @@ class RepositorySnapshotDatatableService < RepositoryDatatableService
|
||||||
end
|
end
|
||||||
|
|
||||||
def process_query
|
def process_query
|
||||||
search_value = build_conditions(@params)[:search_value]
|
search_value = @params[:search][:value]
|
||||||
order_obj = build_conditions(@params)[:order_by_column]
|
order_params = @params[:order].first
|
||||||
|
order_by_column = { column: order_params[:column].to_i, dir: order_params[:dir] }
|
||||||
|
|
||||||
repository_rows = fetch_rows(search_value)
|
repository_rows = fetch_rows(search_value).preload(Extends::REPOSITORY_ROWS_PRELOAD_RELATIONS)
|
||||||
|
|
||||||
repository_rows = repository_rows.preload(Extends::REPOSITORY_ROWS_PRELOAD_RELATIONS)
|
sort_rows(order_by_column, repository_rows)
|
||||||
|
|
||||||
@repository_rows = sort_rows(order_obj, repository_rows)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def fetch_rows(search_value)
|
def fetch_rows(search_value)
|
||||||
|
@ -29,12 +28,8 @@ class RepositorySnapshotDatatableService < RepositoryDatatableService
|
||||||
@all_count = repository_rows.count
|
@all_count = repository_rows.count
|
||||||
|
|
||||||
if search_value.present?
|
if search_value.present?
|
||||||
matched_by_user = repository_rows.joins(:created_by).where_attributes_like('users.full_name', search_value)
|
repository_row_matches = repository_rows.where_attributes_like(@repository.default_search_fileds, search_value)
|
||||||
|
|
||||||
repository_row_matches = repository_rows
|
|
||||||
.where_attributes_like(['repository_rows.name', 'repository_rows.id'], search_value)
|
|
||||||
results = repository_rows.where(id: repository_row_matches)
|
results = repository_rows.where(id: repository_row_matches)
|
||||||
results = results.or(repository_rows.where(id: matched_by_user))
|
|
||||||
|
|
||||||
data_types = @repository.repository_columns.pluck(:data_type).uniq
|
data_types = @repository.repository_columns.pluck(:data_type).uniq
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% if @repository.present? && live_items_present && can_create_my_module_repository_snapshot?(@my_module) %>
|
<% if @repository.present? && live_items_present && can_create_my_module_repository_snapshots?(@my_module) %>
|
||||||
<div class="create-snapshot-item">
|
<div class="create-snapshot-item">
|
||||||
<p class="info <%= 'hidden' unless @repository_snapshots.blank? %>">
|
<p class="info <%= 'hidden' unless @repository_snapshots.blank? %>">
|
||||||
<%= t('my_modules.repository.snapshots.full_view.no_snapshots_label') %>
|
<%= t('my_modules.repository.snapshots.full_view.no_snapshots_label') %>
|
||||||
|
|
|
@ -70,6 +70,27 @@ class Extends
|
||||||
|
|
||||||
# Extra attributes used for search in repositories, 'filed_name' => include_hash
|
# Extra attributes used for search in repositories, 'filed_name' => include_hash
|
||||||
REPOSITORY_EXTRA_SEARCH_ATTR = {
|
REPOSITORY_EXTRA_SEARCH_ATTR = {
|
||||||
|
RepositoryTextValue: {
|
||||||
|
field: 'repository_text_values.data', includes: :repository_text_values
|
||||||
|
}, RepositoryNumberValue: {
|
||||||
|
field: 'repository_number_values.data', includes: :repository_number_values
|
||||||
|
}, RepositoryListValue: {
|
||||||
|
field: 'repository_list_items.data',
|
||||||
|
includes: { repository_list_values: :repository_list_item }
|
||||||
|
}, RepositoryChecklistValue: {
|
||||||
|
field: 'repository_checklist_items.data',
|
||||||
|
includes: { repository_checklist_values: { repository_checklist_items_values: :repository_checklist_item } }
|
||||||
|
}, RepositoryStatusValue: {
|
||||||
|
field: 'repository_status_items.status',
|
||||||
|
includes: { repository_status_values: :repository_status_item }
|
||||||
|
}, RepositoryAssetValue: {
|
||||||
|
field: 'active_storage_blobs.filename',
|
||||||
|
includes: { repository_asset_values: { asset: { file_attachment: :blob } } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Extra attributes used for advanced search in repositories, 'filed_name' => include_hash
|
||||||
|
REPOSITORY_ADVANCED_SEARCH_ATTR = {
|
||||||
RepositoryTextValue: {
|
RepositoryTextValue: {
|
||||||
field: 'repository_text_values.data', includes: :repository_text_values
|
field: 'repository_text_values.data', includes: :repository_text_values
|
||||||
}, RepositoryNumberValue: {
|
}, RepositoryNumberValue: {
|
||||||
|
|
Loading…
Add table
Reference in a new issue