demarches-normaliennes/app/models/champ_presentations/repetition_presentation.rb

59 lines
1.5 KiB
Ruby

# frozen_string_literal: true
class ChampPresentations::RepetitionPresentation < ChampPresentations::BasePresentation
attr_reader :libelle
attr_reader :rows
def initialize(libelle, rows)
@libelle = libelle
@rows = rows
end
def to_s
([libelle] + rows.map do |champs|
champs.map do |champ|
"#{champ.libelle} : #{champ}"
end.join("\n")
end).join("\n\n")
end
def to_tiptap_node
{
type: 'orderedList',
attrs: { class: 'tdc-repetition' },
content: rows.map do |champs|
{
type: 'listItem',
content: [
{
type: 'descriptionList',
content: champs.map do |champ|
[
{
type: 'descriptionTerm',
attrs: champ.blank? ? { class: 'invisible' } : nil, # still render libelle so width & alignment are preserved
content: [
{
type: 'text',
text: champ.libelle
}
]
}.compact,
{
type: 'descriptionDetails',
content: [
{
type: 'text',
text: champ.to_s
}
]
}
]
end.flatten
}
]
}
end
}
end
end