12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
- module Import::OTRS::DynamicField::Mixin::HasOptions
- extend ActiveSupport::Concern
- # Method to build nested structure
- def build_options_tree_structure(data)
- # Transform data into a hierarchical structure
- hierarchy = {}
- data.each do |path, name|
- current_level = hierarchy
- segments = path.split('::')
- segments.each_with_index do |segment, index|
- current_level[segment] ||= {}
- # Assign name to the last segment
- if index == segments.size - 1
- current_level[segment][:name] = name
- end
- current_level = current_level[segment]
- end
- end
- # Recursively build the array structure from the hierarchy.
- build_options_array_structure(hierarchy)
- end
- def build_options_array_structure(hierarchy)
- hierarchy.filter_map do |key, value|
- if value.is_a?(Hash) && value.key?(:name)
- # Using except to exclude the :name key
- children = value.except(:name)
- node = { 'value' => key, 'name' => value[:name] }
- node['children'] = build_options_array_structure(children) if children.any?
- node
- end
- end
- end
- def option_list(possible_values, tree_select)
- return possible_values if !tree_select
- build_options_tree_structure(possible_values)
- end
- end
|