Refactor settings EditView to make better use of generic EditView (#12635)

pull/11202/head
Sage Abdullah 2024-11-28 10:52:14 +00:00 zatwierdzone przez Matt Westcott
rodzic b81b899c0c
commit f8f99833f2
9 zmienionych plików z 21 dodań i 42 usunięć

Wyświetl plik

@ -72,6 +72,7 @@ Changelog
* Maintenance: Add unit tests, Storybook stories & JSDoc items for the Stimulus `DrilldownController` (Srishti Jaiswal)
* Maintenance: Enhance sidebar preview performance by eliminating duplicate asset loads on preview error (Sage Abdullah)
* Maintenance: Remove unused `LinkController` (`w-link`) (Sage Abdullah)
* Maintenance: Refactor settings `EditView` to make better use of generic `EditView` (Sage Abdullah)
6.3.2 (xx.xx.xxxx) - IN DEVELOPMENT

Wyświetl plik

@ -91,6 +91,7 @@ depth: 1
* Add unit tests, Storybook stories & JSDoc items for the Stimulus `DrilldownController` (Srishti Jaiswal)
* Enhance sidebar preview performance by eliminating duplicate asset loads on preview error (Sage Abdullah)
* Remove unused `LinkController` (`w-link`) (Sage Abdullah)
* Refactor settings `EditView` to make better use of generic `EditView` (Sage Abdullah)
## Upgrade considerations - changes affecting all projects

Wyświetl plik

@ -1,5 +1,5 @@
{% extends "wagtailadmin/generic/edit.html" %}
{% load i18n wagtailadmin_tags %}
{% load i18n %}
{% block before_form %}
{% if site_switcher %}
@ -11,7 +11,3 @@
</form>
{% endif %}
{% endblock %}
{% block form_content %}
{{ edit_handler.render_form_content }}
{% endblock %}

Wyświetl plik

@ -233,11 +233,8 @@ class TestGenericSettingEditView(BaseTestGenericSettingView):
def test_register_with_icon(self):
edit_url = reverse("wagtailsettings:edit", args=("tests", "IconGenericSetting"))
edit_response = self.client.get(edit_url, follow=True)
self.assertContains(
edit_response,
"""<svg class="icon icon-icon-setting-tag w-header__glyph" aria-hidden="true"><use href="#icon-icon-setting-tag"></use></svg>""",
)
soup = self.get_soup(edit_response.content)
self.assertIsNotNone(soup.select_one("h2 svg use[href='#icon-tag']"))
def test_edit_invalid(self):
response = self.post(post_data={"foo": "bar"})

Wyświetl plik

@ -21,4 +21,4 @@ class GenericSettingRegisterTestCase(WagtailTestUtils, TestCase):
def test_icon(self):
admin = self.client.get(reverse("wagtailadmin_home"))
self.assertContains(admin, "icon-setting-tag")
self.assertContains(admin, '"tag"')

Wyświetl plik

@ -230,11 +230,8 @@ class TestSiteSettingEditView(BaseTestSiteSettingView):
def test_register_with_icon(self):
edit_url = reverse("wagtailsettings:edit", args=("tests", "IconGenericSetting"))
edit_response = self.client.get(edit_url, follow=True)
self.assertContains(
edit_response,
"""<svg class="icon icon-icon-setting-tag w-header__glyph" aria-hidden="true"><use href="#icon-icon-setting-tag"></use></svg>""",
)
soup = self.get_soup(edit_response.content)
self.assertIsNotNone(soup.select_one("h2 svg use[href='#icon-tag']"))
def test_edit_invalid(self):
response = self.post(post_data={"foo": "bar"})

Wyświetl plik

@ -21,4 +21,4 @@ class TestRegister(WagtailTestUtils, TestCase):
def test_icon(self):
admin = self.client.get(reverse("wagtailadmin_home"))
self.assertContains(admin, "icon-setting-tag")
self.assertContains(admin, '"tag"')

Wyświetl plik

@ -81,8 +81,10 @@ def redirect_to_relevant_instance(request, app_name, model_name):
class EditView(generic.EditView):
template_name = "wagtailsettings/edit.html"
edit_url_name = "wagtailsettings:edit"
error_message = gettext_lazy("The setting could not be saved due to errors.")
permission_required = "change"
_show_breadcrumbs = True
def setup(self, request, app_name, model_name, *args, **kwargs):
self.app_name = app_name
@ -92,6 +94,9 @@ class EditView(generic.EditView):
self.pk = kwargs.get(self.pk_url_kwarg)
super().setup(request, app_name, model_name, *args, **kwargs)
def get_header_icon(self):
return registry._model_icons.get(self.model)
def get_object(self, queryset=None):
self.site = None
if issubclass(self.model, BaseSiteSetting):
@ -100,12 +105,12 @@ class EditView(generic.EditView):
else:
return get_object_or_404(self.model, pk=self.pk)
def get_form_class(self):
return get_setting_edit_handler(self.model).get_form_class()
def get_panel(self):
return get_setting_edit_handler(self.model)
def get_edit_url(self):
return reverse(
"wagtailsettings:edit",
self.edit_url_name,
args=(self.app_name, self.model_name, self.pk),
)
@ -121,27 +126,9 @@ class EditView(generic.EditView):
site_switcher = None
if self.site and Site.objects.count() > 1:
site_switcher = SiteSwitchForm(self.site, self.model)
media = context.get("media") + site_switcher.media
form = self.get_form()
edit_handler = get_setting_edit_handler(self.model).get_bound_panel(
instance=self.object, request=self.request, form=form
)
media = form.media + edit_handler.media
header_icon = registry._model_icons.get(self.model)
context.update(
{
"edit_handler": edit_handler,
"site_switcher": site_switcher,
"media": media,
"header_icon": header_icon,
}
)
context["media"] += site_switcher.media
context["site_switcher"] = site_switcher
return context
def get_success_url(self):

Wyświetl plik

@ -1839,12 +1839,12 @@ class ImportantPagesGenericSetting(BaseGenericSetting):
verbose_name_plural = _("Important pages settings")
@register_setting(icon="icon-setting-tag")
@register_setting(icon="tag")
class IconSiteSetting(BaseSiteSetting):
pass
@register_setting(icon="icon-setting-tag")
@register_setting(icon="tag")
class IconGenericSetting(BaseGenericSetting):
pass