cleanup and lint

This commit is contained in:
David Kennedy 2025-01-16 15:09:32 -05:00
parent 088140a37d
commit f9fa8772e5
No known key found for this signature in database
GPG key ID: 6528A5386E66B96B
5 changed files with 27 additions and 106 deletions

View file

@ -29,8 +29,6 @@
* - tooltip dynamic content updated to include nested element (for better sizing control) * - tooltip dynamic content updated to include nested element (for better sizing control)
* - modal exposed to window to be accessible in other js files * - modal exposed to window to be accessible in other js files
* - fixed bug in createHeaderButton which added newlines to header button tooltips * - fixed bug in createHeaderButton which added newlines to header button tooltips
* - modified combobox to allow for blank values in list
* - modified aria label for X button in combobox to reflect modified behavior of button
* - modified combobox to handle error class * - modified combobox to handle error class
*/ */
@ -1169,13 +1167,13 @@ const enhanceComboBox = _comboBoxEl => {
}); });
} }
if (defaultValue) { if (defaultValue) {
for (let i = 0, len = selectEl.options.length; i < len; i += 1) { for (let i = 0, len = selectEl.options.length; i < len; i += 1) {
const optionEl = selectEl.options[i]; const optionEl = selectEl.options[i];
if (optionEl.value === defaultValue) { if (optionEl.value === defaultValue) {
selectedOption = optionEl; selectedOption = optionEl;
break; break;
} }
} }
} }
/** /**
@ -1501,16 +1499,16 @@ const resetSelection = el => {
const selectValue = selectEl.value; const selectValue = selectEl.value;
const inputValue = (inputEl.value || "").toLowerCase(); const inputValue = (inputEl.value || "").toLowerCase();
if (selectValue) { if (selectValue) {
for (let i = 0, len = selectEl.options.length; i < len; i += 1) { for (let i = 0, len = selectEl.options.length; i < len; i += 1) {
const optionEl = selectEl.options[i]; const optionEl = selectEl.options[i];
if (optionEl.value === selectValue) { if (optionEl.value === selectValue) {
if (inputValue !== optionEl.text) { if (inputValue !== optionEl.text) {
changeElementValue(inputEl, optionEl.text); changeElementValue(inputEl, optionEl.text);
} }
comboBoxEl.classList.add(COMBO_BOX_PRISTINE_CLASS); comboBoxEl.classList.add(COMBO_BOX_PRISTINE_CLASS);
return; return;
} }
} }
} }
if (inputValue) { if (inputValue) {
changeElementValue(inputEl); changeElementValue(inputEl);

View file

@ -1,77 +0,0 @@
import { hideElement, showElement } from './helpers.js';
export function loadInitialValuesForComboBoxes() {
var overrideDefaultClearButton = true;
var isTyping = false;
document.addEventListener('DOMContentLoaded', (event) => {
handleAllComboBoxElements();
});
function handleAllComboBoxElements() {
const comboBoxElements = document.querySelectorAll(".usa-combo-box");
comboBoxElements.forEach(comboBox => {
const input = comboBox.querySelector("input");
const select = comboBox.querySelector("select");
if (!input || !select) {
console.warn("No combobox element found");
return;
}
// Set the initial value of the combobox
let initialValue = select.getAttribute("data-default-value");
let clearInputButton = comboBox.querySelector(".usa-combo-box__clear-input");
if (!clearInputButton) {
console.warn("No clear element found");
return;
}
// Override the default clear button behavior such that it no longer clears the input,
// it just resets to the data-initial-value.
// Due to the nature of how uswds works, this is slightly hacky.
// Input event listener to detect typing
input.addEventListener("input", () => {
isTyping = true;
});
// Blur event listener to reset typing state
input.addEventListener("blur", () => {
isTyping = false;
});
// Hide the reset button when there is nothing to reset.
// Do this once on init, then everytime a change occurs.
updateClearButtonVisibility(select, initialValue, clearInputButton)
select.addEventListener("change", () => {
updateClearButtonVisibility(select, initialValue, clearInputButton)
});
// Change the default input behaviour - have it reset to the data default instead
clearInputButton.addEventListener("click", (e) => {
if (overrideDefaultClearButton) {
e.preventDefault();
e.stopPropagation();
input.click();
// Find the dropdown option with the desired value
const dropdownOptions = document.querySelectorAll(".usa-combo-box__list-option");
if (dropdownOptions) {
dropdownOptions.forEach(option => {
if (option.getAttribute("data-value") === initialValue) {
// Simulate a click event on the dropdown option
option.click();
}
});
}
}
});
});
}
function updateClearButtonVisibility(select, initialValue, clearInputButton) {
if (select.value === initialValue) {
hideElement(clearInputButton);
}else {
showElement(clearInputButton)
}
}
}

View file

@ -3,7 +3,6 @@ import { initDomainValidators } from './domain-validators.js';
import { initFormsetsForms, triggerModalOnDsDataForm, nameserversFormListener } from './formset-forms.js'; import { initFormsetsForms, triggerModalOnDsDataForm, nameserversFormListener } from './formset-forms.js';
import { initializeUrbanizationToggle } from './urbanization.js'; import { initializeUrbanizationToggle } from './urbanization.js';
import { userProfileListener, finishUserSetupListener } from './user-profile.js'; import { userProfileListener, finishUserSetupListener } from './user-profile.js';
import { loadInitialValuesForComboBoxes } from './combobox.js';
import { handleRequestingEntityFieldset } from './requesting-entity.js'; import { handleRequestingEntityFieldset } from './requesting-entity.js';
import { initDomainsTable } from './table-domains.js'; import { initDomainsTable } from './table-domains.js';
import { initDomainRequestsTable } from './table-domain-requests.js'; import { initDomainRequestsTable } from './table-domain-requests.js';
@ -31,8 +30,6 @@ initializeUrbanizationToggle();
userProfileListener(); userProfileListener();
finishUserSetupListener(); finishUserSetupListener();
//loadInitialValuesForComboBoxes();
handleRequestingEntityFieldset(); handleRequestingEntityFieldset();
initDomainsTable(); initDomainsTable();

View file

@ -73,12 +73,14 @@ class RequestingEntityForm(RegistrarForm):
self.fields["sub_organization"].queryset = queryset self.fields["sub_organization"].queryset = queryset
# Modify the choices to include "other" so that form can display options properly # Modify the choices to include "other" so that form can display options properly
self.fields["sub_organization"].choices = [("", "--Select--")] + [ self.fields["sub_organization"].choices = (
(obj.id, str(obj)) for obj in queryset [("", "--Select--")]
] + [("other", "Other (enter your suborganization manually)")] + [(obj.id, str(obj)) for obj in queryset]
+ [("other", "Other (enter your suborganization manually)")]
)
@classmethod @classmethod
def from_database(cls, obj: DomainRequest | None): def from_database(cls, obj: DomainRequest | Contact | None):
"""Returns a dict of form field values gotten from `obj`. """Returns a dict of form field values gotten from `obj`.
Overrides RegistrarForm method in order to set sub_organization to 'other' Overrides RegistrarForm method in order to set sub_organization to 'other'
on GETs of the RequestingEntityForm.""" on GETs of the RequestingEntityForm."""
@ -86,9 +88,11 @@ class RequestingEntityForm(RegistrarForm):
return {} return {}
# get the domain request as a dict, per usual method # get the domain request as a dict, per usual method
domain_request_dict = {name: getattr(obj, name) for name in cls.declared_fields.keys()} # type: ignore domain_request_dict = {name: getattr(obj, name) for name in cls.declared_fields.keys()} # type: ignore
# set sub_organization to 'other' if is_requesting_new_suborganization is True # set sub_organization to 'other' if is_requesting_new_suborganization is True
if obj.is_requesting_new_suborganization(): if isinstance(obj, DomainRequest) and obj.is_requesting_new_suborganization():
domain_request_dict["sub_organization"] = "other" domain_request_dict["sub_organization"] = "other"
return domain_request_dict return domain_request_dict
def clean_sub_organization(self): def clean_sub_organization(self):
@ -116,7 +120,6 @@ class RequestingEntityForm(RegistrarForm):
) )
return name return name
def full_clean(self): def full_clean(self):
"""Validation logic to temporarily remove the custom suborganization value before clean is triggered. """Validation logic to temporarily remove the custom suborganization value before clean is triggered.
Without this override, the form will throw an 'invalid option' error.""" Without this override, the form will throw an 'invalid option' error."""

View file

@ -560,7 +560,7 @@ class PortfolioDomainRequestWizard(DomainRequestWizard):
class RequestingEntity(DomainRequestWizard): class RequestingEntity(DomainRequestWizard):
template_name = "domain_request_requesting_entity.html" template_name = "domain_request_requesting_entity.html"
forms = [forms.RequestingEntityYesNoForm, forms.RequestingEntityForm] forms = [forms.RequestingEntityYesNoForm, forms.RequestingEntityForm]
def save(self, forms: list): def save(self, forms: list):
"""Override of save to clear or associate certain suborganization data """Override of save to clear or associate certain suborganization data
depending on what the user wishes to do. For instance, we want to add a suborganization depending on what the user wishes to do. For instance, we want to add a suborganization