lib/ecoportal/api/v2/page/component/selection_field.rb in ecoportal-api-oozes-0.5.7 vs lib/ecoportal/api/v2/page/component/selection_field.rb in ecoportal-api-oozes-0.5.8
- old
+ new
@@ -31,9 +31,45 @@
else
selected&.value
end
end
+ # a server bug prevents to add new options to an existing field
+ def add_option(name:, value:, pos: NOT_USED, before: NOT_USED, after: NOT_USED)
+ opt_doc = Ecoportal::API::V2::Page::Component::SelectionOption.new_doc
+ options.upsert!(opt_doc, pos: pos, before: before, after: after) do |option|
+ option.name = name
+ option.value = value
+ if prev = previous_option(option)
+ option.weight = prev.weight
+ end
+ yield(option) if block_given?
+ fix_option_weights!
+ end
+ end
+
+ def ordered_options
+ options.each_with_index.sort_by do |option, index|
+ (option.weight >= 9999) ? [index, index] : [option.weight, index]
+ end.map(&:first)
+ end
+
+ private
+
+ def fix_option_weights!
+ ordered_options.each_with_index do |option, index|
+ option.weight = index
+ end
+ end
+
+ def previous_option(value)
+ opts = ordered_options
+ pos = opts.index(value) - 1
+ return if pos < 0
+ opts[pos]
+ end
+
+
end
end
end
end
end