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