Greg's Commit which fixed the issue with saving adhoc modules

This commit is contained in:
gconsidine
2017-08-03 17:49:17 -04:00
committed by Jared Tabor
parent 634c7a8755
commit 155ef47b32
2 changed files with 45 additions and 34 deletions

View File

@@ -86,7 +86,7 @@ export default [
// does a string.split(', ') w/ an extra space // does a string.split(', ') w/ an extra space
// behind the comma. // behind the comma.
if(key === "AD_HOC_COMMANDS"){ if(key === "AD_HOC_COMMANDS"){
$scope[key] = data[key].toString(); $scope[key] = data[key];
} else if (key === "AUTH_LDAP_USER_SEARCH" || key === "AUTH_LDAP_GROUP_SEARCH") { } else if (key === "AUTH_LDAP_USER_SEARCH" || key === "AUTH_LDAP_GROUP_SEARCH") {
$scope[key] = JSON.stringify(data[key]); $scope[key] = JSON.stringify(data[key]);
} else { } else {
@@ -382,7 +382,7 @@ export default [
} else if($scope[key][0] && $scope[key][0].value !== undefined) { } else if($scope[key][0] && $scope[key][0].value !== undefined) {
if(multiselectDropdowns.indexOf(key) !== -1) { if(multiselectDropdowns.indexOf(key) !== -1) {
// Handle AD_HOC_COMMANDS // Handle AD_HOC_COMMANDS
payload[key] = ConfigurationUtils.listToArray(_.map($scope[key], 'value').join(',')); payload[key] = $scope[`${key}_values`];
} else { } else {
payload[key] = _.map($scope[key], 'value').join(','); payload[key] = _.map($scope[key], 'value').join(',');
} }

View File

@@ -79,9 +79,6 @@ export default [
noPanel: true noPanel: true
}); });
// Flag to avoid re-rendering and breaking Select2 dropdowns on tab switching
var dropdownRendered = false;
function initializeCodeInput () { function initializeCodeInput () {
let name = 'AWX_TASK_ENV'; let name = 'AWX_TASK_ENV';
@@ -95,35 +92,33 @@ export default [
$scope.parseTypeChange('parseType', name); $scope.parseTypeChange('parseType', name);
} }
function populateAdhocCommand(flag){ function loadAdHocCommands () {
$scope.$parent.AD_HOC_COMMANDS = $scope.$parent.AD_HOC_COMMANDS.toString(); $scope.$parent.AD_HOC_COMMANDS_values = $scope.$parent.AD_HOC_COMMANDS.map(value => value);
var ad_hoc_commands = $scope.$parent.AD_HOC_COMMANDS.split(','); $scope.$parent.AD_HOC_COMMANDS = $scope.$parent.AD_HOC_COMMANDS.map(value => ({
$scope.$parent.AD_HOC_COMMANDS = _.map(ad_hoc_commands, function(item){ value,
let option = _.find($scope.$parent.AD_HOC_COMMANDS_options, { value: item }); name: value,
if(!option){ label: value
option = { }));
name: item,
value: item, $scope.$parent.AD_HOC_COMMANDS_options = $scope.$parent.AD_HOC_COMMANDS.map(tag => tag);
label: item
}; CreateSelect2({
$scope.$parent.AD_HOC_COMMANDS_options.push(option); element: '#configuration_jobs_template_AD_HOC_COMMANDS',
} multiple: true,
return option; addNew: true,
placeholder: i18n._('Select commands')
}); });
}
if(flag !== undefined){ function revertAdHocCommands (defaults) {
dropdownRendered = flag; $scope.$parent.AD_HOC_COMMANDS = defaults.map(value => ({
} value,
name: value,
label: value
}));
if(!dropdownRendered) { $scope.$parent.AD_HOC_COMMANDS_options = $scope.$parent.AD_HOC_COMMANDS.map(tag => tag);
dropdownRendered = true; $scope.$parent.AD_HOC_COMMANDS_values = $scope.$parent.AD_HOC_COMMANDS.map(tag => tag.value);
CreateSelect2({
element: '#configuration_jobs_template_AD_HOC_COMMANDS',
multiple: true,
addNew: true,
placeholder: i18n._('Select commands')
});
}
} }
// Fix for bug where adding selected opts causes form to be $dirty and triggering modal // Fix for bug where adding selected opts causes form to be $dirty and triggering modal
@@ -132,10 +127,26 @@ export default [
$scope.$parent.configuration_jobs_template_form.$setPristine(); $scope.$parent.configuration_jobs_template_form.$setPristine();
}, 1000); }, 1000);
$scope.$on('AD_HOC_COMMANDS_populated', function(e, data, flag) {
populateAdhocCommand(flag); // Managing the state of select2's tags since the behavior is unpredictable otherwise.
let commandsElement = $('#configuration_jobs_template_AD_HOC_COMMANDS');
commandsElement.on('select2:select', event => {
let command = event.params.data.text;
let commands = $scope.$parent.AD_HOC_COMMANDS_values;
commands.push(command);
}); });
commandsElement.on('select2:unselect', event => {
let command = event.params.data.text;
let commands = $scope.$parent.AD_HOC_COMMANDS_values;
$scope.$parent.AD_HOC_COMMANDS_values = commands.filter(value => value !== command);
});
$scope.$on('AD_HOC_COMMANDS_reverted', (e, defaults) => revertAdHocCommands(defaults));
/* /*
* Controllers for each tab are initialized when configuration is opened. A listener * Controllers for each tab are initialized when configuration is opened. A listener
* on the URL itself is necessary to determine which tab is active. If a non-active * on the URL itself is necessary to determine which tab is active. If a non-active
@@ -174,7 +185,7 @@ export default [
codeInputInitialized = true; codeInputInitialized = true;
} }
populateAdhocCommand(false); loadAdHocCommands();
}); });
} }
]; ];