diff --git a/app/components/documents/fields_component.html.erb b/app/components/documents/fields_component.html.erb new file mode 100644 index 000000000..724711eb1 --- /dev/null +++ b/app/components/documents/fields_component.html.erb @@ -0,0 +1,31 @@ +
+ <%= f.hidden_field :id %> + <%= f.hidden_field :user_id, value: current_user.id %> + <%= f.hidden_field :cached_attachment %> + +
+ <%= f.text_field :title, placeholder: t("documents.form.title_placeholder") %> +
+ +
+
+ <%= render_attachment(f.object) %> +
+
+ <%= render_destroy_document_link(f.object) %> +
+
+ +
+

+ <%= document_attachment_file_name(f.object) %> +

+
+ +
+
+
+ +
+ +
diff --git a/app/components/documents/fields_component.rb b/app/components/documents/fields_component.rb new file mode 100644 index 000000000..b5f2384eb --- /dev/null +++ b/app/components/documents/fields_component.rb @@ -0,0 +1,53 @@ +class Documents::FieldsComponent < ApplicationComponent + attr_reader :f + delegate :current_user, to: :helpers + + def initialize(f) + @f = f + end + + private + + def document_attachment_file_name(document) + document.attachment_file_name + end + + def render_destroy_document_link(document) + if !document.persisted? && document.cached_attachment.present? + link_to t("documents.form.delete_button"), + direct_upload_destroy_path( + "direct_upload[resource_type]": document.documentable_type, + "direct_upload[resource_id]": document.documentable_id, + "direct_upload[resource_relation]": "documents", + "direct_upload[cached_attachment]": document.cached_attachment + ), + method: :delete, + remote: true, + class: "delete remove-cached-attachment" + else + link_to_remove_association document.new_record? ? t("documents.form.cancel_button") : t("documents.form.delete_button"), f, class: "delete remove-document" + end + end + + def render_attachment(document) + klass = document.persisted? || document.cached_attachment.present? ? " hide" : "" + f.file_field :attachment, + label_options: { class: "button hollow #{klass}" }, + accept: accepted_content_types_extensions(document.documentable_type.constantize), + class: "js-document-attachment", + data: { + url: document_direct_upload_path(document), + nested_document: true + } + end + + def document_direct_upload_path(document) + direct_uploads_path("direct_upload[resource_type]": document.documentable_type, + "direct_upload[resource_id]": document.documentable_id, + "direct_upload[resource_relation]": "documents") + end + + def accepted_content_types_extensions(documentable_class) + Setting.accepted_content_types_for("documents").map { |content_type| ".#{content_type}" }.join(",") + end +end diff --git a/app/helpers/documentables_helper.rb b/app/helpers/documentables_helper.rb index 74d7ccf0d..0b0a5e551 100644 --- a/app/helpers/documentables_helper.rb +++ b/app/helpers/documentables_helper.rb @@ -15,10 +15,6 @@ module DocumentablesHelper documentable_class.accepted_content_types end - def accepted_content_types_extensions(documentable_class) - Setting.accepted_content_types_for("documents").map { |content_type| ".#{content_type}" }.join(",") - end - def documentable_humanized_accepted_content_types(documentable_class) Setting.accepted_content_types_for("documents").join(", ") end diff --git a/app/helpers/documents_helper.rb b/app/helpers/documents_helper.rb index 79b052a47..3ff564a03 100644 --- a/app/helpers/documents_helper.rb +++ b/app/helpers/documents_helper.rb @@ -1,43 +1,4 @@ module DocumentsHelper - def document_attachment_file_name(document) - document.attachment_file_name - end - - def render_destroy_document_link(builder, document) - if !document.persisted? && document.cached_attachment.present? - link_to t("documents.form.delete_button"), - direct_upload_destroy_path( - "direct_upload[resource_type]": document.documentable_type, - "direct_upload[resource_id]": document.documentable_id, - "direct_upload[resource_relation]": "documents", - "direct_upload[cached_attachment]": document.cached_attachment - ), - method: :delete, - remote: true, - class: "delete remove-cached-attachment" - else - link_to_remove_association document.new_record? ? t("documents.form.cancel_button") : t("documents.form.delete_button"), builder, class: "delete remove-document" - end - end - - def render_attachment(builder, document) - klass = document.persisted? || document.cached_attachment.present? ? " hide" : "" - builder.file_field :attachment, - label_options: { class: "button hollow #{klass}" }, - accept: accepted_content_types_extensions(document.documentable_type.constantize), - class: "js-document-attachment", - data: { - url: document_direct_upload_path(document), - nested_document: true - } - end - - def document_direct_upload_path(document) - direct_uploads_path("direct_upload[resource_type]": document.documentable_type, - "direct_upload[resource_id]": document.documentable_id, - "direct_upload[resource_relation]": "documents") - end - def document_item_link(document) info_text = "#{document.humanized_content_type} | #{number_to_human_size(document.attachment_file_size)}" diff --git a/app/views/documents/_document_fields.html.erb b/app/views/documents/_document_fields.html.erb index 8f532c71b..6e452d9b2 100644 --- a/app/views/documents/_document_fields.html.erb +++ b/app/views/documents/_document_fields.html.erb @@ -1,31 +1 @@ -
- <%= f.hidden_field :id %> - <%= f.hidden_field :user_id, value: current_user.id %> - <%= f.hidden_field :cached_attachment %> - -
- <%= f.text_field :title, placeholder: t("documents.form.title_placeholder") %> -
- -
-
- <%= render_attachment(f, f.object) %> -
-
- <%= render_destroy_document_link(f, f.object) %> -
-
- -
-

- <%= document_attachment_file_name(f.object) %> -

-
- -
-
-
- -
- -
+<%= render Documents::FieldsComponent.new(f) %> diff --git a/app/views/documents/_nested_documents.html.erb b/app/views/documents/_nested_documents.html.erb index d4f80dd8e..e706b0446 100644 --- a/app/views/documents/_nested_documents.html.erb +++ b/app/views/documents/_nested_documents.html.erb @@ -4,7 +4,7 @@
<%= f.fields_for :documents do |documents_builder| %> - <%= render "documents/document_fields", f: documents_builder %> + <%= render Documents::FieldsComponent.new(documents_builder) %> <% end %>