From 70c1d30fe4e47725096b153b26b86fe82dcb7cc8 Mon Sep 17 00:00:00 2001 From: Benoit Queyron <72251526+Benoit-MINT@users.noreply.github.com> Date: Thu, 27 Jun 2024 14:05:48 +0200 Subject: [PATCH] disabled attribut on input --- app/components/attachment/edit_component.rb | 8 ++++++-- .../multiple_component/multiple_component.html.haml | 4 ++-- app/controllers/attachments_controller.rb | 1 + app/views/attachments/destroy.turbo_stream.haml | 6 ++++++ 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/app/components/attachment/edit_component.rb b/app/components/attachment/edit_component.rb index e096591ef..d78aeba91 100644 --- a/app/components/attachment/edit_component.rb +++ b/app/components/attachment/edit_component.rb @@ -9,8 +9,9 @@ class Attachment::EditComponent < ApplicationComponent alias as_multiple? as_multiple EXTENSIONS_ORDER = ['jpeg', 'png', 'pdf', 'zip'].freeze + DEFAULT_MAX_ATTACHMENTS = 10 - def initialize(champ: nil, auto_attach_url: nil, attached_file:, direct_upload: true, index: 0, as_multiple: false, view_as: :link, user_can_destroy: true, user_can_replace: false, attachments: [], **kwargs) + def initialize(champ: nil, auto_attach_url: nil, attached_file:, direct_upload: true, index: 0, as_multiple: false, view_as: :link, user_can_destroy: true, user_can_replace: false, attachments: [], max: nil, **kwargs) @champ = champ @attached_file = attached_file @direct_upload = direct_upload @@ -24,6 +25,7 @@ class Attachment::EditComponent < ApplicationComponent @attachments = attachments.presence || (kwargs.key?(:attachment) ? [kwargs.delete(:attachment)] : []) @attachments << attached_file.attachment if attached_file.respond_to?(:attachment) && @attachments.empty? @attachments.compact! + @max = max || DEFAULT_MAX_ATTACHMENTS # Utilisation du premier attachement comme référence pour la rétrocompatibilité @attachment = @attachments.first @@ -54,7 +56,7 @@ class Attachment::EditComponent < ApplicationComponent end def destroy_attachment_path - attachment_path(champ_id: champ&.public_id) + attachment_path(champ_id: champ&.public_id, champ: @champ) end def attachment_input_class @@ -63,6 +65,7 @@ class Attachment::EditComponent < ApplicationComponent def file_field_options track_issue_with_missing_validators if missing_validators? + options = { class: class_names("fr-upload attachment-input": true, "#{attachment_input_class}": true, "hidden": persisted?), direct_upload: @direct_upload, @@ -76,6 +79,7 @@ class Attachment::EditComponent < ApplicationComponent options.merge!(has_content_type_validator? ? { accept: accept_content_type } : {}) options[:multiple] = true if as_multiple? + options[:disabled] = true if @index >= @max options end diff --git a/app/components/attachment/multiple_component/multiple_component.html.haml b/app/components/attachment/multiple_component/multiple_component.html.haml index 74abdf23c..40b94577f 100644 --- a/app/components/attachment/multiple_component/multiple_component.html.haml +++ b/app/components/attachment/multiple_component/multiple_component.html.haml @@ -7,8 +7,8 @@ %li{ id: dom_id(attachment) } = render Attachment::EditComponent.new(champ:, attached_file:, attachment:, index:, view_as:, user_can_destroy:, form_object_name:) - %div{ id: empty_component_id, class: class_names("hidden": !can_attach_next?), data: { turbo_force: :server } } - = render Attachment::EditComponent.new(champ:, as_multiple: champ.nil?, attached_file:, attachment: nil, index: attachments_count, user_can_destroy:, form_object_name:) + %div{ id: empty_component_id, data: { turbo_force: :server } } + = render Attachment::EditComponent.new(champ:, as_multiple: champ.nil?, attached_file:, attachment: nil, index: attachments_count, user_can_destroy:, form_object_name:, max: @max) // single poll and refresh message for all attachments = render Attachment::PendingPollComponent.new(attachments: attachments, poll_url:, context: poll_context) diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb index 410c64212..449f3050c 100644 --- a/app/controllers/attachments_controller.rb +++ b/app/controllers/attachments_controller.rb @@ -22,6 +22,7 @@ class AttachmentsController < ApplicationController flash.notice = 'La pièce jointe a bien été supprimée.' @champ_id = params[:champ_id] + @champ = Champ.find(params[:champ]) if params[:champ] respond_to do |format| format.turbo_stream diff --git a/app/views/attachments/destroy.turbo_stream.haml b/app/views/attachments/destroy.turbo_stream.haml index 48cee0bc3..beebaa232 100644 --- a/app/views/attachments/destroy.turbo_stream.haml +++ b/app/views/attachments/destroy.turbo_stream.haml @@ -5,3 +5,9 @@ = turbo_stream.focus_all "#attachment-multiple-empty-#{@champ_id} input" = turbo_stream.show_all ".attachment-input-#{@attachment.id}" + +- if @champ + = fields_for @champ.input_name, @champ do |form| + = turbo_stream.replace @champ.input_group_id do + = render EditableChamp::EditableChampComponent.new champ: @champ, form: form + = turbo_stream.focus_all "#attachment-multiple-empty-#{@champ_id} input"