diff --git a/app/components/images/nested_component.html.erb b/app/components/images/nested_component.html.erb
new file mode 100644
index 000000000..fc788c8bd
--- /dev/null
+++ b/app/components/images/nested_component.html.erb
@@ -0,0 +1,22 @@
+<%= f.label image_fields, t("images.form.title") %>
+
<%= imageables_note %>
+
+
+ <%= f.fields_for image_fields do |image_builder| %>
+ <%= render Images::FieldsComponent.new(image_builder, imageable: imageable) %>
+ <% end %>
+
+
+<%= link_to_add_association t("images.form.add_new_image"), f, image_fields,
+ force_non_association_create: true,
+ partial: "images/image_fields",
+ id: "new_image_link",
+ class: "button upload-image
+ #{"hide" if image_fields == :image && imageable.image.present?}",
+ render_options: {
+ locals: { imageable: imageable }
+ },
+ data: {
+ association_insertion_node: "#nested-image",
+ association_insertion_method: "append"
+ } %>
diff --git a/app/components/images/nested_component.rb b/app/components/images/nested_component.rb
new file mode 100644
index 000000000..04d4dc5d4
--- /dev/null
+++ b/app/components/images/nested_component.rb
@@ -0,0 +1,20 @@
+class Images::NestedComponent < ApplicationComponent
+ attr_reader :f, :image_fields
+ delegate :imageable_humanized_accepted_content_types, :imageable_max_file_size, to: :helpers
+
+ def initialize(f, image_fields: :image)
+ @f = f
+ @image_fields = image_fields
+ end
+
+ private
+
+ def imageable
+ f.object
+ end
+
+ def imageables_note
+ t "images.form.note", accepted_content_types: imageable_humanized_accepted_content_types,
+ max_file_size: imageable_max_file_size
+ end
+end
diff --git a/app/helpers/imageables_helper.rb b/app/helpers/imageables_helper.rb
index b1734b4e2..c0e4c4893 100644
--- a/app/helpers/imageables_helper.rb
+++ b/app/helpers/imageables_helper.rb
@@ -14,9 +14,4 @@ module ImageablesHelper
def imageable_humanized_accepted_content_types
Setting.accepted_content_types_for("images").join(", ")
end
-
- def imageables_note(_imageable)
- t "images.form.note", accepted_content_types: imageable_humanized_accepted_content_types,
- max_file_size: imageable_max_file_size
- end
end
diff --git a/app/views/admin/poll/questions/answers/images/new.html.erb b/app/views/admin/poll/questions/answers/images/new.html.erb
index d271f2ca6..fa373fbc1 100644
--- a/app/views/admin/poll/questions/answers/images/new.html.erb
+++ b/app/views/admin/poll/questions/answers/images/new.html.erb
@@ -5,7 +5,7 @@
<%= render "shared/errors", resource: @answer %>
- <%= render "images/nested_image", f: f, image_fields: :images %>
+ <%= render Images::NestedComponent.new(f, image_fields: :images) %>
<%= f.submit t("admin.questions.answers.images.save_image"), class: "button success" %>
diff --git a/app/views/images/_nested_image.html.erb b/app/views/images/_nested_image.html.erb
index 4dacbede9..c55ccaa56 100644
--- a/app/views/images/_nested_image.html.erb
+++ b/app/views/images/_nested_image.html.erb
@@ -1,25 +1 @@
-<% image_fields ||= :image %>
-<% imageable = f.object %>
-
-<%= f.label image_fields, t("images.form.title") %>
-<%= imageables_note(imageable) %>
-
-
- <%= f.fields_for image_fields do |image_builder| %>
- <%= render Images::FieldsComponent.new(image_builder, imageable: imageable) %>
- <% end %>
-
-
-<%= link_to_add_association t("images.form.add_new_image"), f, image_fields,
- force_non_association_create: true,
- partial: "images/image_fields",
- id: "new_image_link",
- class: "button upload-image
- #{"hide" if image_fields == :image && imageable.image.present?}",
- render_options: {
- locals: { imageable: imageable }
- },
- data: {
- association_insertion_node: "#nested-image",
- association_insertion_method: "append"
- } %>
+<%= render Images::NestedComponent.new(f) %>