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
No known key found for this signature in database
GPG Key ID: 0E56ED990CDFCB4F
4 changed files with 69 additions and 17 deletions

View File

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

View File

@ -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();">
<ng-transclude></ng-transclude>
</button>

View File

@ -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) => {

View File

@ -22,7 +22,7 @@
read-only-prompts="vm.readOnlyPrompts">
</prompt-credential>
</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-data="vm.promptDataClone"
other-prompts-form="vm.forms.otherPrompts"