Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ETQ usager: je ne peux ajouter qu'une unique PJ pour les anciennes procédures qui l'exigent #10511

Merged
merged 7 commits into from
Jul 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions app/components/attachment/edit_component.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ class Attachment::EditComponent < ApplicationComponent

EXTENSIONS_ORDER = ['jpeg', 'png', 'pdf', 'zip'].freeze

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
Expand All @@ -24,6 +24,7 @@ def initialize(champ: nil, auto_attach_url: nil, attached_file:, direct_upload:
@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

# Utilisation du premier attachement comme référence pour la rétrocompatibilité
@attachment = @attachments.first
Expand Down Expand Up @@ -54,7 +55,7 @@ def attachment_path(**args)
end

def destroy_attachment_path
attachment_path(champ_id: champ&.public_id)
attachment_path(dossier_id: champ&.dossier_id, stable_id: champ&.stable_id, row_id: champ&.row_id)
end

def attachment_input_class
Expand All @@ -63,6 +64,7 @@ def attachment_input_class

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,
Expand All @@ -76,6 +78,7 @@ def file_field_options

options.merge!(has_content_type_validator? ? { accept: accept_content_type } : {})
options[:multiple] = true if as_multiple?
options[:disabled] = true if @max && @index >= @max

options
end
Expand Down
4 changes: 0 additions & 4 deletions app/components/attachment/multiple_component.rb
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,6 @@ def each_attachment(&block)
@attachments.each_with_index(&block)
end

def can_attach_next?
@attachments.count < @max
end

def empty_component_id
champ.present? ? "attachment-multiple-empty-#{champ.public_id}" : "attachment-multiple-empty-generic"
end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
9 changes: 8 additions & 1 deletion app/controllers/attachments_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,18 @@ def destroy
@attachment.purge_later
flash.notice = 'La pièce jointe a bien été supprimée.'

@champ_id = params[:champ_id]
@champ = find_champ if params[:dossier_id]

respond_to do |format|
format.turbo_stream
format.html { redirect_back(fallback_location: root_url) }
end
end

private

def find_champ
dossier = policy_scope(Dossier).includes(:champs).find(params[:dossier_id])
dossier.champs.find_by(stable_id: params[:stable_id], row_id: params[:row_id])
end
end
10 changes: 6 additions & 4 deletions app/views/attachments/destroy.turbo_stream.haml
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
= turbo_stream.remove dom_id(@attachment, :persisted_row)

- if @champ_id
= turbo_stream.show "attachment-multiple-empty-#{@champ_id}"
= 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.public_id} input"
4 changes: 2 additions & 2 deletions spec/components/attachment/multiple_component_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,8 @@
context 'max attachments' do
let(:kwargs) { { max: 1 } }

it 'does not render visible input file where max attachments has been reached' do
expect(subject).to have_selector('.hidden input[type=file]')
it 'renders a disabled input file where max attachments has been reached' do
expect(subject).to have_selector('input[type=file][disabled]')
end
end

Expand Down
Loading