Module: AdminModule::Pages::SelectListSyncable

Included in:
DcDetailPage, LockDefinitionPage, PpmsPage, SnapshotDetailPage, WorkflowDetailPage
Defined in:
lib/admin_module/pages/select_list_syncable.rb

Instance Method Summary collapse

Instance Method Details

#sync_available_and_selected_lists(available_items, available_element, selected_items, selected_element, add_btn, remove_btn, items_to_select) ⇒ Object

Sync an array of items between available and selected lists such that after syncing, the selected list will contain only the items in the array.

args:

available_items   - list of items currently in the 'available' select element
available_element - the 'available' select element
selected_items    - list of items currently in the 'selected' select element
selected_element  - the 'selected' select element
add_btn           - the `Add` button element
remove_btn        - the `Remove` button element
items_to_select   - array of items to sync the select elements to


27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/admin_module/pages/select_list_syncable.rb', line 27

def sync_available_and_selected_lists available_items, available_element, selected_items, selected_element, add_btn, remove_btn, items_to_select
  working_set = items_to_select.dup
  items_to_remove = Array.new
  items_to_add = Array.new

  # Build a list of indices of items to remove from the selected list
  selected_items.each_index do |i|
    if working_set.include? selected_items[i]
      working_set.delete selected_items[i]
    else
      items_to_remove << i
    end
  end

  # Build a list of indices of items to add from the available list
  available_items.each_index do |i|
    if working_set.include? available_items[i]
      items_to_add << i
      working_set.delete available_items[i]
    end
  end

  # Select and remove all params in the removal list
  items_to_remove.each do |i|
    selected_element.options[i].click
  end
  remove_btn.click if items_to_remove.count > 0

  # Select and add all params in the add list
  items_to_add.each do |i|
    available_element.options[i].click
  end
  add_btn.click if items_to_add.count > 0
end