You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.1 KiB
40 lines
1.1 KiB
3 years ago
|
module QuestionAttributeHelper
|
||
|
def stimulus_html_attributes(question)
|
||
|
attribs = [
|
||
|
numeric_question_html_attributes(question),
|
||
|
conditional_html_attributes(question),
|
||
|
]
|
||
|
merge_controller_attributes(*attribs)
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def numeric_question_html_attributes(question)
|
||
|
return {} if question["fields-to-add"].blank? || question["result-field"].blank?
|
||
|
|
||
|
{
|
||
|
"data-controller": "numeric-question",
|
||
|
"data-action": "numeric-question#calculateFields",
|
||
|
"data-target": "case-log-#{question['result-field'].to_s.dasherize}-field",
|
||
|
"data-calculated": question["fields-to-add"].to_json,
|
||
|
}
|
||
|
end
|
||
|
|
||
|
def conditional_html_attributes(question)
|
||
|
return {} if question["conditional_for"].blank?
|
||
|
|
||
|
{
|
||
|
"data-controller": "conditional-question",
|
||
|
"data-action": "conditional-question#displayConditional",
|
||
|
"data-info": question["conditional_for"].to_json,
|
||
|
}
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def merge_controller_attributes(*args)
|
||
|
args.flat_map(&:keys).uniq.each_with_object({}) do |key, hsh|
|
||
|
hsh[key] = args.map { |a| a.fetch(key, "") }.join(" ").strip
|
||
|
hsh
|
||
|
end
|
||
|
end
|