Implement sorting on the project screen (when filterin/searching) [SCI-5281]

This commit is contained in:
Oleksii Kriuchykhin 2020-12-09 14:46:18 +01:00
parent ba3db65437
commit 0c65f3f7c2
3 changed files with 22 additions and 20 deletions

View file

@ -456,16 +456,7 @@
function refreshCurrentView() {
loadCardsView();
// Also refresh sidebar tree navigation
$.ajax({
url: $('#projects-cards-view').data('projects-sidebar-url'),
type: 'GET',
dataType: 'json',
success: function(data) {
$('#slide-panel .tree').html(data.html);
}
});
Sidebar.reload();
}
function initEditButton() {
@ -522,7 +513,6 @@
selectedProjects.length = 0;
selectedProjectFolders.length = 0;
refreshProjectsToolbar();
Sidebar.reload();
init();
},
error: function() {

View file

@ -51,13 +51,11 @@ class ProjectFolder < ApplicationRecord
)
SELECT id FROM inner_project_folders ORDER BY selected_folders_ids".gsub(/\n|\t/, ' ').gsub(/ +/, ' ')
new_query =
if project_folder.present?
where("project_folders.id IN (#{inner_folders_sql})", team.id, project_folder.id)
else
where("project_folders.id IN (#{inner_folders_sql})", team.id)
end
new_query.order(:parent_folder_id)
if project_folder.present?
where("project_folders.id IN (#{inner_folders_sql})", team.id, project_folder.id)
else
where("project_folders.id IN (#{inner_folders_sql})", team.id)
end
end
def parent_folders

View file

@ -37,8 +37,13 @@ class ProjectsOverviewService
else
fetch_project_records
end
project_records = project_records.includes(:project_folder)
sort_records(filter_project_records(project_records)).group_by(&:project_folder)
project_records = sort_records(filter_project_records(project_records)).includes(:project_folder).to_a
folder_records = ProjectFolder.inner_folders(@team, @current_folder).includes(:parent_folder).to_a
sorted_results_by_folder = {}
build_folder_content(@current_folder, folder_records, project_records, sorted_results_by_folder)
sorted_results_by_folder
end
def project_and_folder_cards
@ -50,6 +55,15 @@ class ProjectsOverviewService
private
def build_folder_content(folder, folder_records, project_records, sorted_results_by_folder)
projects_in_folder = project_records.select { |p| p.project_folder == folder }
sorted_results_by_folder[folder] = projects_in_folder if projects_in_folder.present?
folder_records.select { |f| f.parent_folder == folder }.each do |inner_folder|
build_folder_content(inner_folder, folder_records, project_records, sorted_results_by_folder)
end
end
def fetch_project_records
due_modules =
MyModule.active