further fixes to formset validation, and display updates

This commit is contained in:
David Kennedy 2025-03-04 13:29:41 -05:00
parent d8c98c08da
commit dabac5935f
No known key found for this signature in database
GPG key ID: 6528A5386E66B96B
3 changed files with 13 additions and 12 deletions

View file

@ -35,6 +35,8 @@ export class NameserverForm {
const domainName = document.getElementById('id_form-0-domain'); const domainName = document.getElementById('id_form-0-domain');
if (domainName) { if (domainName) {
this.domain = domainName.value; this.domain = domainName.value;
} else {
console.warn("Form expects a dom element, id_form-0-domain");
} }
// Check if exactly two nameserver forms exist: id_form-1-server is present but id_form-2-server is not // Check if exactly two nameserver forms exist: id_form-1-server is present but id_form-2-server is not
@ -56,7 +58,7 @@ export class NameserverForm {
// handle display of table view errors // handle display of table view errors
// if error exists in an edit-row, make that row show, and readonly row hide // if error exists in an edit-row, make that row show, and readonly row hide
const formTable = document.querySelector('.usa-table') const formTable = document.getElementById('nameserver-table')
if (formTable) { if (formTable) {
const editRows = formTable.querySelectorAll('.edit-row'); const editRows = formTable.querySelectorAll('.edit-row');
editRows.forEach(editRow => { editRows.forEach(editRow => {

View file

@ -184,8 +184,8 @@ class BaseNameserverFormset(forms.BaseFormSet):
"""Check for duplicate entries in the formset and ensure at least two valid nameservers.""" """Check for duplicate entries in the formset and ensure at least two valid nameservers."""
error_message = "At least two name servers are required." error_message = "At least two name servers are required."
valid_forms, empty_forms = self._categorize_forms(error_message) valid_forms, invalid_forms, empty_forms = self._categorize_forms(error_message)
self._enforce_minimum_nameservers(valid_forms, empty_forms, error_message) self._enforce_minimum_nameservers(valid_forms, invalid_forms, empty_forms, error_message)
if any(self.errors): # Skip further validation if individual forms already have errors if any(self.errors): # Skip further validation if individual forms already have errors
return return
@ -193,31 +193,30 @@ class BaseNameserverFormset(forms.BaseFormSet):
self._check_for_duplicates() self._check_for_duplicates()
def _categorize_forms(self, error_message): def _categorize_forms(self, error_message):
"""Sort forms into valid or empty based on the 'server' field.""" """Sort forms into valid, invalid or empty based on the 'server' field."""
valid_forms = [] valid_forms = []
invalid_forms = []
empty_forms = [] empty_forms = []
for form in self.forms: for form in self.forms:
if not self._is_server_validation_needed(form, error_message): if not self._is_server_validation_needed(form, error_message):
invalid_forms.append(form)
continue continue
server = form.cleaned_data.get("server", "").strip() server = form.cleaned_data.get("server", "").strip()
if server: if server:
valid_forms.append(form) valid_forms.append(form)
else: else:
empty_forms.append(form) empty_forms.append(form)
return valid_forms, empty_forms return valid_forms, invalid_forms, empty_forms
def _is_server_validation_needed(self, form, error_message): def _is_server_validation_needed(self, form, error_message):
"""Determine if server validation should be performed on a given form.""" """Determine if server validation should be performed on a given form."""
return form.is_valid() or list(form.errors.get("server", [])) == [error_message] return form.is_valid() or list(form.errors.get("server", [])) == [error_message]
def _enforce_minimum_nameservers(self, valid_forms, empty_forms, error_message): def _enforce_minimum_nameservers(self, valid_forms, invalid_forms, empty_forms, error_message):
"""Ensure at least two nameservers are provided, adjusting error messages as needed. This accounts """Ensure at least two nameservers are provided, adjusting error messages as needed."""
for three forms, where the last form is empty and one of the first two forms has an error. In that case if len(valid_forms) + len(invalid_forms) < 2:
will want to remove the 'at least two valid servers' error."""
if len(valid_forms) < 2 and len(self.forms) < 3:
self._add_required_error(empty_forms, error_message) self._add_required_error(empty_forms, error_message)
else: else:
self._remove_required_error_from_forms(error_message) self._remove_required_error_from_forms(error_message)

View file

@ -109,7 +109,7 @@
{% endfor %} {% endfor %}
<table class="usa-table usa-table--borderless usa-table--stacked dotgov-table dotgov-table--stacked"> <table class="usa-table usa-table--borderless usa-table--stacked dotgov-table dotgov-table--stacked" id="nameserver-table">
<caption class="sr-only">Your registered domains</caption> <caption class="sr-only">Your registered domains</caption>
<thead> <thead>
<tr> <tr>