diff --git a/app/components/admin/proposals/index_component.html.erb b/app/components/admin/proposals/index_component.html.erb
new file mode 100644
index 000000000..d1637739d
--- /dev/null
+++ b/app/components/admin/proposals/index_component.html.erb
@@ -0,0 +1,39 @@
+<% provide :main_class, "admin-proposals-index" %>
+
+<%= header %>
+
+<% if proposals.any? %>
+ <%= render Admin::SearchComponent.new(label: t("admin.shared.search.label.proposals")) %>
+
+
<%= page_entries_info proposals %>
+
+
+
+
+ | <%= t("admin.proposals.index.id") %> |
+ <%= Proposal.human_attribute_name(:title) %> |
+ <%= t("admin.proposals.index.author") %> |
+ <%= t("admin.proposals.index.milestones") %> |
+ <%= t("admin.proposals.index.selected") %> |
+
+
+
+
+ <% proposals.each do |proposal| %>
+
+ | <%= proposal.id %> |
+ <%= link_to proposal.title, admin_proposal_path(proposal) %> |
+ <%= proposal.author.username %> |
+ <%= proposal.milestones.count %> |
+ <%= render Admin::Proposals::ToggleSelectionComponent.new(proposal) %> |
+
+ <% end %>
+
+
+
+ <%= paginate proposals %>
+<% else %>
+
+ <%= t("admin.proposals.index.no_proposals") %>
+
+<% end %>
diff --git a/app/components/admin/proposals/index_component.rb b/app/components/admin/proposals/index_component.rb
new file mode 100644
index 000000000..ba35ee196
--- /dev/null
+++ b/app/components/admin/proposals/index_component.rb
@@ -0,0 +1,12 @@
+class Admin::Proposals::IndexComponent < ApplicationComponent
+ include Header
+ attr_reader :proposals
+
+ def initialize(proposals)
+ @proposals = proposals
+ end
+
+ def title
+ t("admin.proposals.index.title")
+ end
+end
diff --git a/app/views/admin/proposals/index.html.erb b/app/views/admin/proposals/index.html.erb
index 27964da5b..06d6de765 100644
--- a/app/views/admin/proposals/index.html.erb
+++ b/app/views/admin/proposals/index.html.erb
@@ -1,41 +1 @@
-<% provide(:title) do %>
- <%= t("admin.header.title") %> - <%= t("admin.proposals.index.title") %>
-<% end %>
-
-<%= t("admin.proposals.index.title") %>
-
-<% if @proposals.any? %>
- <%= render Admin::SearchComponent.new(label: t("admin.shared.search.label.proposals")) %>
-
- <%= page_entries_info @proposals %>
-
-
-
-
- | <%= t("admin.proposals.index.id") %> |
- <%= Proposal.human_attribute_name(:title) %> |
- <%= t("admin.proposals.index.author") %> |
- <%= t("admin.proposals.index.milestones") %> |
- <%= t("admin.proposals.index.selected") %> |
-
-
-
-
- <% @proposals.each do |proposal| %>
-
- | <%= proposal.id %> |
- <%= link_to proposal.title, admin_proposal_path(proposal) %> |
- <%= proposal.author.username %> |
- <%= proposal.milestones.count %> |
- <%= render Admin::Proposals::ToggleSelectionComponent.new(proposal) %> |
-
- <% end %>
-
-
-
- <%= paginate @proposals %>
-<% else %>
-
- <%= t("admin.proposals.index.no_proposals") %>
-
-<% end %>
+<%= render Admin::Proposals::IndexComponent.new(@proposals) %>