Skip to content

Commit 1716255

Browse files
Fixed the copy request dialog form
1 parent 66865b8 commit 1716255

File tree

2 files changed

+43
-1
lines changed

2 files changed

+43
-1
lines changed

app/controllers/miq_request_controller.rb

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,8 @@ def prov_copy
218218
)
219219

220220
if req.kind_of?(ServiceTemplateProvisionRequest)
221-
@dialog_replace_data = req.options[:dialog].map { |key, val| {:name => key.split('dialog_').last, :value => val } }.to_json
221+
@dialog_replace_data = req.options[:dialog].map { |key, val| {:name => key.split('dialog_').last, :value => parse_val(key, val)} }.to_json
222+
# req.options[:dialog]["Array::dialog_param_test1"][1] =="\u001F"
222223
@new_dialog = true
223224
template = find_record_with_rbac(ServiceTemplate, req.source_id)
224225
resource_action = template.resource_actions.find { |r| r.action.downcase == 'provision' && r.dialog_id }
@@ -338,6 +339,38 @@ def menu_section_id(parms = {})
338339

339340
private
340341

342+
def parse_val(key, val)
343+
if val.kind_of?(Integer) # Handle integer values
344+
if key.include?("Array::") # Handle multi select with integers
345+
val = [val]
346+
else # Handle single select with integers
347+
return val
348+
end
349+
end
350+
351+
# TODO: Tag Control Field currently does not handle default values
352+
if val.include?("Classification::") # Handle tag control default values
353+
if val.include?("\u001F") # Array of tags
354+
val = val.split("\u001F")
355+
tags = []
356+
val.each do |tag|
357+
tags.push(Classification.find_by(:id => tag.split('::').second).description)
358+
end
359+
val = tags
360+
else # Single tag
361+
val = Classification.find_by(:id => val.split('::').second).description
362+
end
363+
elsif key.include?("Array::") # Handle drop down with multi select default values
364+
if val.kind_of?(String) && val.include?("\u001F") # Check if string is an array of values
365+
val = val.split("\u001F") # Split the string into an array
366+
else
367+
val = [val] # Handle single string value
368+
end
369+
end
370+
371+
val # Handles all other conditions such as non-multi-select drop downs, text fields, etc.
372+
end
373+
341374
def replace_gtl
342375
render :update do |page|
343376
page << javascript_prologue

app/javascript/oldjs/controllers/dialog_user/dialog_user_controller.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,16 @@ ManageIQ.angular.app.controller('dialogUserController', ['API', 'dialogFieldRefr
2121
_.forEach(vm.dialog.dialog_tabs, function(tab) {
2222
_.forEach(tab.dialog_groups, function(group) {
2323
_.forEach(group.dialog_fields, function(field) {
24+
console.log(dialogReplaceData);
2425
const replaceField = dialogReplaceData ? JSON.parse(dialogReplaceData).find(function (replace) { return replace.name === field.name }) : false;
26+
27+
// Handles multi-select dropdowns with integer values
28+
if (field.type === 'DialogFieldDropDownList' && field.data_type === 'integer' && replaceField.value && Array.isArray(replaceField.value)) {
29+
replaceField.value = replaceField.value.map(function (value) {
30+
return parseInt(value, 10);
31+
});
32+
}
33+
2534
if (replaceField) {
2635
field.default_value = replaceField.value;
2736
}

0 commit comments

Comments
 (0)