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:
Michael Abashian 2018-04-23 11:30:00 -04:00 committed by GitHub
commit 4b4bbcebae
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 20 deletions

View File

@ -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();

View File

@ -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>