From 1f97a996f895075fac96d11b828d336ff3d36d6a Mon Sep 17 00:00:00 2001 From: taitus Date: Fri, 27 Jun 2025 10:25:01 +0200 Subject: [PATCH] Move resource partial to a component We're renaming it to ActiveResource in order to better differentiate it from the DefaultResource component. --- .../active_resource_component.html.erb} | 14 +++---- .../dashboard/active_resource_component.rb | 37 +++++++++++++++++++ .../dashboard/resources_component.html.erb | 4 +- .../dashboard/resources_component.rb | 13 +++++-- app/controllers/dashboard_controller.rb | 9 +---- app/helpers/proposals_dashboard_helper.rb | 27 -------------- app/views/dashboard/progress.html.erb | 2 +- 7 files changed, 57 insertions(+), 49 deletions(-) rename app/{views/dashboard/_resource.html.erb => components/dashboard/active_resource_component.html.erb} (72%) create mode 100644 app/components/dashboard/active_resource_component.rb 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) %>