demarches-normaliennes/app/components/export_template/champs_component.rb

46 lines
1.3 KiB
Ruby
Raw Permalink Normal View History

# 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