diff --git a/src/registrar/admin.py b/src/registrar/admin.py index ff8046da9..01ad5e960 100644 --- a/src/registrar/admin.py +++ b/src/registrar/admin.py @@ -640,6 +640,17 @@ class ContactAdmin(ListHeaderAdmin): # in autocomplete_fields for user ordering = ["first_name", "last_name", "email"] + fieldsets = [ + ( + None, + { + "fields": ["user", "first_name", "middle_name", "last_name", "title", "email", "phone"] + }, + ) + ] + + change_form_template = "django/admin/public_contact_change_form.html" + # We name the custom prop 'contact' because linter # is not allowing a short_description attr on it # This gets around the linter limitation, for now. @@ -1805,6 +1816,12 @@ class DraftDomainAdmin(ListHeaderAdmin): ordering = ["name"] +class PublicContactAdmin(ListHeaderAdmin): + """Custom PublicContact admin class.""" + + change_form_template = "django/admin/public_contact_change_form.html" + + class VerifiedByStaffAdmin(ListHeaderAdmin): list_display = ("email", "requestor", "truncated_notes", "created_at") search_fields = ["email"] @@ -1845,7 +1862,7 @@ admin.site.register(models.DraftDomain, DraftDomainAdmin) # do not propagate to registry and logic not applied admin.site.register(models.Host, MyHostAdmin) admin.site.register(models.Website, WebsiteAdmin) -admin.site.register(models.PublicContact, AuditedAdmin) +admin.site.register(models.PublicContact, PublicContactAdmin) admin.site.register(models.DomainRequest, DomainRequestAdmin) admin.site.register(models.TransitionDomain, TransitionDomainAdmin) admin.site.register(models.VerifiedByStaff, VerifiedByStaffAdmin) diff --git a/src/registrar/assets/sass/_theme/_admin.scss b/src/registrar/assets/sass/_theme/_admin.scss index dc67bc8b6..6909f77c2 100644 --- a/src/registrar/assets/sass/_theme/_admin.scss +++ b/src/registrar/assets/sass/_theme/_admin.scss @@ -299,3 +299,22 @@ input.admin-confirm-button { display: contents !important; } } + +.admin-icon-group { + position: relative; + display: flex; + align-items: center; + + .usa-button__icon { + position: absolute; + right: 0; + top: 0; + height: 100%; + border: none; + background: transparent; + padding: 0 1rem; + margin: 0; + } +} + + diff --git a/src/registrar/templates/admin/fieldset.html b/src/registrar/templates/admin/fieldset.html new file mode 100644 index 000000000..dadae5811 --- /dev/null +++ b/src/registrar/templates/admin/fieldset.html @@ -0,0 +1,49 @@ +{% load i18n static %} + +{% comment %} +This is copied from Djangos implementation of this template, with added "blocks" +It is not inherently customizable on its own, so we can modify this instead. +https://github.com/django/django/blob/main/django/contrib/admin/templates/admin/includes/fieldset.html +{% endcomment %} +
\ No newline at end of file diff --git a/src/registrar/templates/django/admin/includes/contact_fieldset.html b/src/registrar/templates/django/admin/includes/contact_fieldset.html new file mode 100644 index 000000000..c2a10f4fd --- /dev/null +++ b/src/registrar/templates/django/admin/includes/contact_fieldset.html @@ -0,0 +1,48 @@ +{% extends "admin/fieldset.html" %} +{% load i18n static %} + +{% comment %} +This is using a custom implementation fieldset.html (see admin/fieldset.html) +{% endcomment %} +{% block fieldset_lines %} +{% for line in fieldset %} + +{% endfor %} + +{% endblock fieldset_lines %} diff --git a/src/registrar/templates/django/admin/public_contact_change_form.html b/src/registrar/templates/django/admin/public_contact_change_form.html new file mode 100644 index 000000000..181201d0b --- /dev/null +++ b/src/registrar/templates/django/admin/public_contact_change_form.html @@ -0,0 +1,8 @@ +{% extends 'admin/change_form.html' %} +{% load i18n static %} + +{% block field_sets %} + {% for fieldset in adminform %} + {% include "django/admin/includes/contact_fieldset.html" %} + {% endfor %} +{% endblock %}