From 0604815c00c16f1e4647fc834d47e90d242bc4d9 Mon Sep 17 00:00:00 2001 From: aignatov-bio Date: Fri, 24 Apr 2020 15:43:10 +0200 Subject: [PATCH 1/7] Add assigned task dropdown to repository --- .../repositories/renderers/view_renderers.js | 22 +++++++++++++++++++ .../repositories/repository_datatable.js | 10 ++++++++- .../repository/repository_table.scss | 15 ++++++++++++- app/controllers/repository_rows_controller.rb | 10 ++++++++- app/helpers/repository_datatable_helper.rb | 19 ++++++---------- app/models/my_module.rb | 9 +++++--- .../shared/_my_modules_list_partial.html.erb | 10 ++++++--- config/routes.rb | 6 ++++- 8 files changed, 79 insertions(+), 22 deletions(-) diff --git a/app/assets/javascripts/repositories/renderers/view_renderers.js b/app/assets/javascripts/repositories/renderers/view_renderers.js index ac0b9bf4f..03e6c1a97 100644 --- a/app/assets/javascripts/repositories/renderers/view_renderers.js +++ b/app/assets/javascripts/repositories/renderers/view_renderers.js @@ -154,3 +154,25 @@ $.fn.dataTable.render.RepositoryNumberValue = function(data) { ${data.value} `; }; + +$.fn.dataTable.render.AssignedTasksValue = function(data) { + if (data.tasks > 0) { + let tooltip = I18n.t('repositories.table.assigned_tooltip', { + tasks: data.tasks, + experiments: data.experiments, + projects: data.projects + }) + return `` + + } else { + return "
0
" + } + +}; diff --git a/app/assets/javascripts/repositories/repository_datatable.js b/app/assets/javascripts/repositories/repository_datatable.js index 4b816c62b..ef3797986 100644 --- a/app/assets/javascripts/repositories/repository_datatable.js +++ b/app/assets/javascripts/repositories/repository_datatable.js @@ -442,7 +442,7 @@ var RepositoryDatatable = (function(global) { className: 'assigned-column', sWidth: '1%', render: function(data, type, row) { - let content = data; + let content = $.fn.dataTable.render.AssignedTasksValue(data); let icon; if (!row.recordEditable) { icon = ``; @@ -582,6 +582,14 @@ var RepositoryDatatable = (function(global) { $(TABLE_ID).find('tr[data-editable=false]').each(function(_, e) { rowsLocked.push(parseInt($(e).attr('id'), 10)); }); + + $(TABLE_ID).on('show.bs.dropdown', '.assign-counter-container', function() { + var tasksContainer = $(this).find('.tasks'); + var tasksUrl = $(this).data('task-list-url'); + $.get(tasksUrl, function(result) { + tasksContainer.html(result.html); + }) + }) } }); diff --git a/app/assets/stylesheets/repository/repository_table.scss b/app/assets/stylesheets/repository/repository_table.scss index 70ec10044..100d76b49 100644 --- a/app/assets/stylesheets/repository/repository_table.scss +++ b/app/assets/stylesheets/repository/repository_table.scss @@ -49,7 +49,16 @@ width: calc(100% - 40px); .assign-counter { - margin-left: 5px; + display: inline-block; + height: 100%; + padding-left: 5px; + width: 100%; + + &:hover, + &:visited, + &:focus { + text-decoration: none; + } &.has-assigned { color: $brand-primary; @@ -59,6 +68,10 @@ &:hover { background-color: $color-alto; } + + .dropdown-menu { + padding: 8px; + } } .circle-icon { diff --git a/app/controllers/repository_rows_controller.rb b/app/controllers/repository_rows_controller.rb index f13fd2990..615ea65c8 100644 --- a/app/controllers/repository_rows_controller.rb +++ b/app/controllers/repository_rows_controller.rb @@ -3,7 +3,7 @@ class RepositoryRowsController < ApplicationController include ActionView::Helpers::TextHelper include ApplicationHelper - before_action :load_info_modal_vars, only: :show + before_action :load_info_modal_vars, only: %i(show assigned_task_list) before_action :load_vars, only: %i(edit update) before_action :load_repository, only: %i(create @@ -180,6 +180,14 @@ class RepositoryRowsController < ApplicationController end end + def assigned_task_list + my_modules = @repository_row.my_modules.joins(experiment: :project) + .my_modules_list_partial + render json: { + html: render_to_string(partial: 'shared/my_modules_list_partial.html.erb', locals: { task_groups: my_modules }) + } + end + private include StringUtility diff --git a/app/helpers/repository_datatable_helper.rb b/app/helpers/repository_datatable_helper.rb index 40b599e25..aecf7485e 100644 --- a/app/helpers/repository_datatable_helper.rb +++ b/app/helpers/repository_datatable_helper.rb @@ -7,7 +7,7 @@ module RepositoryDatatableHelper repository_rows.map do |record| row = { 'DT_RowId': record.id, - '1': assigned_row(record), + '1': assigned_row(record, repository), '2': record.id, '3': escape_input(record.name), '4': I18n.l(record.created_at, format: :full), @@ -64,18 +64,13 @@ module RepositoryDatatableHelper end end - def assigned_row(record) - if record.assigned_my_modules_count.positive? - tooltip = t('repositories.table.assigned_tooltip', - tasks: record.assigned_my_modules_count, + def assigned_row(record, repository) + { + tasks: record.assigned_my_modules_count, experiments: record.assigned_experiments_count, - projects: record.assigned_projects_count) - - "
"\ - "#{record.assigned_my_modules_count}
" - else - "
0
" - end + projects: record.assigned_projects_count, + task_list_url: assigned_task_list_repository_repository_row_path(repository, record) + } end def can_perform_repository_actions(repository) diff --git a/app/models/my_module.rb b/app/models/my_module.rb index b70441a95..05da42acc 100644 --- a/app/models/my_module.rb +++ b/app/models/my_module.rb @@ -526,14 +526,17 @@ class MyModule < ApplicationRecord def self.my_modules_list_partial ungrouped_tasks = joins(experiment: :project) .select('experiments.name as experiment_name, + experiments.archived as experiment_archived, projects.name as project_name, - my_modules.name as task_name, - my_modules.id') + projects.archived as projects_archived, + my_modules.*') ungrouped_tasks.group_by { |i| [i[:project_name], i[:experiment_name]] }.map do |group, tasks| { project_name: group[0], + projects_archived: tasks[0]&.projects_archived, experiment_name: group[1], - tasks: tasks.map { |task| { id: task.id, task_name: task.task_name } } + experiment_archived: tasks[0]&.experiment_archived, + tasks: tasks } end end diff --git a/app/views/shared/_my_modules_list_partial.html.erb b/app/views/shared/_my_modules_list_partial.html.erb index 94f3ca145..aa45465c5 100644 --- a/app/views/shared/_my_modules_list_partial.html.erb +++ b/app/views/shared/_my_modules_list_partial.html.erb @@ -2,15 +2,19 @@ <% task_groups.each do |task_group| %>
- <%= task_group[:project_name] %> + <%= escape_input(task_group[:project_name]) %> / - <%= task_group[:experiment_name] %> + <%= escape_input(task_group[:experiment_name]) %>
<% task_group[:tasks].each do |task| %>
<%= draw_custom_icon('task-icon') %> - <%= link_to(task[:task_name], protocols_my_module_path(task[:id]), {class: "task-link", title: task[:task_name]}) %> + <% if can_read_experiment?(current_user, task.experiment) %> + <%= link_to(escape_input(task.name), protocols_my_module_path(task.id), {class: "task-link", title: task.name}) %> + <% else %> + <%= escape_input(task.name) %> + <% end %>
<% end %>
diff --git a/config/routes.rb b/config/routes.rb index 7c734b76d..6c583becf 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -630,7 +630,11 @@ Rails.application.routes.draw do defaults: { format: 'json' } resources :repository_columns, only: %i(create edit update destroy) - resources :repository_rows, only: %i(create edit update) + resources :repository_rows, only: %i(create edit update) do + member do + get :assigned_task_list + end + end member do post 'parse_sheet', defaults: { format: 'json' } post 'import_records' From b9c5089c2bc649435283c2abb7e18076df45ea70 Mon Sep 17 00:00:00 2001 From: aignatov-bio Date: Tue, 28 Apr 2020 12:41:59 +0200 Subject: [PATCH 2/7] Add search to assigned tasks dropdown --- .../javascripts/my_modules/repositories.js | 8 ++++-- .../repositories/renderers/view_renderers.js | 12 ++++----- .../repositories/repository_datatable.js | 9 ++----- .../javascripts/sitewide/repository_helper.js | 25 +++++++++++++++++++ .../stylesheets/my_modules/repositories.scss | 9 +++++++ .../repository/repository_table.scss | 2 +- .../shared/my_modules_list_partial.scss | 10 ++++++++ app/controllers/repository_rows_controller.rb | 12 +++++---- app/models/my_module.rb | 4 +-- .../shared/_my_modules_list_partial.html.erb | 11 +++++++- config/locales/en.yml | 1 + 11 files changed, 79 insertions(+), 24 deletions(-) diff --git a/app/assets/javascripts/my_modules/repositories.js b/app/assets/javascripts/my_modules/repositories.js index be3de75f9..f94b0496a 100644 --- a/app/assets/javascripts/my_modules/repositories.js +++ b/app/assets/javascripts/my_modules/repositories.js @@ -1,5 +1,5 @@ /* eslint-disable no-param-reassign */ -/* global DataTableHelpers PerfectScrollbar FilePreviewModal animateSpinner */ +/* global DataTableHelpers PerfectScrollbar FilePreviewModal animateSpinner initAssignedTasksDropdown */ var MyModuleRepositories = (function() { const FULL_VIEW_MODAL = $('#myModuleRepositoryFullViewModal'); @@ -37,7 +37,10 @@ var MyModuleRepositories = (function() { targets: 1, searchable: false, className: 'assigned-column', - sWidth: '1%' + sWidth: '1%', + render: function(data) { + return $.fn.dataTable.render.AssignedTasksValue(data); + } }, { targets: 3, render: function(data, type, row) { @@ -131,6 +134,7 @@ var MyModuleRepositories = (function() { dataTableWrapper.find('.main-actions, .pagination-row').removeClass('hidden'); $('.table-container .toolbar').html($('#repositoryToolbarButtonsTemplate').html()); + initAssignedTasksDropdown(tableContainer); }, drawCallback: function() { diff --git a/app/assets/javascripts/repositories/renderers/view_renderers.js b/app/assets/javascripts/repositories/renderers/view_renderers.js index 03e6c1a97..23386cf81 100644 --- a/app/assets/javascripts/repositories/renderers/view_renderers.js +++ b/app/assets/javascripts/repositories/renderers/view_renderers.js @@ -161,18 +161,18 @@ $.fn.dataTable.render.AssignedTasksValue = function(data) { tasks: data.tasks, experiments: data.experiments, projects: data.projects - }) + }); return `` - - } else { - return "
0
" +
`; } - + return "
0
"; }; diff --git a/app/assets/javascripts/repositories/repository_datatable.js b/app/assets/javascripts/repositories/repository_datatable.js index ef3797986..2bdc47f70 100644 --- a/app/assets/javascripts/repositories/repository_datatable.js +++ b/app/assets/javascripts/repositories/repository_datatable.js @@ -1,6 +1,7 @@ /* globals I18n _ SmartAnnotation FilePreviewModal animateSpinner Promise DataTableHelpers HelperModule animateLoading hideAssignUnasignModal RepositoryDatatableRowEditor + initAssignedTasksDropdown */ //= require jquery-ui/widgets/sortable @@ -583,13 +584,7 @@ var RepositoryDatatable = (function(global) { rowsLocked.push(parseInt($(e).attr('id'), 10)); }); - $(TABLE_ID).on('show.bs.dropdown', '.assign-counter-container', function() { - var tasksContainer = $(this).find('.tasks'); - var tasksUrl = $(this).data('task-list-url'); - $.get(tasksUrl, function(result) { - tasksContainer.html(result.html); - }) - }) + initAssignedTasksDropdown(TABLE_ID); } }); diff --git a/app/assets/javascripts/sitewide/repository_helper.js b/app/assets/javascripts/sitewide/repository_helper.js index 436f92264..60059dbd4 100644 --- a/app/assets/javascripts/sitewide/repository_helper.js +++ b/app/assets/javascripts/sitewide/repository_helper.js @@ -18,3 +18,28 @@ initUnsavedWorkDialog(); }()); + +function initAssignedTasksDropdown(table) { + function loadTasks(counterContainer) { + var tasksContainer = counterContainer.find('.tasks'); + var tasksUrl = counterContainer.data('task-list-url'); + var searchQuery = counterContainer.find('.search-tasks').val(); + $.get(tasksUrl, { query: searchQuery }, function(result) { + tasksContainer.html(result.html); + }); + } + + $(table).on('show.bs.dropdown', '.assign-counter-container', function() { + var cell = $(this); + loadTasks(cell); + }); + + $(table).on('click', '.assign-counter-container .dropdown-menu', function(e) { + e.stopPropagation(); + }); + + $(table).on('change', '.assign-counter-container .search-tasks', function() { + var cell = $(this).closest('.assign-counter-container'); + loadTasks(cell); + }); +} diff --git a/app/assets/stylesheets/my_modules/repositories.scss b/app/assets/stylesheets/my_modules/repositories.scss index 96a704188..8c1238f52 100644 --- a/app/assets/stylesheets/my_modules/repositories.scss +++ b/app/assets/stylesheets/my_modules/repositories.scss @@ -272,6 +272,10 @@ width: calc(100% - 16px); .assign-counter { + display: inline-block; + height: 100%; + width: 100%; + &.has-assigned { color: $brand-primary; } @@ -280,6 +284,11 @@ &:hover { background-color: $color-alto; } + + .dropdown-menu { + min-width: 320px; + padding: 8px; + } } } } diff --git a/app/assets/stylesheets/repository/repository_table.scss b/app/assets/stylesheets/repository/repository_table.scss index 100d76b49..512c8fdde 100644 --- a/app/assets/stylesheets/repository/repository_table.scss +++ b/app/assets/stylesheets/repository/repository_table.scss @@ -41,7 +41,6 @@ .assign-counter-container { border-radius: $border-radius-tag; - cursor: pointer; display: inline-block; line-height: 35px; position: absolute; @@ -70,6 +69,7 @@ } .dropdown-menu { + min-width: 320px; padding: 8px; } } diff --git a/app/assets/stylesheets/shared/my_modules_list_partial.scss b/app/assets/stylesheets/shared/my_modules_list_partial.scss index cf3be7bb5..e42834c12 100644 --- a/app/assets/stylesheets/shared/my_modules_list_partial.scss +++ b/app/assets/stylesheets/shared/my_modules_list_partial.scss @@ -56,4 +56,14 @@ } } } + + .archived { + @include font-small; + background: $brand-warning; + border-radius: $border-radius-tag; + color: $color-white; + line-height: 14px; + margin-right: 3px; + padding: 2px 3px; + } } diff --git a/app/controllers/repository_rows_controller.rb b/app/controllers/repository_rows_controller.rb index 615ea65c8..3855c5753 100644 --- a/app/controllers/repository_rows_controller.rb +++ b/app/controllers/repository_rows_controller.rb @@ -181,11 +181,13 @@ class RepositoryRowsController < ApplicationController end def assigned_task_list - my_modules = @repository_row.my_modules.joins(experiment: :project) - .my_modules_list_partial - render json: { - html: render_to_string(partial: 'shared/my_modules_list_partial.html.erb', locals: { task_groups: my_modules }) - } + my_modules = @repository_row.my_modules.joins(experiment: :project) + .search_by_name(current_user, current_team, params[:query]) + .my_modules_list_partial + + render json: { + html: render_to_string(partial: 'shared/my_modules_list_partial.html.erb', locals: { task_groups: my_modules }) + } end private diff --git a/app/models/my_module.rb b/app/models/my_module.rb index 05da42acc..6d893615e 100644 --- a/app/models/my_module.rb +++ b/app/models/my_module.rb @@ -528,12 +528,12 @@ class MyModule < ApplicationRecord .select('experiments.name as experiment_name, experiments.archived as experiment_archived, projects.name as project_name, - projects.archived as projects_archived, + projects.archived as project_archived, my_modules.*') ungrouped_tasks.group_by { |i| [i[:project_name], i[:experiment_name]] }.map do |group, tasks| { project_name: group[0], - projects_archived: tasks[0]&.projects_archived, + project_archived: tasks[0]&.project_archived, experiment_name: group[1], experiment_archived: tasks[0]&.experiment_archived, tasks: tasks diff --git a/app/views/shared/_my_modules_list_partial.html.erb b/app/views/shared/_my_modules_list_partial.html.erb index aa45465c5..b39049ae9 100644 --- a/app/views/shared/_my_modules_list_partial.html.erb +++ b/app/views/shared/_my_modules_list_partial.html.erb @@ -2,16 +2,25 @@ <% task_groups.each do |task_group| %>
+ <% if task_group[:project_archived]%> + <%= t('general.archived') %> + <% end %> <%= escape_input(task_group[:project_name]) %> / + <% if task_group[:experiment_archived] %> + <%= t('general.archived') %> + <% end %> <%= escape_input(task_group[:experiment_name]) %>
<% task_group[:tasks].each do |task| %>
<%= draw_custom_icon('task-icon') %> + <% if task.archived %> + <%= t('general.archived') %> + <% end %> <% if can_read_experiment?(current_user, task.experiment) %> - <%= link_to(escape_input(task.name), protocols_my_module_path(task.id), {class: "task-link", title: task.name}) %> + <%= link_to(escape_input(task.name), protocols_my_module_path(task.id), {class: "task-link", title: escape_input(task.name), target: "_blank"}) %> <% else %> <%= escape_input(task.name) %> <% end %> diff --git a/config/locales/en.yml b/config/locales/en.yml index cd979fc4e..aa2fbe0ab 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -2205,6 +2205,7 @@ en: more_comments: "More comments" comment_placeholder: "Your Message" comment_placeholder_new: "Add new comment…" + archived: "Archived" sort: new_html: "Newest first ↓" old_html: "Oldest first ↑" From be8ef5a31053e5087544bd663d5f6e6ce775f3dd Mon Sep 17 00:00:00 2001 From: aignatov-bio Date: Tue, 28 Apr 2020 12:49:19 +0200 Subject: [PATCH 3/7] Add I18n --- .../javascripts/repositories/renderers/view_renderers.js | 3 ++- config/locales/en.yml | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/assets/javascripts/repositories/renderers/view_renderers.js b/app/assets/javascripts/repositories/renderers/view_renderers.js index 23386cf81..9ed919d25 100644 --- a/app/assets/javascripts/repositories/renderers/view_renderers.js +++ b/app/assets/javascripts/repositories/renderers/view_renderers.js @@ -168,7 +168,8 @@ $.fn.dataTable.render.AssignedTasksValue = function(data) { data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">${data.tasks} diff --git a/config/locales/en.yml b/config/locales/en.yml index aa2fbe0ab..204a85110 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1098,6 +1098,7 @@ en: table: id: 'ID' assigned: "Assigned" + assigned_search: 'Search...' assigned_tooltip: "%{tasks} tasks in %{experiments} experiments, %{projects} projects" row_name: "Name" added_on: "Added on" From b01ff206e8d861295609d0614ef6a76f5eef529f Mon Sep 17 00:00:00 2001 From: aignatov-bio Date: Tue, 28 Apr 2020 13:18:57 +0200 Subject: [PATCH 4/7] Fix tests --- spec/support/api/schemas/repository_row_datatables.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/support/api/schemas/repository_row_datatables.json b/spec/support/api/schemas/repository_row_datatables.json index 5c209e998..4e136a4ef 100644 --- a/spec/support/api/schemas/repository_row_datatables.json +++ b/spec/support/api/schemas/repository_row_datatables.json @@ -11,7 +11,7 @@ "required": ["DT_RowId", "1", "2", "3", "4", "5", "recordEditUrl", "recordUpdateUrl", "recordInfoUrl"], "properties": { "DT_RowId": { "type": "integer" }, - "1": { "type": "string" }, + "1": { "type": "object" }, "2": { "type": "integer" }, "3": { "type": "string" }, "4": { "type": "string" }, From 8076d8f46430e5e1ec8968a6c5002c20770df804 Mon Sep 17 00:00:00 2001 From: aignatov-bio Date: Thu, 7 May 2020 12:51:18 +0200 Subject: [PATCH 5/7] Create helper for partial --- .../dashboard/calendars_controller.rb | 7 +++++-- app/controllers/repository_rows_controller.rb | 8 ++++--- app/helpers/my_modules_list_partial_helper.rb | 21 +++++++++++++++++++ app/helpers/repository_datatable_helper.rb | 6 +++--- app/models/my_module.rb | 18 ---------------- .../shared/_my_modules_list_partial.html.erb | 8 +++---- 6 files changed, 38 insertions(+), 30 deletions(-) create mode 100644 app/helpers/my_modules_list_partial_helper.rb diff --git a/app/controllers/dashboard/calendars_controller.rb b/app/controllers/dashboard/calendars_controller.rb index 65afdd28d..cbac57e26 100644 --- a/app/controllers/dashboard/calendars_controller.rb +++ b/app/controllers/dashboard/calendars_controller.rb @@ -3,6 +3,7 @@ module Dashboard class CalendarsController < ApplicationController include IconsHelper + include MyModulesListPartialHelper def show date = DateTime.parse(params[:date]) @@ -26,9 +27,11 @@ module Dashboard .where(projects: { archived: false }) .where('DATE(my_modules.due_date) = DATE(?)', date) .where(projects: { team_id: current_team.id }) - .my_modules_list_partial + my_modules_grouped = my_modules_list_partial(my_modules) render json: { - html: render_to_string(partial: 'shared/my_modules_list_partial.html.erb', locals: { task_groups: my_modules }) + html: render_to_string(partial: 'shared/my_modules_list_partial.html.erb', locals: { + task_groups: my_modules_grouped + }) } end end diff --git a/app/controllers/repository_rows_controller.rb b/app/controllers/repository_rows_controller.rb index 3855c5753..90fb66b39 100644 --- a/app/controllers/repository_rows_controller.rb +++ b/app/controllers/repository_rows_controller.rb @@ -2,6 +2,7 @@ class RepositoryRowsController < ApplicationController include InputSanitizeHelper include ActionView::Helpers::TextHelper include ApplicationHelper + include MyModulesListPartialHelper before_action :load_info_modal_vars, only: %i(show assigned_task_list) before_action :load_vars, only: %i(edit update) @@ -183,10 +184,11 @@ class RepositoryRowsController < ApplicationController def assigned_task_list my_modules = @repository_row.my_modules.joins(experiment: :project) .search_by_name(current_user, current_team, params[:query]) - .my_modules_list_partial - + my_modules_grouped = my_modules_list_partial(my_modules) render json: { - html: render_to_string(partial: 'shared/my_modules_list_partial.html.erb', locals: { task_groups: my_modules }) + html: render_to_string(partial: 'shared/my_modules_list_partial.html.erb', locals: { + task_groups: my_modules_grouped + }) } end diff --git a/app/helpers/my_modules_list_partial_helper.rb b/app/helpers/my_modules_list_partial_helper.rb new file mode 100644 index 000000000..b35881a0c --- /dev/null +++ b/app/helpers/my_modules_list_partial_helper.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +module MyModulesListPartialHelper + def my_modules_list_partial(my_modules) + ungrouped_tasks = my_modules.joins(experiment: :project) + .select('experiments.name as experiment_name, + experiments.archived as experiment_archived, + projects.name as project_name, + projects.archived as project_archived, + my_modules.*') + ungrouped_tasks.group_by { |i| [i[:project_name], i[:experiment_name]] }.map do |group, tasks| + { + project_name: group[0], + project_archived: tasks[0]&.project_archived, + experiment_name: group[1], + experiment_archived: tasks[0]&.experiment_archived, + tasks: tasks + } + end + end +end diff --git a/app/helpers/repository_datatable_helper.rb b/app/helpers/repository_datatable_helper.rb index aecf7485e..0055766f4 100644 --- a/app/helpers/repository_datatable_helper.rb +++ b/app/helpers/repository_datatable_helper.rb @@ -7,7 +7,7 @@ module RepositoryDatatableHelper repository_rows.map do |record| row = { 'DT_RowId': record.id, - '1': assigned_row(record, repository), + '1': assigned_row(record), '2': record.id, '3': escape_input(record.name), '4': I18n.l(record.created_at, format: :full), @@ -64,12 +64,12 @@ module RepositoryDatatableHelper end end - def assigned_row(record, repository) + def assigned_row(record) { tasks: record.assigned_my_modules_count, experiments: record.assigned_experiments_count, projects: record.assigned_projects_count, - task_list_url: assigned_task_list_repository_repository_row_path(repository, record) + task_list_url: assigned_task_list_repository_repository_row_path(record.repository, record) } end diff --git a/app/models/my_module.rb b/app/models/my_module.rb index 6d893615e..86503139b 100644 --- a/app/models/my_module.rb +++ b/app/models/my_module.rb @@ -523,24 +523,6 @@ class MyModule < ApplicationRecord self.completed_on = nil end - def self.my_modules_list_partial - ungrouped_tasks = joins(experiment: :project) - .select('experiments.name as experiment_name, - experiments.archived as experiment_archived, - projects.name as project_name, - projects.archived as project_archived, - my_modules.*') - ungrouped_tasks.group_by { |i| [i[:project_name], i[:experiment_name]] }.map do |group, tasks| - { - project_name: group[0], - project_archived: tasks[0]&.project_archived, - experiment_name: group[1], - experiment_archived: tasks[0]&.experiment_archived, - tasks: tasks - } - end - end - def assign_user(user, assigned_by = nil) user_my_modules.create( assigned_by: assigned_by || user, diff --git a/app/views/shared/_my_modules_list_partial.html.erb b/app/views/shared/_my_modules_list_partial.html.erb index b39049ae9..5edb1447c 100644 --- a/app/views/shared/_my_modules_list_partial.html.erb +++ b/app/views/shared/_my_modules_list_partial.html.erb @@ -5,12 +5,12 @@ <% if task_group[:project_archived]%> <%= t('general.archived') %> <% end %> - <%= escape_input(task_group[:project_name]) %> + <%= task_group[:project_name] %> / <% if task_group[:experiment_archived] %> <%= t('general.archived') %> <% end %> - <%= escape_input(task_group[:experiment_name]) %> + <%= task_group[:experiment_name] %>
<% task_group[:tasks].each do |task| %> @@ -20,9 +20,9 @@ <%= t('general.archived') %> <% end %> <% if can_read_experiment?(current_user, task.experiment) %> - <%= link_to(escape_input(task.name), protocols_my_module_path(task.id), {class: "task-link", title: escape_input(task.name), target: "_blank"}) %> + <%= link_to(task.name, protocols_my_module_path(task.id), {class: "task-link", title: task.name, target: "_blank"}) %> <% else %> - <%= escape_input(task.name) %> + <%= task.name %> <% end %>
<% end %> From 2728df5bac3ab49e15cd306d9f6b2a85e147cc84 Mon Sep 17 00:00:00 2001 From: aignatov-bio Date: Fri, 8 May 2020 11:56:29 +0200 Subject: [PATCH 6/7] Move helper method to my_module_helper --- .../dashboard/calendars_controller.rb | 5 ++--- app/controllers/repository_rows_controller.rb | 5 ++--- app/helpers/my_modules_helper.rb | 18 ++++++++++++++++ app/helpers/my_modules_list_partial_helper.rb | 21 ------------------- .../shared/_my_modules_list_partial.html.erb | 2 +- 5 files changed, 23 insertions(+), 28 deletions(-) delete mode 100644 app/helpers/my_modules_list_partial_helper.rb diff --git a/app/controllers/dashboard/calendars_controller.rb b/app/controllers/dashboard/calendars_controller.rb index cbac57e26..5f098cfdf 100644 --- a/app/controllers/dashboard/calendars_controller.rb +++ b/app/controllers/dashboard/calendars_controller.rb @@ -3,7 +3,7 @@ module Dashboard class CalendarsController < ApplicationController include IconsHelper - include MyModulesListPartialHelper + include MyModulesHelper def show date = DateTime.parse(params[:date]) @@ -27,10 +27,9 @@ module Dashboard .where(projects: { archived: false }) .where('DATE(my_modules.due_date) = DATE(?)', date) .where(projects: { team_id: current_team.id }) - my_modules_grouped = my_modules_list_partial(my_modules) render json: { html: render_to_string(partial: 'shared/my_modules_list_partial.html.erb', locals: { - task_groups: my_modules_grouped + my_modules: my_modules }) } end diff --git a/app/controllers/repository_rows_controller.rb b/app/controllers/repository_rows_controller.rb index 90fb66b39..79f9ad8c4 100644 --- a/app/controllers/repository_rows_controller.rb +++ b/app/controllers/repository_rows_controller.rb @@ -2,7 +2,7 @@ class RepositoryRowsController < ApplicationController include InputSanitizeHelper include ActionView::Helpers::TextHelper include ApplicationHelper - include MyModulesListPartialHelper + include MyModulesHelper before_action :load_info_modal_vars, only: %i(show assigned_task_list) before_action :load_vars, only: %i(edit update) @@ -184,10 +184,9 @@ class RepositoryRowsController < ApplicationController def assigned_task_list my_modules = @repository_row.my_modules.joins(experiment: :project) .search_by_name(current_user, current_team, params[:query]) - my_modules_grouped = my_modules_list_partial(my_modules) render json: { html: render_to_string(partial: 'shared/my_modules_list_partial.html.erb', locals: { - task_groups: my_modules_grouped + my_modules: my_modules }) } end diff --git a/app/helpers/my_modules_helper.rb b/app/helpers/my_modules_helper.rb index bb31c0e8a..9e6c1d420 100644 --- a/app/helpers/my_modules_helper.rb +++ b/app/helpers/my_modules_helper.rb @@ -55,4 +55,22 @@ module MyModulesHelper def is_results_page? action_name == 'results' end + + def grouped_by_prj_exp(my_modules) + ungrouped_tasks = my_modules.joins(experiment: :project) + .select('experiments.name as experiment_name, + experiments.archived as experiment_archived, + projects.name as project_name, + projects.archived as project_archived, + my_modules.*') + ungrouped_tasks.group_by { |i| [i[:project_name], i[:experiment_name]] }.map do |group, tasks| + { + project_name: group[0], + project_archived: tasks[0]&.project_archived, + experiment_name: group[1], + experiment_archived: tasks[0]&.experiment_archived, + tasks: tasks + } + end + end end diff --git a/app/helpers/my_modules_list_partial_helper.rb b/app/helpers/my_modules_list_partial_helper.rb deleted file mode 100644 index b35881a0c..000000000 --- a/app/helpers/my_modules_list_partial_helper.rb +++ /dev/null @@ -1,21 +0,0 @@ -# frozen_string_literal: true - -module MyModulesListPartialHelper - def my_modules_list_partial(my_modules) - ungrouped_tasks = my_modules.joins(experiment: :project) - .select('experiments.name as experiment_name, - experiments.archived as experiment_archived, - projects.name as project_name, - projects.archived as project_archived, - my_modules.*') - ungrouped_tasks.group_by { |i| [i[:project_name], i[:experiment_name]] }.map do |group, tasks| - { - project_name: group[0], - project_archived: tasks[0]&.project_archived, - experiment_name: group[1], - experiment_archived: tasks[0]&.experiment_archived, - tasks: tasks - } - end - end -end diff --git a/app/views/shared/_my_modules_list_partial.html.erb b/app/views/shared/_my_modules_list_partial.html.erb index 5edb1447c..d35776e66 100644 --- a/app/views/shared/_my_modules_list_partial.html.erb +++ b/app/views/shared/_my_modules_list_partial.html.erb @@ -1,5 +1,5 @@
- <% task_groups.each do |task_group| %> + <% grouped_by_prj_exp(my_modules).each do |task_group| %>
<% if task_group[:project_archived]%> From e9c54f10fb0c1bd5e41eda80e4b3b188f3a9179d Mon Sep 17 00:00:00 2001 From: aignatov-bio Date: Fri, 8 May 2020 11:58:40 +0200 Subject: [PATCH 7/7] Fix markup --- app/assets/javascripts/my_modules/repositories.js | 1 - 1 file changed, 1 deletion(-) diff --git a/app/assets/javascripts/my_modules/repositories.js b/app/assets/javascripts/my_modules/repositories.js index f41f583d2..6d80f9dc7 100644 --- a/app/assets/javascripts/my_modules/repositories.js +++ b/app/assets/javascripts/my_modules/repositories.js @@ -1,4 +1,3 @@ - /* eslint-disable no-param-reassign, no-use-before-define */ /* global DataTableHelpers PerfectScrollbar FilePreviewModal animateSpinner HelperModule initAssignedTasksDropdown */