Skip to content

Commit 025cd85

Browse files
feat(nimbus): add save and continue redirects to new nimbus forms (#12590)
Because * We want the Save and Continue buttons on all the new Nimbus UI forms to save and redirect to the next form This commit * Adds a mixin to handle redirecting to the next form or the summary page after the audience form * Updates the save buttons in the templates * Adds tests fixes #11400
1 parent 9877724 commit 025cd85

File tree

6 files changed

+72
-7
lines changed

6 files changed

+72
-7
lines changed

experimenter/experimenter/nimbus_ui_new/templates/nimbus_experiments/edit_audience.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,10 @@ <h4>Audience</h4>
201201
</div>
202202
<div class="d-flex justify-content-end">
203203
<button type="submit" class="btn btn-primary">Save</button>
204-
<button type="submit" class="btn btn-secondary ms-2">Save and Continue</button>
204+
<button type="submit"
205+
name="save_action"
206+
value="continue"
207+
class="btn btn-secondary ms-2">Save and Continue</button>
205208
</div>
206209
{% if form.is_bound %}
207210
{% if form.is_valid %}

experimenter/experimenter/nimbus_ui_new/templates/nimbus_experiments/edit_branches.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,10 @@ <h4>Localization</h4>
173173
</div>
174174
<div class="d-flex justify-content-end">
175175
<button type="submit" class="btn btn-primary">Save</button>
176-
<button type="submit" class="btn btn-secondary ms-2">Save and Continue</button>
176+
<button type="submit"
177+
name="save_action"
178+
value="continue"
179+
class="btn btn-secondary ms-2">Save and Continue</button>
177180
</div>
178181
{% if form.is_bound %}
179182
<div class="toast text-bg-success position-fixed top-0 end-0 m-3 w-auto"

experimenter/experimenter/nimbus_ui_new/templates/nimbus_experiments/edit_metrics.html

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,11 @@ <h4>Metrics</h4>
7878
</div>
7979
</div>
8080
<div class="d-flex justify-content-end">
81-
<button class="btn btn-primary">Save</button>
82-
<button class="btn btn-secondary ms-2">Save and Continue</button>
81+
<button type="submit" class="btn btn-primary">Save</button>
82+
<button type="submit"
83+
name="save_action"
84+
value="continue"
85+
class="btn btn-secondary ms-2">Save and Continue</button>
8386
</div>
8487
{% if form.is_bound %}
8588
<div class="toast text-bg-success position-absolute top-0 end-0 m-3 w-auto"

experimenter/experimenter/nimbus_ui_new/templates/nimbus_experiments/edit_overview.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,10 @@ <h4>Overview</h4>
194194
</div>
195195
<div class="d-flex justify-content-end">
196196
<button type="submit" class="btn btn-primary">Save</button>
197-
<button type="submit" class="btn btn-secondary ms-2">Save and Continue</button>
197+
<button type="submit"
198+
name="save_action"
199+
value="continue"
200+
class="btn btn-secondary ms-2">Save and Continue</button>
198201
</div>
199202
{% if form.is_bound %}
200203
{% if form.is_valid %}

experimenter/experimenter/nimbus_ui_new/tests/test_views.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2334,3 +2334,36 @@ def test_invalid_form_fields_without_show_errors(self):
23342334

23352335
validation_errors = response.context["validation_errors"]
23362336
self.assertEqual(validation_errors, {})
2337+
2338+
2339+
class TestSaveAndContinueMixin(AuthTestCase):
2340+
@parameterized.expand(
2341+
[
2342+
(
2343+
"nimbus-new-update-overview",
2344+
"nimbus-new-update-branches",
2345+
{
2346+
"name": "new name",
2347+
"documentation_links-TOTAL_FORMS": "0",
2348+
"documentation_links-INITIAL_FORMS": "0",
2349+
},
2350+
),
2351+
("nimbus-new-update-branches", "nimbus-new-update-metrics", {}),
2352+
("nimbus-new-update-metrics", "nimbus-new-update-audience", {}),
2353+
("nimbus-new-update-audience", "nimbus-new-detail", {}),
2354+
]
2355+
)
2356+
def test_get_redirects_to_next_step(self, current_url, next_url, data):
2357+
experiment = NimbusExperimentFactory.create_with_lifecycle(
2358+
NimbusExperimentFactory.Lifecycles.CREATED
2359+
)
2360+
response = self.client.post(
2361+
reverse(current_url, kwargs={"slug": experiment.slug}),
2362+
{**data, "save_action": "continue"},
2363+
headers={"Hx-Request": "true"},
2364+
)
2365+
self.assertEqual(response.status_code, 200)
2366+
self.assertEqual(
2367+
response.headers["HX-Redirect"],
2368+
reverse(next_url, kwargs={"slug": experiment.slug}),
2369+
)

experimenter/experimenter/nimbus_ui_new/views.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,22 @@ def form_valid(self, form):
343343
return response
344344

345345

346+
class SaveAndContinueMixin:
347+
def form_valid(self, form):
348+
response = super().form_valid(form)
349+
if (
350+
self.request.headers.get("HX-Request")
351+
and self.request.POST.get("save_action") == "continue"
352+
):
353+
response = HttpResponse()
354+
response.headers["HX-Redirect"] = reverse(
355+
self.continue_url_name, kwargs={"slug": self.object.slug}
356+
)
357+
return response
358+
359+
346360
class OverviewUpdateView(
361+
SaveAndContinueMixin,
347362
NimbusExperimentViewMixin,
348363
RequestFormMixin,
349364
RenderResponseMixin,
@@ -353,6 +368,7 @@ class OverviewUpdateView(
353368
):
354369
form_class = OverviewForm
355370
template_name = "nimbus_experiments/edit_overview.html"
371+
continue_url_name = "nimbus-new-update-branches"
356372

357373

358374
class DocumentationLinkCreateView(RenderParentDBResponseMixin, OverviewUpdateView):
@@ -372,8 +388,8 @@ class BranchesPartialUpdateView(RenderDBResponseMixin, BranchesBaseView):
372388
pass
373389

374390

375-
class BranchesUpdateView(RenderResponseMixin, BranchesBaseView):
376-
pass
391+
class BranchesUpdateView(SaveAndContinueMixin, RenderResponseMixin, BranchesBaseView):
392+
continue_url_name = "nimbus-new-update-metrics"
377393

378394

379395
class BranchCreateView(RenderParentDBResponseMixin, BranchesBaseView):
@@ -385,6 +401,7 @@ class BranchDeleteView(RenderParentDBResponseMixin, BranchesBaseView):
385401

386402

387403
class MetricsUpdateView(
404+
SaveAndContinueMixin,
388405
NimbusExperimentViewMixin,
389406
RequestFormMixin,
390407
RenderResponseMixin,
@@ -393,9 +410,11 @@ class MetricsUpdateView(
393410
):
394411
form_class = MetricsForm
395412
template_name = "nimbus_experiments/edit_metrics.html"
413+
continue_url_name = "nimbus-new-update-audience"
396414

397415

398416
class AudienceUpdateView(
417+
SaveAndContinueMixin,
399418
NimbusExperimentViewMixin,
400419
RequestFormMixin,
401420
RenderResponseMixin,
@@ -405,6 +424,7 @@ class AudienceUpdateView(
405424
):
406425
form_class = AudienceForm
407426
template_name = "nimbus_experiments/edit_audience.html"
427+
continue_url_name = "nimbus-new-detail"
408428

409429
def get_context_data(self, **kwargs):
410430
context = super().get_context_data(**kwargs)

0 commit comments

Comments
 (0)