Skip to content

Commit 8a8e60b

Browse files
committed
Convert role form from haml to React and add cypress testing
1 parent d906b9d commit 8a8e60b

File tree

50 files changed

+2526
-95
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+2526
-95
lines changed

app/controllers/ops_controller.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -806,6 +806,10 @@ def handle_bottom_cell(nodetype, presenter, locals)
806806
if ["settings_workers", "diagnostics_cu_repair"].include?(@sb[:active_tab])
807807
presenter.hide(:form_buttons_div)
808808
end
809+
810+
if @hide_bottom_bar
811+
presenter.hide(:form_buttons_div)
812+
end
809813
end
810814

811815
def replace_explorer_trees(replace_trees, presenter)

app/controllers/ops_controller/ops_rbac.rb

Lines changed: 63 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -94,23 +94,52 @@ def rbac_group_edit
9494

9595
def rbac_role_add
9696
assert_privileges("rbac_role_add")
97+
@hide_bottom_bar = true
9798
rbac_edit_reset('new', 'role', MiqUserRole)
9899
end
99100

101+
def rbac_role_add_react
102+
assert_privileges("rbac_role_add")
103+
@hide_bottom_bar = true
104+
if params[:id] != 'new'
105+
rbac_edit_reset_react('edit', 'role', MiqUserRole)
106+
else
107+
rbac_edit_reset_react('new', 'role', MiqUserRole)
108+
end
109+
end
110+
100111
def rbac_role_copy
101112
assert_privileges("rbac_role_copy")
113+
@hide_bottom_bar = true
102114
rbac_edit_reset('copy', 'role', MiqUserRole)
103115
end
104116

105117
def rbac_role_edit
106118
assert_privileges("rbac_role_edit")
119+
@hide_bottom_bar = true
107120
case params[:button]
108121
when 'cancel' then rbac_edit_cancel('role')
109122
when 'save', 'add' then rbac_edit_save_or_add('role', 'miq_user_role')
110123
when 'reset', nil then rbac_edit_reset(params[:typ], 'role', MiqUserRole) # Reset or form load
111124
end
112125
end
113126

127+
def rbac_role_edit_get
128+
assert_privileges("rbac_role_edit")
129+
unless params[:id]
130+
obj = find_checked_items
131+
@_params[:id] = obj[0]
132+
end
133+
@hide_bottom_bar = true
134+
role = MiqUserRole.find_by(id: params[:id])
135+
render :json => {
136+
:name => role.name,
137+
:vm_restriction => role[:settings] && role[:settings][:restrictions][:vms],
138+
:service_template_restriction => role[:settings] && role[:settings][:restrictions][:service_templates],
139+
:miqProductFeatures => role.miq_product_features,
140+
}
141+
end
142+
114143
def rbac_tenant_add
115144
assert_privileges("rbac_tenant_add")
116145
@_params[:typ] = "new"
@@ -650,12 +679,44 @@ def rbac_edit_reset(operation, what, klass)
650679
replace_right_cell(:nodetype => x_node)
651680
end
652681

682+
def rbac_edit_reset_react(operation, what, klass)
683+
key = what.to_sym
684+
if operation != "new"
685+
record = MiqUserRole.find_by(id: params[:id])
686+
record.miq_product_features = [MiqProductFeature.find_by(:identifier => MiqProductFeature.feature_root)]
687+
end
688+
689+
case operation
690+
when "new"
691+
# create new record
692+
@record = klass.new
693+
if key == :role
694+
@record.miq_product_features = [MiqProductFeature.find_by(:identifier => MiqProductFeature.feature_root)]
695+
end
696+
when "copy"
697+
# copy existing record
698+
@record = record.clone
699+
@record.miq_product_features = record.miq_product_features
700+
@record.read_only = false
701+
else
702+
# use existing record
703+
@record = record
704+
end
705+
@sb[:typ] = operation
706+
707+
rbac_role_set_form_vars
708+
rbac_role_get_form_vars
709+
710+
rbac_edit_save_or_add('role', 'miq_user_role')
711+
end
712+
653713
def rbac_edit_save_or_add(what, rbac_suffix = what)
654714
key = what.to_sym
655715
id = params[:id] || "new"
656716
add_pressed = params[:button] == "add"
657717

658-
return unless load_edit("rbac_#{what}_edit__#{id}", "replace_cell__explorer")
718+
719+
# return unless load_edit("rbac_#{what}_edit__#{id}", "replace_cell__explorer")
659720

660721
case key
661722
when :user
@@ -1269,7 +1330,6 @@ def rbac_role_set_form_vars
12691330
@edit[:new][:vm_restriction] = vmr || :none
12701331
str = @record.settings.fetch_path(:restrictions, :service_templates) if @record.settings
12711332
@edit[:new][:service_template_restriction] = str || :none
1272-
@edit[:new][:features] = rbac_expand_features(@record.miq_product_features.map(&:identifier)).sort
12731333

12741334
@edit[:current] = copy_hash(@edit[:new])
12751335

@@ -1303,54 +1363,11 @@ def rbac_compact_features(selected, node = nil)
13031363
end
13041364
end
13051365

1306-
# Yield all features for given tree node a section or feature
1307-
#
1308-
# a. special case _tab_all_vm_rules
1309-
# b. section node /^_tab_/
1310-
# return all features below this section and
1311-
# recursively below any nested sections
1312-
# and nested features recursively
1313-
# c. feature node
1314-
# return nested features recursively
1315-
#
1316-
def recurse_sections_and_features(node)
1317-
if /_tab_all_vm_rules$/.match?(node)
1318-
MiqProductFeature.feature_children('all_vm_rules').each do |feature|
1319-
kids = MiqProductFeature.feature_all_children(feature)
1320-
yield feature, [feature] + kids
1321-
end
1322-
elsif /^_tab_/.match?(node)
1323-
section_id = node.split('_tab_').last.to_sym
1324-
Menu::Manager.section(section_id).features_recursive.each do |f|
1325-
kids = MiqProductFeature.feature_all_children(f)
1326-
yield f, [f] + kids
1327-
end
1328-
else
1329-
kids = MiqProductFeature.feature_all_children(node)
1330-
yield node, [node] + kids
1331-
end
1332-
end
1333-
13341366
def rbac_role_get_form_vars
13351367
@edit[:new][:name] = params[:name] if params[:name]
13361368
@edit[:new][:vm_restriction] = params[:vm_restriction].to_sym if params[:vm_restriction]
13371369
@edit[:new][:service_template_restriction] = params[:service_template_restriction].to_sym if params[:service_template_restriction]
1338-
1339-
# Add/removed features based on the node that was checked
1340-
if params[:check]
1341-
node = params[:id].split("__").last # Get the feature of the checked node
1342-
if params[:check] == "0" # Unchecked
1343-
recurse_sections_and_features(node) do |feature, all|
1344-
@edit[:new][:features] -= all # remove the feature + children
1345-
rbac_role_remove_parent(feature) # remove all parents above the unchecked tab feature
1346-
end
1347-
else # Checked
1348-
recurse_sections_and_features(node) do |feature, all|
1349-
@edit[:new][:features] += all # remove the feature + children
1350-
rbac_role_add_parent(feature) # remove all parents above the unchecked tab feature
1351-
end
1352-
end
1353-
end
1370+
@edit[:new][:features] = params[:features] if params[:features]
13541371
@edit[:new][:features].uniq!
13551372
@edit[:new][:features].sort!
13561373
end

app/helpers/ops_helper/role_rbac_details_helper.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ def rbac_role_info_view(role, rbac_menu_tree)
2222
})
2323
end
2424

25+
def rbac_role_product_features(role, rbac_menu_tree)
26+
cells = row_data(_("Product Features (Read Only)"), {:input => 'component', :component => 'TREE_VIEW_REDUX', :props => rbac_menu_tree.locals_for_render, :name => rbac_menu_tree.name})
27+
cells[:cells][:value][:props]
28+
end
29+
2530
def select_tree_node(tree_id)
2631
{
2732
:remote => true,

0 commit comments

Comments
 (0)