Fix filtering for repository snapshots [SCI-6423]

This commit is contained in:
Oleksii Kriuchykhin 2022-01-17 21:53:13 +01:00
parent 8fcf4e9aa2
commit 34554e57e3
4 changed files with 29 additions and 13 deletions

View file

@ -267,7 +267,7 @@ class RepositoryDatatableService
operator: filter_element_params[:operator],
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])
repository_rows.left_outer_joins(config[:includes]).where(config[:field] => nil)

View file

@ -13,14 +13,13 @@ class RepositorySnapshotDatatableService < RepositoryDatatableService
end
def process_query
search_value = build_conditions(@params)[:search_value]
order_obj = build_conditions(@params)[:order_by_column]
search_value = @params[:search][:value]
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)
@repository_rows = sort_rows(order_obj, repository_rows)
sort_rows(order_by_column, repository_rows)
end
def fetch_rows(search_value)
@ -29,12 +28,8 @@ class RepositorySnapshotDatatableService < RepositoryDatatableService
@all_count = repository_rows.count
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_rows.name', 'repository_rows.id'], search_value)
repository_row_matches = repository_rows.where_attributes_like(@repository.default_search_fileds, search_value)
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

View file

@ -32,7 +32,7 @@
<% end %>
</div>
<% 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">
<p class="info <%= 'hidden' unless @repository_snapshots.blank? %>">
<%= t('my_modules.repository.snapshots.full_view.no_snapshots_label') %>

View file

@ -70,6 +70,27 @@ class Extends
# Extra attributes used for search in repositories, 'filed_name' => include_hash
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: {
field: 'repository_text_values.data', includes: :repository_text_values
}, RepositoryNumberValue: {