mirror of
https://github.com/ansible/awx.git
synced 2026-01-15 11:50:42 -03:30
Only update the promptData object when the user successfully completes the prompt process
This commit is contained in:
parent
a03316cdb9
commit
fcf9e45d0a
@ -19,6 +19,8 @@ export default [ 'Rest', 'GetBasePath', 'ProcessErrors', 'CredentialTypeModel',
|
||||
vm.actionButtonClicked = false;
|
||||
if(vm.promptData && vm.promptData.triggerModalOpen) {
|
||||
|
||||
vm.promptDataClone = _.cloneDeep(vm.promptData);
|
||||
|
||||
vm.steps = {
|
||||
inventory: {
|
||||
includeStep: false
|
||||
@ -51,32 +53,32 @@ export default [ 'Rest', 'GetBasePath', 'ProcessErrors', 'CredentialTypeModel',
|
||||
|
||||
credentialType.http.get()
|
||||
.then( (response) => {
|
||||
vm.promptData.prompts.credentials.credentialTypes = {};
|
||||
vm.promptData.prompts.credentials.credentialTypeOptions = [];
|
||||
vm.promptDataClone.prompts.credentials.credentialTypes = {};
|
||||
vm.promptDataClone.prompts.credentials.credentialTypeOptions = [];
|
||||
response.data.results.forEach((credentialTypeRow => {
|
||||
vm.promptData.prompts.credentials.credentialTypes[credentialTypeRow.id] = credentialTypeRow.kind;
|
||||
vm.promptDataClone.prompts.credentials.credentialTypes[credentialTypeRow.id] = credentialTypeRow.kind;
|
||||
if(credentialTypeRow.kind.match(/^(cloud|net|ssh|vault)$/)) {
|
||||
if(credentialTypeRow.kind === 'ssh') {
|
||||
vm.promptData.prompts.credentials.credentialKind = credentialTypeRow.id.toString();
|
||||
vm.promptDataClone.prompts.credentials.credentialKind = credentialTypeRow.id.toString();
|
||||
}
|
||||
vm.promptData.prompts.credentials.credentialTypeOptions.push({
|
||||
vm.promptDataClone.prompts.credentials.credentialTypeOptions.push({
|
||||
name: credentialTypeRow.name,
|
||||
value: credentialTypeRow.id
|
||||
});
|
||||
}
|
||||
}));
|
||||
|
||||
vm.promptData.prompts.credentials.passwords = {};
|
||||
vm.promptDataClone.prompts.credentials.passwords = {};
|
||||
|
||||
vm.promptData.launchConf.passwords_needed_to_start.forEach((passwordNeeded) => {
|
||||
vm.promptDataClone.launchConf.passwords_needed_to_start.forEach((passwordNeeded) => {
|
||||
if(passwordNeeded === "ssh_password") {
|
||||
vm.promptData.prompts.credentials.passwords.ssh = {};
|
||||
vm.promptDataClone.prompts.credentials.passwords.ssh = {};
|
||||
}
|
||||
if(passwordNeeded === "become_password") {
|
||||
vm.promptData.prompts.credentials.passwords.become = {};
|
||||
vm.promptDataClone.prompts.credentials.passwords.become = {};
|
||||
}
|
||||
if(passwordNeeded === "ssh_key_unlock") {
|
||||
vm.promptData.prompts.credentials.passwords.ssh_key_unlock = {};
|
||||
vm.promptDataClone.prompts.credentials.passwords.ssh_key_unlock = {};
|
||||
}
|
||||
if(passwordNeeded.startsWith("vault_password")) {
|
||||
let vault_id;
|
||||
@ -84,21 +86,21 @@ export default [ 'Rest', 'GetBasePath', 'ProcessErrors', 'CredentialTypeModel',
|
||||
vault_id = passwordNeeded.split(/\.(.+)/)[1];
|
||||
}
|
||||
|
||||
if(!vm.promptData.prompts.credentials.passwords.vault) {
|
||||
vm.promptData.prompts.credentials.passwords.vault = [];
|
||||
if(!vm.promptDataClone.prompts.credentials.passwords.vault) {
|
||||
vm.promptDataClone.prompts.credentials.passwords.vault = [];
|
||||
}
|
||||
|
||||
vm.promptData.prompts.credentials.passwords.vault.push({
|
||||
vm.promptDataClone.prompts.credentials.passwords.vault.push({
|
||||
vault_id: vault_id
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
vm.promptData.credentialTypeMissing = [];
|
||||
vm.promptDataClone.credentialTypeMissing = [];
|
||||
|
||||
vm.promptData.prompts.variables.ignore = vm.promptData.launchConf.ignore_ask_variables;
|
||||
vm.promptDataClone.prompts.variables.ignore = vm.promptDataClone.launchConf.ignore_ask_variables;
|
||||
|
||||
if(vm.promptData.launchConf.ask_inventory_on_launch) {
|
||||
if(vm.promptDataClone.launchConf.ask_inventory_on_launch) {
|
||||
vm.steps.inventory.includeStep = true;
|
||||
vm.steps.inventory.tab = {
|
||||
_active: true,
|
||||
@ -106,7 +108,7 @@ export default [ 'Rest', 'GetBasePath', 'ProcessErrors', 'CredentialTypeModel',
|
||||
};
|
||||
order++;
|
||||
}
|
||||
if(vm.promptData.launchConf.ask_credential_on_launch || (vm.promptData.launchConf.passwords_needed_to_start && vm.promptData.launchConf.passwords_needed_to_start.length > 0)) {
|
||||
if(vm.promptDataClone.launchConf.ask_credential_on_launch || (vm.promptDataClone.launchConf.passwords_needed_to_start && vm.promptDataClone.launchConf.passwords_needed_to_start.length > 0)) {
|
||||
vm.steps.credential.includeStep = true;
|
||||
vm.steps.credential.tab = {
|
||||
_active: order === 1 ? true : false,
|
||||
@ -115,7 +117,7 @@ export default [ 'Rest', 'GetBasePath', 'ProcessErrors', 'CredentialTypeModel',
|
||||
};
|
||||
order++;
|
||||
}
|
||||
if(vm.promptData.launchConf.ask_verbosity_on_launch || vm.promptData.launchConf.ask_job_type_on_launch || vm.promptData.launchConf.ask_limit_on_launch || vm.promptData.launchConf.ask_tags_on_launch || vm.promptData.launchConf.ask_skip_tags_on_launch || (vm.promptData.launchConf.ask_variables_on_launch && !vm.promptData.launchConf.ignore_ask_variables) || vm.promptData.launchConf.ask_diff_mode_on_launch) {
|
||||
if(vm.promptDataClone.launchConf.ask_verbosity_on_launch || vm.promptDataClone.launchConf.ask_job_type_on_launch || vm.promptDataClone.launchConf.ask_limit_on_launch || vm.promptDataClone.launchConf.ask_tags_on_launch || vm.promptDataClone.launchConf.ask_skip_tags_on_launch || (vm.promptDataClone.launchConf.ask_variables_on_launch && !vm.promptDataClone.launchConf.ignore_ask_variables) || vm.promptDataClone.launchConf.ask_diff_mode_on_launch) {
|
||||
vm.steps.other_prompts.includeStep = true;
|
||||
vm.steps.other_prompts.tab = {
|
||||
_active: order === 1 ? true : false,
|
||||
@ -124,7 +126,7 @@ export default [ 'Rest', 'GetBasePath', 'ProcessErrors', 'CredentialTypeModel',
|
||||
};
|
||||
order++;
|
||||
}
|
||||
if(vm.promptData.launchConf.survey_enabled) {
|
||||
if(vm.promptDataClone.launchConf.survey_enabled) {
|
||||
vm.steps.survey.includeStep = true;
|
||||
vm.steps.survey.tab = {
|
||||
_active: order === 1 ? true : false,
|
||||
@ -163,6 +165,11 @@ export default [ 'Rest', 'GetBasePath', 'ProcessErrors', 'CredentialTypeModel',
|
||||
vm.finish = () => {
|
||||
// Disable the action button to prevent double clicking
|
||||
vm.actionButtonClicked = true;
|
||||
|
||||
_.forEach(vm.promptDataClone, (value, key) => {
|
||||
vm.promptData[key] = value;
|
||||
});
|
||||
|
||||
vm.promptData.triggerModalOpen = false;
|
||||
if(vm.onFinish) {
|
||||
vm.onFinish();
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
<div class="Prompt">
|
||||
<at-modal ng-if="vm.promptData">
|
||||
<at-modal ng-if="vm.promptDataClone">
|
||||
<at-tab-group>
|
||||
<at-tab ng-if="vm.steps.inventory.tab" state="vm.steps.inventory.tab">{{:: vm.strings.get('prompt.INVENTORY') }}</at-tab>
|
||||
<at-tab ng-if="vm.steps.credential.tab" state="vm.steps.credential.tab">{{:: vm.strings.get('prompt.CREDENTIAL') }}</at-tab>
|
||||
@ -9,25 +9,25 @@
|
||||
</at-tab-group>
|
||||
<div class="Prompt-step">
|
||||
<div ng-if="vm.steps.inventory.includeStep" ng-show="vm.steps.inventory.tab._active">
|
||||
<prompt-inventory prompt-data="vm.promptData"></prompt-inventory>
|
||||
<prompt-inventory prompt-data="vm.promptDataClone"></prompt-inventory>
|
||||
</div>
|
||||
<div ng-if="vm.steps.credential.includeStep" ng-show="vm.steps.credential.tab._active">
|
||||
<prompt-credential prompt-data="vm.promptData" credential-passwords-form="vm.forms.credentialPasswords"></prompt-credential>
|
||||
<prompt-credential prompt-data="vm.promptDataClone" credential-passwords-form="vm.forms.credentialPasswords"></prompt-credential>
|
||||
</div>
|
||||
<div ng-if="vm.steps.other_prompts.includeStep" ng-show="vm.steps.other_prompts.tab._active">
|
||||
<prompt-other-prompts prompt-data="vm.promptData" other-prompts-form="vm.forms.otherPrompts" is-active-step="vm.steps.other_prompts.tab._active"></prompt-other-prompts>
|
||||
<prompt-other-prompts prompt-data="vm.promptDataClone" other-prompts-form="vm.forms.otherPrompts" is-active-step="vm.steps.other_prompts.tab._active"></prompt-other-prompts>
|
||||
</div>
|
||||
<div ng-if="vm.steps.survey.includeStep" ng-show="vm.steps.survey.tab._active">
|
||||
<prompt-survey prompt-data="vm.promptData" survey-form="vm.forms.survey"></prompt-survey>
|
||||
<prompt-survey prompt-data="vm.promptDataClone" survey-form="vm.forms.survey"></prompt-survey>
|
||||
</div>
|
||||
<div ng-if="vm.steps.preview.tab._active">
|
||||
<prompt-preview prompt-data="vm.promptData"></prompt-preview>
|
||||
<prompt-preview prompt-data="vm.promptDataClone"></prompt-preview>
|
||||
</div>
|
||||
</div>
|
||||
<div class="Prompt-footer">
|
||||
<button class="Prompt-defaultButton" ng-click="vm.cancel()">{{:: vm.strings.get('CANCEL') }}</button>
|
||||
<button class="Prompt-actionButton" ng-show="vm.steps.inventory.tab._active" ng-click="vm.next(vm.steps.inventory.tab)" ng-disabled="!vm.promptData.prompts.inventory.value.id">{{:: vm.strings.get('NEXT') }}</button>
|
||||
<button class="Prompt-actionButton" ng-show="vm.steps.credential.tab._active" ng-click="vm.next(vm.steps.credential.tab)" ng-disabled="!vm.forms.credentialPasswords.$valid || (vm.promptData.credentialTypeMissing && vm.promptData.credentialTypeMissing.length > 0)">{{:: vm.strings.get('NEXT') }}</button>
|
||||
<button class="Prompt-actionButton" ng-show="vm.steps.inventory.tab._active" ng-click="vm.next(vm.steps.inventory.tab)" ng-disabled="!vm.promptDataClone.prompts.inventory.value.id">{{:: vm.strings.get('NEXT') }}</button>
|
||||
<button class="Prompt-actionButton" ng-show="vm.steps.credential.tab._active" ng-click="vm.next(vm.steps.credential.tab)" ng-disabled="!vm.forms.credentialPasswords.$valid || (vm.promptDataClone.credentialTypeMissing && vm.promptDataClone.credentialTypeMissing.length > 0)">{{:: vm.strings.get('NEXT') }}</button>
|
||||
<button class="Prompt-actionButton" ng-show="vm.steps.other_prompts.tab._active" ng-click="vm.next(vm.steps.other_prompts.tab)" ng-disabled="!vm.forms.otherPrompts.$valid">{{:: vm.strings.get('NEXT') }}</button>
|
||||
<button class="Prompt-actionButton" ng-show="vm.steps.survey.tab._active" ng-click="vm.next(vm.steps.survey.tab)" ng-disabled="!vm.forms.survey.$valid">{{:: vm.strings.get('NEXT') }}</button>
|
||||
<button class="Prompt-actionButton" ng-show="vm.steps.preview.tab._active" ng-click="vm.finish()" ng-bind="vm.actionText" ng-disabled="vm.actionButtonClicked"></button>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user