We were using long, unique names because these methods used to be helper methods. Helper methods should have unique names because otherwise one method would overwrite the other. Now that we're using components, we can omit the `image_` and `document_` prefixes.
65 lines
1.8 KiB
Ruby
65 lines
1.8 KiB
Ruby
class Images::FieldsComponent < ApplicationComponent
|
|
attr_reader :f, :imageable
|
|
delegate :current_user, :render_image, to: :helpers
|
|
|
|
def initialize(f, imageable:)
|
|
@f = f
|
|
@imageable = imageable
|
|
end
|
|
|
|
private
|
|
|
|
def image
|
|
f.object
|
|
end
|
|
|
|
def file_name
|
|
image.attachment_file_name
|
|
end
|
|
|
|
def destroy_link
|
|
if !image.persisted? && image.cached_attachment.present?
|
|
link_to t("images.form.delete_button"),
|
|
direct_upload_destroy_path(
|
|
"direct_upload[resource_type]": image.imageable_type,
|
|
"direct_upload[resource_id]": image.imageable_id,
|
|
"direct_upload[resource_relation]": "image",
|
|
"direct_upload[cached_attachment]": image.cached_attachment
|
|
),
|
|
method: :delete,
|
|
remote: true,
|
|
class: "delete remove-cached-attachment"
|
|
else
|
|
link_to_remove_association t("images.form.delete_button"), f, class: "delete remove-image"
|
|
end
|
|
end
|
|
|
|
def file_field
|
|
klass = image.persisted? || image.cached_attachment.present? ? " hide" : ""
|
|
f.file_field :attachment,
|
|
label_options: { class: "button hollow #{klass}" },
|
|
accept: accepted_content_types_extensions,
|
|
class: "js-image-attachment",
|
|
data: {
|
|
url: direct_upload_path,
|
|
nested_image: true
|
|
}
|
|
end
|
|
|
|
def direct_upload_path
|
|
direct_uploads_path("direct_upload[resource_type]": imageable.class.name,
|
|
"direct_upload[resource_id]": imageable.id,
|
|
"direct_upload[resource_relation]": "image")
|
|
end
|
|
|
|
def accepted_content_types_extensions
|
|
Setting.accepted_content_types_for("images").map do |content_type|
|
|
if content_type == "jpg"
|
|
".jpg,.jpeg"
|
|
else
|
|
".#{content_type}"
|
|
end
|
|
end.join(",")
|
|
end
|
|
end
|