diff --git a/src/registrar/assets/js/get-gov.js b/src/registrar/assets/js/get-gov.js index 0d450b9e5..83e575dc5 100644 --- a/src/registrar/assets/js/get-gov.js +++ b/src/registrar/assets/js/get-gov.js @@ -1826,6 +1826,9 @@ document.addEventListener('DOMContentLoaded', function() { } function setupListener(){ + + + document.querySelectorAll('[id$="__edit-button"]').forEach(function(button) { // Get the "{field_name}" and "edit-button" let fieldIdParts = button.id.split("__") @@ -1849,11 +1852,26 @@ document.addEventListener('DOMContentLoaded', function() { let firstName = document.querySelector("#id_first_name"); let middleName = document.querySelector("#id_middle_name"); let lastName = document.querySelector("#id_last_name"); - if (firstName && lastName) { + if (firstName && lastName && firstName.value && lastName.value) { let values = [firstName.value, middleName.value, lastName.value] readonlyField.innerHTML = values.join(" "); }else { - readonlyField.innerHTML = "Unknown"; + let fullNameField = document.querySelector('#full_name__edit-button-readonly'); + let svg = fullNameField.querySelector("svg use") + if (svg) { + const currentHref = svg.getAttribute('xlink:href'); + if (currentHref) { + const parts = currentHref.split('#'); + if (parts.length === 2) { + // Keep the path before '#' and replace the part after '#' with 'invalid' + const newHref = parts[0] + '#error'; + svg.setAttribute('xlink:href', newHref); + fullNameField.classList.add("input-with-edit-button__error") + label = fullNameField.querySelector(".input-with-edit-button__readonly-field") + label.innerHTML = "Unknown"; + } + } + } } // Technically, the full_name field is optional, but we want to display it as required. @@ -1873,6 +1891,7 @@ document.addEventListener('DOMContentLoaded', function() { function showInputOnErrorFields(){ document.addEventListener('DOMContentLoaded', function() { + // Get all input elements within the form let form = document.querySelector("#finish-profile-setup-form"); let inputs = form ? form.querySelectorAll("input") : null; @@ -1911,9 +1930,9 @@ document.addEventListener('DOMContentLoaded', function() { }); }; - // Hookup all edit buttons to the `handleEditButtonClick` function setupListener(); // Show the input fields if an error exists showInputOnErrorFields(); + })(); diff --git a/src/registrar/forms/user_profile.py b/src/registrar/forms/user_profile.py index 1c6c87d36..2a6ed4a47 100644 --- a/src/registrar/forms/user_profile.py +++ b/src/registrar/forms/user_profile.py @@ -93,10 +93,7 @@ class FinishSetupProfileForm(UserProfileForm): self.fields["title"].label = "Title or role in your organization" # Define the "full_name" value - full_name = "" + full_name = None if self.instance.first_name and self.instance.last_name: - full_name = self.instance.get_formatted_name(return_unknown_when_none=False) + full_name = self.instance.get_formatted_name() self.fields["full_name"].initial = full_name - - # Set full_name as required for styling purposes - self.fields["full_name"].widget.attrs["required"] = "required" diff --git a/src/registrar/models/contact.py b/src/registrar/models/contact.py index 6beca316a..903633749 100644 --- a/src/registrar/models/contact.py +++ b/src/registrar/models/contact.py @@ -87,13 +87,10 @@ class Contact(TimeStampedModel): return getattr(self, relation).count() > threshold return False - def get_formatted_name(self, return_unknown_when_none=True): + def get_formatted_name(self): """Returns the contact's name in Western order.""" names = [n for n in [self.first_name, self.middle_name, self.last_name] if n] - if names: - return " ".join(names) - else: - return "Unknown" if return_unknown_when_none else None + return " ".join(names) if names else "Unknown" def has_contact_info(self): return bool(self.title or self.email or self.phone) diff --git a/src/registrar/models/user.py b/src/registrar/models/user.py index c542335ec..87b7799d3 100644 --- a/src/registrar/models/user.py +++ b/src/registrar/models/user.py @@ -161,13 +161,10 @@ class User(AbstractUser): """Return count of ineligible requests""" return self.domain_requests_created.filter(status=DomainRequest.DomainRequestStatus.INELIGIBLE).count() - def get_formatted_name(self, return_unknown_when_none=True): + def get_formatted_name(self): """Returns the contact's name in Western order.""" names = [n for n in [self.first_name, self.middle_name, self.last_name] if n] - if names: - return " ".join(names) - else: - return "Unknown" if return_unknown_when_none else None + return " ".join(names) if names else "Unknown" def has_contact_info(self): return bool(self.title or self.email or self.phone)