demarches-normaliennes/app/components/procedure/chorus_form_component.rb
2024-07-05 09:36:33 +02:00

66 lines
1.9 KiB
Ruby

class Procedure::ChorusFormComponent < ApplicationComponent
attr_reader :procedure
def initialize(procedure:)
@procedure = procedure
@chorus_configuration = @procedure.chorus_configuration
end
def map_attribute_to_autocomplete_endpoint
{
centre_de_cout: data_sources_search_centre_couts_path,
domaine_fonctionnel: data_sources_search_domaine_fonct_path,
referentiel_de_programmation: data_sources_search_ref_programmation_path
}
end
def selected_key(attribute_name)
items(attribute_name).first&.dig(:value)
end
def items(attribute_name)
label = format_displayed_value(attribute_name)
data = format_hidden_value(attribute_name)
if label.present?
[{ label:, value: label, data: }]
else
[]
end
end
def format_displayed_value(attribute_name)
case attribute_name
when :centre_de_cout
ChorusConfiguration.format_centre_de_cout_label(@chorus_configuration.centre_de_cout)
when :domaine_fonctionnel
ChorusConfiguration.format_domaine_fonctionnel_label(@chorus_configuration.domaine_fonctionnel)
when :referentiel_de_programmation
ChorusConfiguration.format_ref_programmation_label(@chorus_configuration.referentiel_de_programmation)
else
raise 'unknown attribute_name'
end
end
def format_hidden_value(attribute_name)
case attribute_name
when :centre_de_cout
@chorus_configuration.centre_de_cout
when :domaine_fonctionnel
@chorus_configuration.domaine_fonctionnel
when :referentiel_de_programmation
@chorus_configuration.referentiel_de_programmation
else
raise 'unknown attribute_name'
end
end
def react_props(name, chorus_configuration_attribute, datasource_endpoint)
{
name:,
selected_key: selected_key(chorus_configuration_attribute),
items: items(chorus_configuration_attribute),
loader: datasource_endpoint,
id: chorus_configuration_attribute
}
end
end