diff --git a/app/views/dashboard/_resource.html.erb b/app/components/dashboard/active_resource_component.html.erb
similarity index 72%
rename from app/views/dashboard/_resource.html.erb
rename to app/components/dashboard/active_resource_component.html.erb
index bef2c194f..94e8c81ca 100644
--- a/app/views/dashboard/_resource.html.erb
+++ b/app/components/dashboard/active_resource_component.html.erb
@@ -1,14 +1,12 @@
-
+ title="<%= resource_tooltip %>">
<%= resource.title %>
- <% if is_new_action_since_last_login?(resource, @new_actions_since_last_login) %>
+ <% if is_new_action_since_last_login?(resource, new_actions_since_last_login) %>
<%= t("dashboard.progress.new_action") %>
<% end %>
-
- <%= resource.short_description %>
-
+
<%= resource.short_description %>
<% if resource.executed_for?(proposal) || (!resource.request_to_administrators && resource.active_for?(proposal)) %>
@@ -22,9 +20,7 @@
new_request_proposal_dashboard_action_path(proposal, resource),
class: "button expanded" %>
<% else %>
-
- <%= resource_availability_label(resource) %>
-
+ <%= resource_availability_label %>
<% end %>
diff --git a/app/components/dashboard/active_resource_component.rb b/app/components/dashboard/active_resource_component.rb
new file mode 100644
index 000000000..26726af9a
--- /dev/null
+++ b/app/components/dashboard/active_resource_component.rb
@@ -0,0 +1,37 @@
+class Dashboard::ActiveResourceComponent < ApplicationComponent
+ attr_reader :resource, :proposal, :new_actions_since_last_login
+ use_helpers :is_new_action_since_last_login?
+
+ def initialize(resource, proposal, new_actions_since_last_login)
+ @resource = resource
+ @proposal = proposal
+ @new_actions_since_last_login = new_actions_since_last_login
+ end
+
+ def resource_card_class
+ return "alert" unless resource.active_for?(proposal)
+ return "success" if resource.executed_for?(proposal)
+
+ "primary"
+ end
+
+ def resource_tooltip
+ return t("dashboard.resource.resource_locked") unless resource.active_for?(proposal)
+ return t("dashboard.resource.view_resource") if resource.executed_for?(proposal)
+ return t("dashboard.resource.resource_requested") if resource.requested_for?(proposal)
+
+ t("dashboard.resource.request_resource")
+ end
+
+ def resource_availability_label
+ label = []
+
+ label << t("dashboard.resource.required_days",
+ days: resource.day_offset) if resource.day_offset > 0
+ label << t("dashboard.resource.required_supports",
+ supports: number_with_delimiter(resource.required_supports,
+ delimiter: ".")) if resource.required_supports > 0
+
+ safe_join label, h(" #{t("dashboard.resource.and")})") + tag(:br)
+ end
+end
diff --git a/app/components/dashboard/resources_component.html.erb b/app/components/dashboard/resources_component.html.erb
index c2c367920..36669a3a5 100644
--- a/app/components/dashboard/resources_component.html.erb
+++ b/app/components/dashboard/resources_component.html.erb
@@ -5,6 +5,8 @@
<% default_resources.each do |resource| %>
<%= render Dashboard::DefaultResourceComponent.new(resource, proposal) %>
<% end %>
- <%= render partial: "resource", collection: active_resources %>
+ <% active_resources.each do |resource| %>
+ <%= render Dashboard::ActiveResourceComponent.new(resource, proposal, new_actions_since_last_login) %>
+ <% end %>
diff --git a/app/components/dashboard/resources_component.rb b/app/components/dashboard/resources_component.rb
index 90a880f3d..99fe3de33 100644
--- a/app/components/dashboard/resources_component.rb
+++ b/app/components/dashboard/resources_component.rb
@@ -1,9 +1,9 @@
class Dashboard::ResourcesComponent < ApplicationComponent
- attr_reader :active_resources, :proposal
+ attr_reader :proposal, :new_actions_since_last_login
- def initialize(active_resources, proposal)
- @active_resources = active_resources
+ def initialize(proposal, new_actions_since_last_login)
@proposal = proposal
+ @new_actions_since_last_login = new_actions_since_last_login
end
private
@@ -11,4 +11,11 @@ class Dashboard::ResourcesComponent < ApplicationComponent
def default_resources
%w[polls mailing poster]
end
+
+ def active_resources
+ @active_resources ||= Dashboard::Action.active
+ .resources
+ .by_proposal(proposal)
+ .order(required_supports: :asc, day_offset: :asc)
+ end
end
diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb
index 5e2be5d03..aa0784f83 100644
--- a/app/controllers/dashboard_controller.rb
+++ b/app/controllers/dashboard_controller.rb
@@ -1,5 +1,5 @@
class DashboardController < Dashboard::BaseController
- helper_method :dashboard_action, :active_resources, :course
+ helper_method :dashboard_action, :course
before_action :set_done_and_pending_actions, only: [:recommended_actions, :progress]
before_action :authorize_dashboard, except: :publish
@@ -30,13 +30,6 @@ class DashboardController < Dashboard::BaseController
private
- def active_resources
- @active_resources ||= Dashboard::Action.active
- .resources
- .by_proposal(proposal)
- .order(required_supports: :asc, day_offset: :asc)
- end
-
def course
@course ||= Dashboard::Action.course_for(proposal)
end
diff --git a/app/helpers/proposals_dashboard_helper.rb b/app/helpers/proposals_dashboard_helper.rb
index f7144320a..dfac3b52f 100644
--- a/app/helpers/proposals_dashboard_helper.rb
+++ b/app/helpers/proposals_dashboard_helper.rb
@@ -56,18 +56,6 @@ module ProposalsDashboardHelper
controller_name == "dashboard" && action_name == "new_request" && dashboard_action&.id == id
end
- def resource_availability_label(resource)
- label = []
-
- label << t("dashboard.resource.required_days",
- days: resource.day_offset) if resource.day_offset > 0
- label << t("dashboard.resource.required_supports",
- supports: number_with_delimiter(resource.required_supports,
- delimiter: ".")) if resource.required_supports > 0
-
- safe_join label, h(" #{t("dashboard.resource.and")})") + tag(:br)
- end
-
def daily_selected_class
return nil if params[:group_by].blank?
@@ -86,21 +74,6 @@ module ProposalsDashboardHelper
"hollow"
end
- def resource_card_class(resource, proposal)
- return "alert" unless resource.active_for?(proposal)
- return "success" if resource.executed_for?(proposal)
-
- "primary"
- end
-
- def resource_tooltip(resource, proposal)
- return t("dashboard.resource.resource_locked") unless resource.active_for?(proposal)
- return t("dashboard.resource.view_resource") if resource.executed_for?(proposal)
- return t("dashboard.resource.resource_requested") if resource.requested_for?(proposal)
-
- t("dashboard.resource.request_resource")
- end
-
def proposed_action_description(proposed_action)
sanitize proposed_action.description.truncate(200)
end
diff --git a/app/views/dashboard/progress.html.erb b/app/views/dashboard/progress.html.erb
index e4378e7f7..6b0d75816 100644
--- a/app/views/dashboard/progress.html.erb
+++ b/app/views/dashboard/progress.html.erb
@@ -38,4 +38,4 @@
<%= render "summary_recommended_actions" %>
<% end %>
-<%= render Dashboard::ResourcesComponent.new(active_resources, proposal) %>
+<%= render Dashboard::ResourcesComponent.new(proposal, @new_actions_since_last_login) %>