Use TeleportController to re-render slim header's buttons on results refresh

Fixes #11726

# Conflicts:
#	CHANGELOG.txt
#	docs/releases/6.1.md
#	wagtail/admin/widgets/button.py
pull/11754/head
Sage Abdullah 2024-03-07 14:53:22 +00:00 zatwierdzone przez LB Johnston
rodzic 0699868cea
commit ae777245a5
8 zmienionych plików z 47 dodań i 12 usunięć

Wyświetl plik

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

Wyświetl plik

@ -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

Wyświetl plik

@ -12,6 +12,14 @@
</template>
{% endif %}
{% if render_buttons_fragment %}
<template data-controller="w-teleport" data-w-teleport-target-value="#w-slim-header-buttons" data-w-teleport-reset-value="true">
{% for button in header_buttons %}
{% component button %}
{% endfor %}
</template>
{% endif %}
{% if is_searching and view.show_other_searches %}
<div class="nice-padding">
{% search_other %}

Wyświetl plik

@ -49,7 +49,7 @@
{% if actions or block_actions %}
{# Actions divider #}
<div class="w-w-px w-h-[30px] w-ml-auto sm:w-ml-0 w-bg-border-furniture"></div>
<div class="w-flex w-items-center w-ml-3">
<div id="w-slim-header-buttons" class="w-flex w-items-center w-ml-3">
{% firstof actions block_actions %}
</div>
{% endif %}

Wyświetl plik

@ -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

Wyświetl plik

@ -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"]',
},
)
)

Wyświetl plik

@ -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,
}
)

Wyświetl plik

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