diff --git a/app/views/shared/_table_actions.html.erb b/app/components/admin/table_actions_component.html.erb similarity index 100% rename from app/views/shared/_table_actions.html.erb rename to app/components/admin/table_actions_component.html.erb diff --git a/app/components/admin/table_actions_component.rb b/app/components/admin/table_actions_component.rb new file mode 100644 index 000000000..c1a95dff7 --- /dev/null +++ b/app/components/admin/table_actions_component.rb @@ -0,0 +1,8 @@ +class Admin::TableActionsComponent < ApplicationComponent + attr_reader :record, :actions + + def initialize(record, actions: [:edit, :destroy]) + @record = record + @actions = actions + end +end diff --git a/app/views/admin/admin_notifications/index.html.erb b/app/views/admin/admin_notifications/index.html.erb index 14c88ab1c..48f132461 100644 --- a/app/views/admin/admin_notifications/index.html.erb +++ b/app/views/admin/admin_notifications/index.html.erb @@ -30,7 +30,7 @@ <% if admin_notification.draft? %> - <%= render "shared/table_actions", record: admin_notification, actions: [:edit, :destroy] %> + <%= render Admin::TableActionsComponent.new(admin_notification) %> <%= link_to t("admin.admin_notifications.index.preview"), admin_admin_notification_path(admin_notification), class: "button" %> diff --git a/app/views/admin/administrators/index.html.erb b/app/views/admin/administrators/index.html.erb index fa70f0bf0..4c5620b3a 100644 --- a/app/views/admin/administrators/index.html.erb +++ b/app/views/admin/administrators/index.html.erb @@ -29,7 +29,7 @@ <%= administrator.description %> - <%= render "shared/table_actions", record: administrator, actions: [:edit, :destroy] %> + <%= render Admin::TableActionsComponent.new(administrator) %> <% end %> diff --git a/app/views/admin/administrators/search.html.erb b/app/views/admin/administrators/search.html.erb index 07cd39cb3..671b6efb2 100644 --- a/app/views/admin/administrators/search.html.erb +++ b/app/views/admin/administrators/search.html.erb @@ -19,7 +19,7 @@ <%= user.email %> <% if user.administrator? && user.administrator.persisted? %> - <%= render "shared/table_actions", record: user.administrator, actions: [:destroy] %> + <%= render Admin::TableActionsComponent.new(user.administrator, actions: [:destroy]) %> <% else %> <%= link_to t("admin.administrators.administrator.add"), { controller: "admin/administrators", diff --git a/app/views/admin/budget_groups/index.html.erb b/app/views/admin/budget_groups/index.html.erb index 915635975..3634e4bdc 100644 --- a/app/views/admin/budget_groups/index.html.erb +++ b/app/views/admin/budget_groups/index.html.erb @@ -29,7 +29,7 @@ <%= link_to t("admin.budget_groups.headings_manage"), admin_budget_group_headings_path(@budget, group) %> - <%= render "shared/table_actions", record: group, actions: [:edit, :destroy] %> + <%= render Admin::TableActionsComponent.new(group) %> <% end %> diff --git a/app/views/admin/budget_headings/index.html.erb b/app/views/admin/budget_headings/index.html.erb index bed3d5688..bfb878ec9 100644 --- a/app/views/admin/budget_headings/index.html.erb +++ b/app/views/admin/budget_headings/index.html.erb @@ -34,7 +34,7 @@ <%= heading.allow_custom_content ? t("admin.shared.true_value") : t("admin.shared.false_value") %> - <%= render "shared/table_actions", record: heading, actions: [:edit, :destroy] %> + <%= render Admin::TableActionsComponent.new(heading) %> <% end %> diff --git a/app/views/admin/dashboard/actions/index.html.erb b/app/views/admin/dashboard/actions/index.html.erb index 2bf3a91d9..c6aee28f1 100644 --- a/app/views/admin/dashboard/actions/index.html.erb +++ b/app/views/admin/dashboard/actions/index.html.erb @@ -32,7 +32,7 @@ <%= number_with_delimiter(action.required_supports, delimiter: ".") %> <%= action.order %> - <%= render "shared/table_actions", record: action, actions: [:edit, :destroy] %> + <%= render Admin::TableActionsComponent.new(action) %> <% end %> diff --git a/app/views/admin/geozones/index.html.erb b/app/views/admin/geozones/index.html.erb index 3db62760a..31bae3f73 100644 --- a/app/views/admin/geozones/index.html.erb +++ b/app/views/admin/geozones/index.html.erb @@ -22,7 +22,7 @@ <%= geozone.census_code %> <%= geozone.html_map_coordinates %> - <%= render "shared/table_actions", record: geozone, actions: [:edit, :destroy] %> + <%= render Admin::TableActionsComponent.new(geozone) %> <% end %> diff --git a/app/views/admin/homepage/_card.html.erb b/app/views/admin/homepage/_card.html.erb index 2b1c64453..94025a7b1 100644 --- a/app/views/admin/homepage/_card.html.erb +++ b/app/views/admin/homepage/_card.html.erb @@ -17,6 +17,6 @@ <% end %> - <%= render "shared/table_actions", record: card, actions: [:edit, :destroy] %> + <%= render Admin::TableActionsComponent.new(card) %> diff --git a/app/views/admin/legislation/processes/index.html.erb b/app/views/admin/legislation/processes/index.html.erb index d57e85994..ddef4a150 100644 --- a/app/views/admin/legislation/processes/index.html.erb +++ b/app/views/admin/legislation/processes/index.html.erb @@ -35,7 +35,7 @@ <%= I18n.l process.end_date %> <%= process.total_comments %> - <%= render "shared/table_actions", record: process, actions: [:destroy] %> + <%= render Admin::TableActionsComponent.new(process, actions: [:destroy]) %> <% end %> diff --git a/app/views/admin/local_census_records/_local_census_record.html.erb b/app/views/admin/local_census_records/_local_census_record.html.erb index 22beea26e..85a32e39b 100644 --- a/app/views/admin/local_census_records/_local_census_record.html.erb +++ b/app/views/admin/local_census_records/_local_census_record.html.erb @@ -12,6 +12,6 @@ <%= local_census_record.postal_code %> - <%= render "shared/table_actions", record: local_census_record, actions: [:edit, :destroy] %> + <%= render Admin::TableActionsComponent.new(local_census_record) %> diff --git a/app/views/admin/managers/index.html.erb b/app/views/admin/managers/index.html.erb index 2dc28ffcb..62ca1f189 100644 --- a/app/views/admin/managers/index.html.erb +++ b/app/views/admin/managers/index.html.erb @@ -22,7 +22,7 @@ <%= manager.email %> - <%= render "shared/table_actions", record: manager, actions: [:destroy] %> + <%= render Admin::TableActionsComponent.new(manager, actions: [:destroy]) %> <% end %> diff --git a/app/views/admin/managers/search.html.erb b/app/views/admin/managers/search.html.erb index a03d7b72d..a834a9d80 100644 --- a/app/views/admin/managers/search.html.erb +++ b/app/views/admin/managers/search.html.erb @@ -19,7 +19,7 @@ <%= user.email %> <% if user.manager? && user.manager.persisted? %> - <%= render "shared/table_actions", record: user.manager, actions: [:destroy] %> + <%= render Admin::TableActionsComponent.new(user.manager, actions: [:destroy]) %> <% else %> <%= link_to t("admin.managers.manager.add"), { controller: "admin/managers", diff --git a/app/views/admin/milestone_statuses/index.html.erb b/app/views/admin/milestone_statuses/index.html.erb index e7bf0c720..1d66b8703 100644 --- a/app/views/admin/milestone_statuses/index.html.erb +++ b/app/views/admin/milestone_statuses/index.html.erb @@ -23,7 +23,7 @@ <%= status.description %> - <%= render "shared/table_actions", record: status, actions: [:edit, :destroy] %> + <%= render Admin::TableActionsComponent.new(status) %> <% end %> diff --git a/app/views/admin/moderators/index.html.erb b/app/views/admin/moderators/index.html.erb index 0594fb2d3..1c60e1d6d 100644 --- a/app/views/admin/moderators/index.html.erb +++ b/app/views/admin/moderators/index.html.erb @@ -24,7 +24,7 @@ <%= moderator.email %> - <%= render "shared/table_actions", record: moderator, actions: [:destroy] %> + <%= render Admin::TableActionsComponent.new(moderator, actions: [:destroy]) %> <% end %> diff --git a/app/views/admin/moderators/search.html.erb b/app/views/admin/moderators/search.html.erb index f07ab647b..3cda8819e 100644 --- a/app/views/admin/moderators/search.html.erb +++ b/app/views/admin/moderators/search.html.erb @@ -19,7 +19,7 @@ <%= user.email %> <% if user.moderator? && user.moderator.persisted? %> - <%= render "shared/table_actions", record: user.moderator, actions: [:destroy] %> + <%= render Admin::TableActionsComponent.new(user.moderator, actions: [:destroy]) %> <% else %> <%= link_to t("admin.moderators.moderator.add"), { controller: "admin/moderators", diff --git a/app/views/admin/newsletters/index.html.erb b/app/views/admin/newsletters/index.html.erb index a1ac52803..f9cf9b604 100644 --- a/app/views/admin/newsletters/index.html.erb +++ b/app/views/admin/newsletters/index.html.erb @@ -29,7 +29,7 @@ <% end %> - <%= render "shared/table_actions", record: newsletter, actions: [:edit, :destroy] %> + <%= render Admin::TableActionsComponent.new(newsletter) %> <%= link_to t("admin.newsletters.index.preview"), admin_newsletter_path(newsletter), class: "button" %> diff --git a/app/views/admin/poll/polls/_questions.html.erb b/app/views/admin/poll/polls/_questions.html.erb index 6aacb275e..59964d6e6 100644 --- a/app/views/admin/poll/polls/_questions.html.erb +++ b/app/views/admin/poll/polls/_questions.html.erb @@ -32,7 +32,7 @@ <%= link_to t("admin.polls.show.edit_answers"), admin_question_path(question), class: "button hollow" %> - <%= render "shared/table_actions", record: question, actions: [:edit, :destroy] %> + <%= render Admin::TableActionsComponent.new(question) %> <% end %> diff --git a/app/views/admin/poll/questions/_questions.html.erb b/app/views/admin/poll/questions/_questions.html.erb index 0099b3c10..784d3e73b 100644 --- a/app/views/admin/poll/questions/_questions.html.erb +++ b/app/views/admin/poll/questions/_questions.html.erb @@ -27,7 +27,7 @@ <% end %> - <%= render "shared/table_actions", record: question, actions: [:edit, :destroy] %> + <%= render Admin::TableActionsComponent.new(question) %> <% end %> diff --git a/app/views/admin/poll/questions/answers/videos/index.html.erb b/app/views/admin/poll/questions/answers/videos/index.html.erb index d74762dda..1a7d41402 100644 --- a/app/views/admin/poll/questions/answers/videos/index.html.erb +++ b/app/views/admin/poll/questions/answers/videos/index.html.erb @@ -29,7 +29,7 @@ <%= video.title %> <%= link_to "#{video.url}", video.url %> - <%= render "shared/table_actions", record: video, actions: [:edit, :destroy] %> + <%= render Admin::TableActionsComponent.new(video) %> <% end %> diff --git a/app/views/admin/progress_bars/_progress_bars.html.erb b/app/views/admin/progress_bars/_progress_bars.html.erb index e0d87e3ee..3615342b9 100644 --- a/app/views/admin/progress_bars/_progress_bars.html.erb +++ b/app/views/admin/progress_bars/_progress_bars.html.erb @@ -36,7 +36,7 @@ <%= number_to_percentage(progress_bar.percentage, strip_insignificant_zeros: true) %> - <%= render "shared/table_actions", record: progress_bar, actions: [:edit, :destroy] %> + <%= render Admin::TableActionsComponent.new(progress_bar) %> <% end %> diff --git a/app/views/admin/valuator_groups/_group.html.erb b/app/views/admin/valuator_groups/_group.html.erb index ea67ffd76..4de3e2e03 100644 --- a/app/views/admin/valuator_groups/_group.html.erb +++ b/app/views/admin/valuator_groups/_group.html.erb @@ -6,6 +6,6 @@ <%= group.valuators.count %> - <%= render "shared/table_actions", record: group, actions: [:edit, :destroy] %> + <%= render Admin::TableActionsComponent.new(group) %> diff --git a/app/views/admin/valuators/_valuator_row.html.erb b/app/views/admin/valuators/_valuator_row.html.erb index 7b0ce40bf..a93d492d7 100644 --- a/app/views/admin/valuators/_valuator_row.html.erb +++ b/app/views/admin/valuators/_valuator_row.html.erb @@ -19,6 +19,6 @@ <%= valuator_abilities(valuator) %> - <%= render "shared/table_actions", record: valuator, actions: [:edit, :destroy] %> + <%= render Admin::TableActionsComponent.new(valuator) %> diff --git a/spec/components/admin/table_actions_component_spec.rb b/spec/components/admin/table_actions_component_spec.rb new file mode 100644 index 000000000..d4161b2d2 --- /dev/null +++ b/spec/components/admin/table_actions_component_spec.rb @@ -0,0 +1,29 @@ +require "rails_helper" + +describe Admin::TableActionsComponent, type: :component do + let(:record) { create(:banner) } + + it "renders links to edit and destroy a record by default" do + render_inline Admin::TableActionsComponent.new(record) + + expect(page).to have_css "a", count: 2 + expect(page).to have_css "a[href*='edit']", text: "Edit" + expect(page).to have_css "a[data-method='delete']", text: "Delete" + end + + context "actions parameter is passed" do + it "renders a link to edit a record if passed" do + render_inline Admin::TableActionsComponent.new(record, actions: [:edit]) + + expect(page).to have_link "Edit" + expect(page).not_to have_link "Delete" + end + + it "renders a link to destroy a record if passed" do + render_inline Admin::TableActionsComponent.new(record, actions: [:destroy]) + + expect(page).to have_link "Delete" + expect(page).not_to have_link "Edit" + end + end +end