132 lines
3.1 KiB
Ruby
132 lines
3.1 KiB
Ruby
# frozen_string_literal: true
|
||
|
||
class Attachment::GalleryItemComponent < ApplicationComponent
|
||
include GalleryHelper
|
||
attr_reader :attachment, :seen_at
|
||
|
||
def initialize(attachment:, gallery_demande: false, seen_at: nil)
|
||
@attachment = attachment
|
||
@gallery_demande = gallery_demande
|
||
@seen_at = seen_at
|
||
end
|
||
|
||
def blob
|
||
attachment.blob
|
||
end
|
||
|
||
def gallery_demande? = @gallery_demande
|
||
|
||
def libelle
|
||
if from_champ?
|
||
attachment.record.libelle
|
||
elsif from_messagerie?
|
||
'Pièce jointe au message'
|
||
elsif from_avis_externe?
|
||
'Pièce jointe à l’avis'
|
||
elsif from_justificatif_motivation?
|
||
'Pièce jointe à la décision'
|
||
end
|
||
end
|
||
|
||
def origin
|
||
case
|
||
when from_public_champ?
|
||
'Dossier usager'
|
||
when from_private_champ?
|
||
'Annotation privée'
|
||
when from_messagerie_expert?
|
||
'Messagerie (expert)'
|
||
when from_messagerie_instructeur?
|
||
'Messagerie (instructeur)'
|
||
when from_messagerie_usager?
|
||
'Messagerie (usager)'
|
||
when from_avis_externe_instructeur?
|
||
'Avis externe (instructeur)'
|
||
when from_avis_externe_expert?
|
||
'Avis externe (expert)'
|
||
when from_justificatif_motivation?
|
||
'Justificatif de décision'
|
||
end
|
||
end
|
||
|
||
def title
|
||
"#{libelle} -- #{sanitize(blob.filename.to_s)}"
|
||
end
|
||
|
||
def gallery_link(blob, &block)
|
||
if displayable_image?(blob)
|
||
link_to image_url(blob_url(attachment)), title: title, data: { src: blob.url }, class: 'gallery-link' do
|
||
yield
|
||
end
|
||
elsif displayable_pdf?(blob)
|
||
link_to blob.url, id: blob.id, data: { iframe: true, src: blob.url }, class: 'gallery-link', type: blob.content_type, title: title do
|
||
yield
|
||
end
|
||
end
|
||
end
|
||
|
||
def created_at
|
||
attachment.record.created_at
|
||
end
|
||
|
||
def updated?
|
||
from_public_champ? && updated_at > attachment.record.dossier.depose_at
|
||
end
|
||
|
||
def updated_at
|
||
blob.created_at
|
||
end
|
||
|
||
def badge_updated_class
|
||
class_names(
|
||
"fr-badge fr-badge--sm" => true,
|
||
"highlighted" => seen_at.present? && updated_at&.>(seen_at)
|
||
)
|
||
end
|
||
|
||
private
|
||
|
||
def from_champ?
|
||
attachment.record.class.in?([Champs::PieceJustificativeChamp, Champs::TitreIdentiteChamp])
|
||
end
|
||
|
||
def from_public_champ?
|
||
from_champ? && !attachment.record.private?
|
||
end
|
||
|
||
def from_private_champ?
|
||
from_champ? && attachment.record.private?
|
||
end
|
||
|
||
def from_messagerie?
|
||
attachment.record.is_a?(Commentaire)
|
||
end
|
||
|
||
def from_messagerie_instructeur?
|
||
from_messagerie? && attachment.record.instructeur.present?
|
||
end
|
||
|
||
def from_messagerie_expert?
|
||
from_messagerie? && attachment.record.expert.present?
|
||
end
|
||
|
||
def from_messagerie_usager?
|
||
from_messagerie? && attachment.record.instructeur.nil? && attachment.record.expert.nil?
|
||
end
|
||
|
||
def from_avis_externe?
|
||
attachment.record.is_a?(Avis)
|
||
end
|
||
|
||
def from_avis_externe_instructeur?
|
||
from_avis_externe? && attachment.name == 'introduction_file'
|
||
end
|
||
|
||
def from_avis_externe_expert?
|
||
from_avis_externe? && attachment.name == 'piece_justificative_file'
|
||
end
|
||
|
||
def from_justificatif_motivation?
|
||
attachment.name == 'justificatif_motivation'
|
||
end
|
||
end
|