diff --git a/awx/ui/client/lib/components/tabs/tab.directive.js b/awx/ui/client/lib/components/tabs/tab.directive.js
index 4c7eea3785..85dc5f4d2c 100644
--- a/awx/ui/client/lib/components/tabs/tab.directive.js
+++ b/awx/ui/client/lib/components/tabs/tab.directive.js
@@ -20,16 +20,18 @@ function AtTabController ($state) {
group.register(scope);
};
- vm.go = () => {
+ vm.handleClick = () => {
if (scope.state._disabled || scope.state._active) {
return;
}
-
if (scope.state._go) {
$state.go(scope.state._go, scope.state._params, { reload: true });
- } else {
- group.clearActive();
- scope.state._active = true;
+ return;
+ }
+ group.clearActive();
+ scope.state._active = true;
+ if (scope.state._onClickActivate) {
+ scope.state._onClickActivate();
}
};
}
diff --git a/awx/ui/client/lib/components/tabs/tab.partial.html b/awx/ui/client/lib/components/tabs/tab.partial.html
index eb007feb01..5b77e02841 100644
--- a/awx/ui/client/lib/components/tabs/tab.partial.html
+++ b/awx/ui/client/lib/components/tabs/tab.partial.html
@@ -2,6 +2,6 @@
ng-attr-disabled="{{ state._disabled || undefined }}"
ng-class="{ 'at-Tab--active': state._active, 'at-Tab--disabled': state._disabled }"
ng-hide="{{ state._hide }}"
- ng-click="state._go && vm.go();">
+ ng-click="vm.handleClick();">
diff --git a/awx/ui/client/src/templates/prompt/prompt.controller.js b/awx/ui/client/src/templates/prompt/prompt.controller.js
index 5aeff6e63b..cf92af6258 100644
--- a/awx/ui/client/src/templates/prompt/prompt.controller.js
+++ b/awx/ui/client/src/templates/prompt/prompt.controller.js
@@ -189,6 +189,36 @@ export default [ 'ProcessErrors', 'CredentialTypeModel', 'TemplatesStrings', '$f
modal.show($filter('sanitize')(vm.promptDataClone.templateName));
vm.promptData.triggerModalOpen = false;
+ vm._savedPromptData = {
+ 1: _.cloneDeep(vm.promptDataClone)
+ };
+ Object.keys(vm.steps).forEach(step => {
+ if (!vm.steps[step].tab) {
+ return;
+ }
+ vm.steps[step].tab._onClickActivate = () => {
+ if (vm._savedPromptData[vm.steps[step].tab.order]) {
+ vm.promptDataClone = vm._savedPromptData[vm.steps[step].tab.order];
+ }
+ Object.keys(vm.steps).forEach(tabStep => {
+ if (!vm.steps[tabStep].tab) {
+ return;
+ }
+ if (vm.steps[tabStep].tab.order < vm.steps[step].tab.order) {
+ vm.steps[tabStep].tab._disabled = false;
+ vm.steps[tabStep].tab._active = false;
+ } else if (vm.steps[tabStep].tab.order === vm.steps[step].tab.order) {
+ vm.steps[tabStep].tab._disabled = false;
+ vm.steps[tabStep].tab._active = true;
+ } else {
+ vm.steps[tabStep].tab._disabled = true;
+ vm.steps[tabStep].tab._active = false;
+ }
+ });
+ scope.$broadcast('promptTabChange', { step });
+ };
+ });
+
modal.onClose = () => {
scope.$emit('launchModalOpen', false);
};
@@ -214,19 +244,39 @@ export default [ 'ProcessErrors', 'CredentialTypeModel', 'TemplatesStrings', '$f
return;
}
}
+
+ let nextStep;
Object.keys(vm.steps).forEach(step => {
- if(vm.steps[step].tab) {
- if(vm.steps[step].tab.order === currentTab.order) {
- vm.steps[step].tab._active = false;
- vm.steps[step].tab._disabled = true;
- } else if(vm.steps[step].tab.order === currentTab.order + 1) {
- activeTab = currentTab;
- vm.steps[step].tab._active = true;
- vm.steps[step].tab._disabled = false;
- scope.$broadcast('promptTabChange', { step });
- }
+ if (!vm.steps[step].tab) {
+ return;
+ }
+ if (vm.steps[step].tab.order === currentTab.order + 1) {
+ nextStep = step;
}
});
+
+ if (!nextStep) {
+ return;
+ }
+
+ // Save the current promptData state in case we need to revert
+ vm._savedPromptData[currentTab.order] = _.cloneDeep(vm.promptDataClone);
+ Object.keys(vm.steps).forEach(tabStep => {
+ if (!vm.steps[tabStep].tab) {
+ return;
+ }
+ if (vm.steps[tabStep].tab.order < vm.steps[nextStep].tab.order) {
+ vm.steps[tabStep].tab._disabled = false;
+ vm.steps[tabStep].tab._active = false;
+ } else if (vm.steps[tabStep].tab.order === vm.steps[nextStep].tab.order) {
+ vm.steps[tabStep].tab._disabled = false;
+ vm.steps[tabStep].tab._active = true;
+ } else {
+ vm.steps[tabStep].tab._disabled = true;
+ vm.steps[tabStep].tab._active = false;
+ }
+ });
+ scope.$broadcast('promptTabChange', { step: nextStep });
};
vm.keypress = (event) => {
diff --git a/awx/ui/client/src/templates/prompt/prompt.partial.html b/awx/ui/client/src/templates/prompt/prompt.partial.html
index 6bd2a123af..217ddddf94 100644
--- a/awx/ui/client/src/templates/prompt/prompt.partial.html
+++ b/awx/ui/client/src/templates/prompt/prompt.partial.html
@@ -22,7 +22,7 @@
read-only-prompts="vm.readOnlyPrompts">
-