Move nested documents partial to a component

This commit is contained in:
Javi Martín
2021-07-11 21:22:11 +02:00
parent 629df5ab9b
commit c9113041c0
4 changed files with 53 additions and 40 deletions

View File

@@ -0,0 +1,24 @@
<div class="documents-list">
<%= f.label :documents, t("documents.form.title") %>
<p class="help-text"><%= documentables_note %></p>
<div id="nested-documents" data-max-documents-allowed="<%= documentable.class.max_documents_allowed %>">
<%= f.fields_for :documents do |documents_builder| %>
<%= render Documents::FieldsComponent.new(documents_builder) %>
<% end %>
</div>
<%= link_to_add_association t("documents.form.add_new_document"), f, :documents,
partial: "documents/document_fields",
id: "new_document_link",
class: "button upload-document
#{"hide" if max_documents_allowed?}",
data: {
association_insertion_node: "#nested-documents",
association_insertion_method: "append"
} %>
<div id="max-documents-notice" class="max-documents-notice callout primary text-center <%= "hide" unless max_documents_allowed? %>">
<%= sanitize(t("documents.max_documents_allowed_reached")) %>
</div>
</div>

View File

@@ -0,0 +1,28 @@
class Documents::NestedComponent < ApplicationComponent
attr_reader :f
delegate :documentable_humanized_accepted_content_types, :max_file_size, to: :helpers
def initialize(f)
@f = f
end
private
def documentable
f.object
end
def max_documents_allowed
documentable.class.max_documents_allowed
end
def documentables_note
t "documents.form.note", max_documents_allowed: max_documents_allowed,
accepted_content_types: documentable_humanized_accepted_content_types(documentable.class),
max_file_size: max_file_size(documentable.class)
end
def max_documents_allowed?
documentable.documents.count >= documentable.class.max_documents_allowed
end
end

View File

@@ -1,8 +1,4 @@
module DocumentablesHelper module DocumentablesHelper
def max_documents_allowed(documentable)
documentable.class.max_documents_allowed
end
def max_file_size(documentable_class) def max_file_size(documentable_class)
documentable_class.max_file_size / Numeric::MEGABYTE documentable_class.max_file_size / Numeric::MEGABYTE
end end
@@ -14,14 +10,4 @@ module DocumentablesHelper
def documentable_humanized_accepted_content_types(documentable_class) def documentable_humanized_accepted_content_types(documentable_class)
Setting.accepted_content_types_for("documents").join(", ") Setting.accepted_content_types_for("documents").join(", ")
end end
def documentables_note(documentable)
t "documents.form.note", max_documents_allowed: max_documents_allowed(documentable),
accepted_content_types: documentable_humanized_accepted_content_types(documentable.class),
max_file_size: max_file_size(documentable.class)
end
def max_documents_allowed?(documentable)
documentable.documents.count >= documentable.class.max_documents_allowed
end
end end

View File

@@ -1,26 +1 @@
<% documentable = f.object %> <%= render Documents::NestedComponent.new(f) %>
<div class="documents-list">
<%= f.label :documents, t("documents.form.title") %>
<p class="help-text"><%= documentables_note(documentable) %></p>
<div id="nested-documents" data-max-documents-allowed="<%= documentable.class.max_documents_allowed %>">
<%= f.fields_for :documents do |documents_builder| %>
<%= render Documents::FieldsComponent.new(documents_builder) %>
<% end %>
</div>
<%= link_to_add_association t("documents.form.add_new_document"), f, :documents,
partial: "documents/document_fields",
id: "new_document_link",
class: "button upload-document
#{"hide" if max_documents_allowed?(documentable)}",
data: {
association_insertion_node: "#nested-documents",
association_insertion_method: "append"
} %>
<div id="max-documents-notice" class="max-documents-notice callout primary text-center <%= "hide" unless max_documents_allowed?(documentable) %>">
<%= sanitize(t("documents.max_documents_allowed_reached")) %>
</div>
</div>