diff --git a/CHANGELOG.txt b/CHANGELOG.txt index eb0fa48ce0..98058d96d4 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -8,6 +8,7 @@ Changelog * Fix: Ensure that modal tabs width are not impacted by side panel opening (LB (Ben) Johnston) * Fix: Resolve issue local development of docs when running `make livehtml` (Sage Abdullah) * Fix: Resolve issue with unwanted padding in chooser modal listings (Sage Abdullah) + * Fix: Ensure `get_add_url()` is always used to re-render the add button when the listing is refreshed in viewsets (Sage Abdullah) * Docs: Update Sphinx theme to `6.3.0` with a fix for the missing favicon (Sage Abdullah) diff --git a/docs/releases/6.0.2.md b/docs/releases/6.0.2.md index 3ffb219012..819fb306e7 100644 --- a/docs/releases/6.0.2.md +++ b/docs/releases/6.0.2.md @@ -16,6 +16,7 @@ depth: 1 * Ensure that modal tabs width are not impacted by side panel opening (LB (Ben) Johnston) * Resolve issue local development of docs when running `make livehtml` (Sage Abdullah) * Resolve issue with unwanted padding in chooser modal listings (Sage Abdullah) + * Ensure `get_add_url()` is always used to re-render the add button when the listing is refreshed in viewsets (Sage Abdullah) ### Documentation diff --git a/wagtail/admin/templates/wagtailadmin/generic/index_results.html b/wagtail/admin/templates/wagtailadmin/generic/index_results.html index 022bc598a3..02fbb42f23 100644 --- a/wagtail/admin/templates/wagtailadmin/generic/index_results.html +++ b/wagtail/admin/templates/wagtailadmin/generic/index_results.html @@ -12,6 +12,14 @@ {% endif %} + {% if render_buttons_fragment %} + + {% endif %} + {% if is_searching and view.show_other_searches %}
{% search_other %} diff --git a/wagtail/admin/templates/wagtailadmin/shared/headers/slim_header.html b/wagtail/admin/templates/wagtailadmin/shared/headers/slim_header.html index cae299f69d..42f82a8b0b 100644 --- a/wagtail/admin/templates/wagtailadmin/shared/headers/slim_header.html +++ b/wagtail/admin/templates/wagtailadmin/shared/headers/slim_header.html @@ -49,7 +49,7 @@ {% if actions or block_actions %} {# Actions divider #}
-
+
{% firstof actions block_actions %}
{% endif %} diff --git a/wagtail/admin/views/generic/base.py b/wagtail/admin/views/generic/base.py index 80996bb32f..f552d978c4 100644 --- a/wagtail/admin/views/generic/base.py +++ b/wagtail/admin/views/generic/base.py @@ -442,5 +442,8 @@ class BaseListingView(WagtailAdminTemplateMixin, BaseListView): and self.filters and self.results_only ) + context["render_buttons_fragment"] = ( + context.get("header_buttons") and self.results_only + ) return context diff --git a/wagtail/admin/views/generic/models.py b/wagtail/admin/views/generic/models.py index aea0d27ba4..4556970b33 100644 --- a/wagtail/admin/views/generic/models.py +++ b/wagtail/admin/views/generic/models.py @@ -334,7 +334,6 @@ class IndexView( self.add_item_label, url=self.add_url, icon_name="plus", - attrs={"data-w-link-reflect-keys-value": '["locale"]'}, ) ) return buttons @@ -349,10 +348,6 @@ class IndexView( url=self.xlsx_export_url, icon_name="download", priority=90, - attrs={ - "data-controller": "w-link", - "data-w-link-preserve-keys-value": '["export"]', - }, ) ) buttons.append( @@ -361,10 +356,6 @@ class IndexView( url=self.csv_export_url, icon_name="download", priority=100, - attrs={ - "data-controller": "w-link", - "data-w-link-preserve-keys-value": '["export"]', - }, ) ) diff --git a/wagtail/admin/widgets/button.py b/wagtail/admin/widgets/button.py index 5b3b45263d..bb8c6a4063 100644 --- a/wagtail/admin/widgets/button.py +++ b/wagtail/admin/widgets/button.py @@ -109,9 +109,8 @@ class HeaderButton(Button): attrs = attrs.copy() attrs.update( { - "data-controller": "w-tooltip w-link", + "data-controller": "w-tooltip", "data-w-tooltip-content-value": label, - "data-action": "w-swap:success@document->w-link#setParamsFromSwapRequest", "aria-label": label, } ) diff --git a/wagtail/snippets/tests/test_viewset.py b/wagtail/snippets/tests/test_viewset.py index 05058c3a95..e395dd201d 100644 --- a/wagtail/snippets/tests/test_viewset.py +++ b/wagtail/snippets/tests/test_viewset.py @@ -1530,3 +1530,35 @@ class TestCustomMethods(BaseSnippetViewSetTests): soup = self.get_soup(response.content) links = soup.find_all("a", attrs={"href": add_url}) self.assertEqual(len(links), 1) + + def test_index_results_view_get_add_url_teleports_to_header(self): + response = self.client.get(self.get_url("list_results")) + add_url = self.get_url("add") + "?customised=param" + soup = self.get_soup(response.content) + template = soup.find( + "template", + { + "data-controller": "w-teleport", + "data-w-teleport-target-value": "#w-slim-header-buttons", + }, + ) + self.assertIsNotNone(template) + links = template.find_all("a", attrs={"href": add_url}) + self.assertEqual(len(links), 1) + + @override_settings(WAGTAIL_I18N_ENABLED=True) + def test_index_results_view_get_add_url_teleports_to_header_with_i18n(self): + Locale.objects.create(language_code="fr") + response = self.client.get(self.get_url("list_results") + "?locale=fr") + add_url = self.get_url("add") + "?locale=fr&customised=param" + soup = self.get_soup(response.content) + template = soup.find( + "template", + { + "data-controller": "w-teleport", + "data-w-teleport-target-value": "#w-slim-header-buttons", + }, + ) + self.assertIsNotNone(template) + links = template.find_all("a", attrs={"href": add_url}) + self.assertEqual(len(links), 1)