Allow navigation to previous launch prompt tabs

This commit is contained in:
Jake McDermott
2019-10-14 13:42:39 -04:00
parent 8e296bbf8c
commit 85781d0bc1
4 changed files with 69 additions and 17 deletions

View File

@@ -20,16 +20,18 @@ function AtTabController ($state) {
group.register(scope); group.register(scope);
}; };
vm.go = () => { vm.handleClick = () => {
if (scope.state._disabled || scope.state._active) { if (scope.state._disabled || scope.state._active) {
return; return;
} }
if (scope.state._go) { if (scope.state._go) {
$state.go(scope.state._go, scope.state._params, { reload: true }); $state.go(scope.state._go, scope.state._params, { reload: true });
} else { return;
group.clearActive(); }
scope.state._active = true; group.clearActive();
scope.state._active = true;
if (scope.state._onClickActivate) {
scope.state._onClickActivate();
} }
}; };
} }

View File

@@ -2,6 +2,6 @@
ng-attr-disabled="{{ state._disabled || undefined }}" ng-attr-disabled="{{ state._disabled || undefined }}"
ng-class="{ 'at-Tab--active': state._active, 'at-Tab--disabled': state._disabled }" ng-class="{ 'at-Tab--active': state._active, 'at-Tab--disabled': state._disabled }"
ng-hide="{{ state._hide }}" ng-hide="{{ state._hide }}"
ng-click="state._go && vm.go();"> ng-click="vm.handleClick();">
<ng-transclude></ng-transclude> <ng-transclude></ng-transclude>
</button> </button>

View File

@@ -189,6 +189,36 @@ export default [ 'ProcessErrors', 'CredentialTypeModel', 'TemplatesStrings', '$f
modal.show($filter('sanitize')(vm.promptDataClone.templateName)); modal.show($filter('sanitize')(vm.promptDataClone.templateName));
vm.promptData.triggerModalOpen = false; 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 = () => { modal.onClose = () => {
scope.$emit('launchModalOpen', false); scope.$emit('launchModalOpen', false);
}; };
@@ -214,19 +244,39 @@ export default [ 'ProcessErrors', 'CredentialTypeModel', 'TemplatesStrings', '$f
return; return;
} }
} }
let nextStep;
Object.keys(vm.steps).forEach(step => { Object.keys(vm.steps).forEach(step => {
if(vm.steps[step].tab) { if (!vm.steps[step].tab) {
if(vm.steps[step].tab.order === currentTab.order) { return;
vm.steps[step].tab._active = false; }
vm.steps[step].tab._disabled = true; if (vm.steps[step].tab.order === currentTab.order + 1) {
} else if(vm.steps[step].tab.order === currentTab.order + 1) { nextStep = step;
activeTab = currentTab;
vm.steps[step].tab._active = true;
vm.steps[step].tab._disabled = false;
scope.$broadcast('promptTabChange', { 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) => { vm.keypress = (event) => {

View File

@@ -22,7 +22,7 @@
read-only-prompts="vm.readOnlyPrompts"> read-only-prompts="vm.readOnlyPrompts">
</prompt-credential> </prompt-credential>
</div> </div>
<div ng-if="vm.steps.other_prompts.includeStep" ng-show="vm.steps.other_prompts.tab._active" id="prompt_other_prompts_step"> <div ng-if="vm.steps.other_prompts.includeStep && vm.steps.other_prompts.tab._active" id="prompt_other_prompts_step">
<prompt-other-prompts <prompt-other-prompts
prompt-data="vm.promptDataClone" prompt-data="vm.promptDataClone"
other-prompts-form="vm.forms.otherPrompts" other-prompts-form="vm.forms.otherPrompts"