ffd1a15d91
Co-authored-by: mfo <mfo@users.noreply.github.com> Co-authored-by: LeSim <mail@simon.lehericey.net>
45 lines
1.3 KiB
Ruby
45 lines
1.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class ExportTemplate::ChampsComponent < ApplicationComponent
|
|
attr_reader :export_template, :title
|
|
|
|
def initialize(title, export_template, types_de_champ)
|
|
@title = title
|
|
@export_template = export_template
|
|
@types_de_champ = types_de_champ
|
|
end
|
|
|
|
def historical_libelle(column)
|
|
historical_exported_column = export_template.exported_columns.find { _1.column == column }
|
|
if historical_exported_column
|
|
historical_exported_column.libelle
|
|
else
|
|
column.label
|
|
end
|
|
end
|
|
|
|
def sections
|
|
@types_de_champ
|
|
.reject { _1.header_section? && _1.header_section_level_value > 1 }
|
|
.slice_before(&:header_section?)
|
|
.filter_map do |(head, *rest)|
|
|
libelle = head.libelle if head.header_section?
|
|
columns = [head.header_section? ? nil : head, *rest].compact.map { tdc_to_columns(_1) }
|
|
{ libelle:, columns: } if columns.present?
|
|
end
|
|
end
|
|
|
|
def component_prefix
|
|
title.parameterize
|
|
end
|
|
|
|
private
|
|
|
|
def tdc_to_columns(type_de_champ)
|
|
prefix = type_de_champ.repetition? ? "Bloc répétable" : nil
|
|
type_de_champ.columns(procedure: export_template.procedure, prefix:).map do |column|
|
|
ExportedColumn.new(column:,
|
|
libelle: historical_libelle(column))
|
|
end
|
|
end
|
|
end
|