diff --git a/src/registrar/forms/application_wizard.py b/src/registrar/forms/application_wizard.py index 56d62ce2b..43730cde9 100644 --- a/src/registrar/forms/application_wizard.py +++ b/src/registrar/forms/application_wizard.py @@ -12,6 +12,7 @@ from django.contrib.auth.mixins import LoginRequiredMixin from django.urls import resolve from formtools.wizard.views import NamedUrlSessionWizardView # type: ignore +from formtools.wizard.storage.session import SessionStorage from registrar.models import Contact, DomainApplication, Domain @@ -382,6 +383,19 @@ WIZARD_CONDITIONS = { } +class TrackingStorage(SessionStorage): + + """Storage subclass that keeps track of what the current_step has been.""" + + def _set_current_step(self, step): + super()._set_current_step(step) + + step_history = self.extra_data.setdefault("step_history", []) + # can't serialize a set, so keep list entries unique + if step not in step_history: + step_history.append(step) + + class ApplicationWizard(LoginRequiredMixin, NamedUrlSessionWizardView): """Multi-page form ("wizard") for new domain applications. @@ -397,6 +411,7 @@ class ApplicationWizard(LoginRequiredMixin, NamedUrlSessionWizardView): """ form_list = FORMS + storage_name = "registrar.forms.application_wizard.TrackingStorage" def get_template_names(self): """Template for the current step. @@ -418,6 +433,14 @@ class ApplicationWizard(LoginRequiredMixin, NamedUrlSessionWizardView): """Add title information to the context for all steps.""" context = super().get_context_data(form=form, **kwargs) context["form_titles"] = TITLES + + # Add information about which steps should be unlocked + # TODO: sometimes the first step doesn't get added to the step history + # so add it here + context["visited"] = self.storage.extra_data.get("step_history", []) + [ + self.steps.first + ] + if self.steps.current == Step.ORGANIZATION_CONTACT: context["is_federal"] = self._is_federal() if self.steps.current == Step.REVIEW: diff --git a/src/registrar/templates/application_sidebar.html b/src/registrar/templates/application_sidebar.html index 60b619e8b..be4f86509 100644 --- a/src/registrar/templates/application_sidebar.html +++ b/src/registrar/templates/application_sidebar.html @@ -3,7 +3,7 @@