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) %>