class EditableChamp::EditableChampComponent < ApplicationComponent include StringToHtmlHelper def initialize(form:, champ:, seen_at: nil) @form, @champ, @seen_at = form, champ, seen_at end private def has_label?(champ) types_without_label = [TypeDeChamp.type_champs.fetch(:header_section), TypeDeChamp.type_champs.fetch(:explication)] !types_without_label.include?(@champ.type_champ) end def component_class "EditableChamp::#{@champ.type_champ.camelcase}Component".constantize end def html_options { class: "editable-champ-#{@champ.type_champ} #{'hidden' if !@champ.visible?}", id: @champ.input_group_id, data: { controller: stimulus_controller } } end def stimulus_controller if !@champ.repetition? && @champ.fillable? # This is an editable champ. Lets find what controllers it might need. controllers = [] # This is a public champ – it can have an autosave controller. if @champ.public? controllers << 'autosave' end # This is a dropdown champ. Activate special behaviours it might have. if @champ.simple_drop_down_list? || @champ.linked_drop_down_list? controllers << 'champ-dropdown' end controllers.join(' ') end end end