From ea340cf320a2566d24517fb4a0c9852c5059e771 Mon Sep 17 00:00:00 2001 From: Simon Willison Date: Sat, 12 Sep 2020 14:54:01 -0700 Subject: [PATCH] Correctly persist selected facets in hidden fields Closes #963 --- datasette/templates/table.html | 3 --- datasette/views/table.py | 6 ++++++ tests/test_html.py | 10 +++++++--- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/datasette/templates/table.html b/datasette/templates/table.html index 373fd576..6b859132 100644 --- a/datasette/templates/table.html +++ b/datasette/templates/table.html @@ -88,9 +88,6 @@ {% endif %} - {% for facet in sorted_facet_results %} - - {% endfor %} {% for key, value in form_hidden_args %} {% endfor %} diff --git a/datasette/views/table.py b/datasette/views/table.py index 50f3345f..74126244 100644 --- a/datasette/views/table.py +++ b/datasette/views/table.py @@ -778,6 +778,12 @@ class TableView(RowTableShared): ) self.ds.update_with_inherited_metadata(metadata) form_hidden_args = [] + # Add currently selected facets + for arg in special_args: + if arg == "_facet" or arg.startswith("_facet_"): + form_hidden_args.extend( + (arg, item) for item in request.args.getlist(arg) + ) for arg in ("_fts_table", "_fts_pk"): if arg in special_args: form_hidden_args.append((arg, special_args[arg])) diff --git a/tests/test_html.py b/tests/test_html.py index aec4db1d..4c57bfce 100644 --- a/tests/test_html.py +++ b/tests/test_html.py @@ -448,12 +448,16 @@ def test_facet_display(app_client): def test_facets_persist_through_filter_form(app_client): - response = app_client.get("/fixtures/facetable?_facet=planet_int&_facet=city_id") + response = app_client.get( + "/fixtures/facetable?_facet=planet_int&_facet=city_id&_facet_array=tags" + ) assert response.status == 200 inputs = Soup(response.body, "html.parser").find("form").findAll("input") hiddens = [i for i in inputs if i["type"] == "hidden"] - assert [("_facet", "city_id"), ("_facet", "planet_int")] == [ - (hidden["name"], hidden["value"]) for hidden in hiddens + assert [(hidden["name"], hidden["value"]) for hidden in hiddens] == [ + ("_facet", "planet_int"), + ("_facet", "city_id"), + ("_facet_array", "tags"), ]