From 2959cf6276b26a3b1d54bc1b9147d52acfbd7e7e Mon Sep 17 00:00:00 2001 From: Martin Artnik Date: Wed, 23 Nov 2022 15:03:35 +0100 Subject: [PATCH] Add exposed IDs to recent work [SCI-7206] --- .../javascripts/dashboard/recent_work.js | 9 ++++++- app/services/dashboard/recent_work_service.rb | 24 ++++++++++++------- app/views/dashboards/_recent_work.html.erb | 2 +- config/locales/en.yml | 4 ++++ 4 files changed, 29 insertions(+), 10 deletions(-) diff --git a/app/assets/javascripts/dashboard/recent_work.js b/app/assets/javascripts/dashboard/recent_work.js index a8403ecea..cae58525d 100644 --- a/app/assets/javascripts/dashboard/recent_work.js +++ b/app/assets/javascripts/dashboard/recent_work.js @@ -5,11 +5,18 @@ var DasboardRecentWorkWidget = (function() { function renderRecentWorkItem(data, container) { $.each(data, (i, item) => { var recentWorkItem = $($('#recent-work-item-template').html()); + var recentWorkItemType = recentWorkItem.find('.object-type span'); recentWorkItem.attr('href', item.url); recentWorkItem.find('.object-name').html(item.name); - recentWorkItem.find('.object-type').html(I18n.t('dashboard.recent_work.subject_type.' + item.subject_type)); + recentWorkItemType.html(item.code || item.type); recentWorkItem.find('.object-changed').html(item.last_change); container.append(recentWorkItem); + + if (item.code) { + recentWorkItemType.attr('data-toggle', 'tooltip'); + recentWorkItemType.attr('title', `${item.type} ID: ${item.code}`); + recentWorkItemType.tooltip(); + } }); } diff --git a/app/services/dashboard/recent_work_service.rb b/app/services/dashboard/recent_work_service.rb index 54e959ba6..84470d41e 100644 --- a/app/services/dashboard/recent_work_service.rb +++ b/app/services/dashboard/recent_work_service.rb @@ -93,10 +93,11 @@ module Dashboard ordered_query = Activity.from("(#{query.to_sql}) AS activities").where.not(group_id: nil) .select(:group_id, + :subject_id, :name, 'MAX(last_change) AS last_change', 'MAX(report_project_id) AS report_project_id') - .group(:group_id, :name) + .group(:group_id, :subject_id, :name) .order('MAX(last_change) DESC').limit(Constants::SEARCH_LIMIT) query_filter = "(group_id LIKE 'tsk%' OR group_id LIKE 'exp%' OR group_id LIKE 'pro%')" if @mode == 'projects' @@ -106,6 +107,7 @@ module Dashboard ordered_query = ordered_query.where(query_filter) unless @mode == 'all' recent_objects = ordered_query.as_json.map do |recent_object| + object_class = override_subject_type(recent_object).constantize recent_object.deep_symbolize_keys! recent_object.delete_if { |_k, v| v.nil? } @@ -115,6 +117,10 @@ module Dashboard ) recent_object[:subject_type] = override_subject_type(recent_object) recent_object[:name] = escape_input(recent_object[:name]) + recent_object[:type] = I18n.t("activerecord.models.#{object_class.name.underscore}") + if object_class.include?(PrefixedIdModel) + recent_object[:code] = object_class::ID_PREFIX + recent_object[:subject_id].to_s + end recent_object[:url] = generate_url(recent_object) recent_object end @@ -231,7 +237,7 @@ module Dashboard end def generate_url(recent_object) - object_id = recent_object[:group_id].gsub(/[^0-9]/, '') + object_id = recent_object.with_indifferent_access[:group_id].gsub(/[^0-9]/, '') case recent_object[:subject_type] when 'MyModule' @@ -250,17 +256,19 @@ module Dashboard end def override_subject_type(recent_object) - if recent_object[:group_id].include?('pro') + group_id = recent_object.with_indifferent_access[:group_id] + + if group_id.include?('pro') 'Project' - elsif recent_object[:group_id].include?('exp') + elsif group_id.include?('exp') 'Experiment' - elsif recent_object[:group_id].include?('tsk') + elsif group_id.include?('tsk') 'MyModule' - elsif recent_object[:group_id].include?('prt') + elsif group_id.include?('prt') 'Protocol' - elsif recent_object[:group_id].include?('inv') + elsif group_id.include?('inv') 'RepositoryBase' - elsif recent_object[:group_id].include?('rpt') + elsif group_id.include?('rpt') 'Report' end end diff --git a/app/views/dashboards/_recent_work.html.erb b/app/views/dashboards/_recent_work.html.erb index e40ceaa40..e1045af64 100644 --- a/app/views/dashboards/_recent_work.html.erb +++ b/app/views/dashboards/_recent_work.html.erb @@ -19,7 +19,7 @@ diff --git a/config/locales/en.yml b/config/locales/en.yml index f8ba036c5..5b738f5af 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -106,6 +106,10 @@ en: project: "Project" my_module: "Task" experiment: "Experiment" + repository: "Inventory" + repository_base: "Inventory" + protocol: "Protocol" + report: "Report" errors: models: project: