app/components/attachable/fields_component.rb
class Attachable::FieldsComponent < ApplicationComponent
attr_reader :f, :resource_type, :resource_id, :relation_name
use_helpers :current_user, :render_image
def initialize(f, resource_type:, resource_id:, relation_name:)
@f = f
@resource_type = resource_type
@resource_id = resource_id
@relation_name = relation_name
end
private
def attachable
f.object
end
def singular_name
attachable.model_name.singular
end
def plural_name
attachable.model_name.plural
end
def file_name
attachable.attachment_file_name
end
def destroy_link
if !attachable.persisted? && attachable.cached_attachment.present?
link_to t("#{plural_name}.form.delete_button"), "#", class: "delete remove-cached-attachment"
else
link_to_remove_association remove_association_text, f, class: "delete remove-#{singular_name}"
end
end
def remove_association_text
if attachable.new_record?
t("documents.form.cancel_button")
else
t("#{plural_name}.form.delete_button")
end
end
def file_field
klass = attachable.persisted? || attachable.cached_attachment.present? ? " hide" : ""
f.file_field :attachment,
label_options: { class: "button hollow #{klass}" },
accept: accepted_content_types_extensions,
class: "js-#{singular_name}-attachment",
data: { url: direct_upload_path }
end
def direct_upload_path
direct_uploads_path("direct_upload[resource_type]": resource_type,
"direct_upload[resource_id]": resource_id,
"direct_upload[resource_relation]": relation_name)
end
def accepted_content_types_extensions
Setting.accepted_content_types_for(plural_name).map do |content_type|
if content_type == "jpg"
".jpg,.jpeg"
else
".#{content_type}"
end
end.join(",")
end
end