update preference field interface to be more clear

This commit is contained in:
Andy Brett
2020-09-17 08:27:45 -07:00
parent 73149dc695
commit 988abf7a8c
4 changed files with 17 additions and 9 deletions

View File

@@ -62,6 +62,10 @@ module Spree
end
end
# Here we show a text field for all string fields except when the field name ends in
# "_from_list", in that case we render a dropdown.
# In this specific case, to render the dropdown, the object provided must have a method named
# like "#{field}_values" that returns an array with the string options to be listed.
def preference_field_for_text_field(form, field, options, object)
if field.end_with?('_from_list') && object.respond_to?("#{field}_values")
list_values = object.__send__("#{field}_values")
@@ -102,13 +106,17 @@ module Spree
)
end
# maps each preference to a hash containing the label and field html.
# E.g. { :label => "<label>...", :field => "<select>..." }
def preference_fields(object, form)
return unless object.respond_to?(:preferences)
object.preferences.keys.map { |key|
[form.label("preferred_#{key}", Spree.t(key.to_s.gsub("_from_list", "")) + ": "),
preference_field_for(form, "preferred_#{key}",
{ type: object.preference_type(key) }, object)]
preference_label = form.label("preferred_#{key}",
Spree.t(key.to_s.gsub("_from_list", "")) + ": ").html_safe
preference_field = preference_field_for(form, "preferred_#{key}",
{ type: object.preference_type(key) }, object).html_safe
{ :label => preference_label, :field => preference_field }
}
end

View File

@@ -9,7 +9,7 @@
= f.fields_for :calculator do |calculator_form|
- fields = preference_fields(enterprise_fee.calculator, calculator_form)
- fields.each do |f|
= f[0].html_safe
= f[1].html_safe
= f[:label]
= f[:field]
= calculator_form_string

View File

@@ -13,6 +13,6 @@
- fields = preference_fields(@payment_method, payment_method_form)
- fields.each do |f|
.field.alpha.three.columns
= f[0].html_safe
= f[:label]
.field.omega.eight.columns
= f[1].html_safe
= f[:field]

View File

@@ -13,8 +13,8 @@
- fields = preference_fields(@object.calculator, calculator_form)
- fields.each do |f|
.field.alpha.three.columns
= f[0].html_safe
= f[:label]
.field.omega.eight.columns
= f[1].html_safe
= f[:field]
- if @object.calculator.respond_to?(:preferences)
%span.calculator-settings-warning.info.warning= t(:calculator_settings_warning)