Files
grecia/app/components/attachable/fields_component.rb
Javi Martín 1d955b7a20 Simplify using helper methods in components
The `use_helpers` method was added in ViewComponent 3.8.0, and it's
included by default in all components since version 3.11.0.

Note we sometimes delegated the `can?` method to the controller instead
of the helpers, for no particularly reason. We're unifying that code as
well.
2024-03-02 17:34:25 +01:00

71 lines
2.0 KiB
Ruby

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