mirror of
https://github.com/ansible/awx.git
synced 2026-01-19 13:41:28 -03:30
Merge pull request #1399 from mabashian/1137-cancel-prompt
Fixed bug where user could still save schedule/node after halfway filling out prompt step(s)
This commit is contained in:
commit
4b4bbcebae
@ -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,22 +53,22 @@ 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 = {};
|
||||
|
||||
if(vm.promptData.launchConf.passwords_needed_to_start) {
|
||||
vm.promptData.launchConf.passwords_needed_to_start.forEach((passwordNeeded) => {
|
||||
@ -96,11 +98,11 @@ export default [ 'Rest', 'GetBasePath', 'ProcessErrors', 'CredentialTypeModel',
|
||||
});
|
||||
}
|
||||
|
||||
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,
|
||||
@ -108,7 +110,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,
|
||||
@ -117,7 +119,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,
|
||||
@ -126,7 +128,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,
|
||||
@ -165,6 +167,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