mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-07-24 03:30:50 +02:00
some js refactors
This commit is contained in:
parent
0aef61a875
commit
8b4b4872c3
1 changed files with 84 additions and 53 deletions
|
@ -1,67 +1,98 @@
|
||||||
import { showElement, hideElement } from './helpers';
|
import { showElement, hideElement } from './helpers';
|
||||||
|
|
||||||
function handleAddFormClick(e) {
|
export class NameserverForm {
|
||||||
let nameserversForm = document.querySelector('.nameservers-form');
|
constructor() {
|
||||||
if (!nameserversForm) {
|
this.addNameserverButton = document.getElementById('nameserver-add-form');
|
||||||
console.warn('Expected DOM element but did not find it');
|
this.nameserversForm = document.querySelector('.nameservers-form');
|
||||||
return;
|
|
||||||
|
// Bind event handlers to maintain 'this' context
|
||||||
|
this.handleAddFormClick = this.handleAddFormClick.bind(this);
|
||||||
|
this.handleEditClick = this.handleEditClick.bind(this);
|
||||||
|
this.handleCancelClick = this.handleCancelClick.bind(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
init() {
|
||||||
|
this.initializeNameserverFormDisplay();
|
||||||
|
this.initializeEventListeners();
|
||||||
|
}
|
||||||
|
|
||||||
|
initializeNameserverFormDisplay() {
|
||||||
|
// Check if exactly two nameserver forms exist: id_form-1-server is present but id_form-2-server is not
|
||||||
|
const secondNameserver = document.getElementById('id_form-1-server');
|
||||||
|
const thirdNameserver = document.getElementById('id_form-2-server'); // This should not exist
|
||||||
|
|
||||||
|
// Check if there are error messages in the form (indicated by elements with class 'usa-alert--error')
|
||||||
|
const errorMessages = document.querySelectorAll('.usa-alert--error');
|
||||||
|
|
||||||
|
if (secondNameserver && !thirdNameserver && errorMessages.length > 0) {
|
||||||
|
showElement(this.nameserversForm);
|
||||||
|
hideElement(this.addNameserverButton);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
initializeEventListeners() {
|
||||||
|
this.addNameserverButton.addEventListener('click', this.handleAddFormClick);
|
||||||
|
|
||||||
showElement(nameserversForm);
|
const editButtons = document.querySelectorAll('.nameserver-edit');
|
||||||
|
editButtons.forEach(editButton => {
|
||||||
|
editButton.addEventListener('click', this.handleEditClick);
|
||||||
|
});
|
||||||
|
|
||||||
if (e?.target) {
|
const cancelButtons = document.querySelectorAll('.nameserver-cancel');
|
||||||
hideElement(e.target);
|
cancelButtons.forEach(cancelButton => {
|
||||||
}
|
cancelButton.addEventListener('click', this.handleCancelClick);
|
||||||
}
|
});
|
||||||
|
|
||||||
function handleEditClick(e) {
|
|
||||||
let editButton = e.target;
|
|
||||||
let readOnlyRow = editButton.closest('tr'); // Find the closest row
|
|
||||||
let editRow = readOnlyRow.nextElementSibling; // Get the next row
|
|
||||||
|
|
||||||
if (!editRow || !readOnlyRow) {
|
|
||||||
console.warn("Expected DOM element but did not find it");
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if any other edit row is currently visible and hide it
|
handleAddFormClick(event) {
|
||||||
document.querySelectorAll('tr.edit-row:not(.display-none)').forEach(openEditRow => {
|
showElement(this.nameserversForm);
|
||||||
let correspondingReadOnlyRow = openEditRow.previousElementSibling;
|
hideElement(this.addNameserverButton);
|
||||||
hideElement(openEditRow);
|
}
|
||||||
showElement(correspondingReadOnlyRow);
|
|
||||||
});
|
handleEditClick(e) {
|
||||||
|
let editButton = e.target;
|
||||||
hideElement(readOnlyRow);
|
let readOnlyRow = editButton.closest('tr'); // Find the closest row
|
||||||
showElement(editRow);
|
let editRow = readOnlyRow.nextElementSibling; // Get the next row
|
||||||
}
|
|
||||||
|
if (!editRow || !readOnlyRow) {
|
||||||
function handleCancelClick(e) {
|
console.warn("Expected DOM element but did not find it");
|
||||||
let cancelButton = e.target;
|
return;
|
||||||
let editRow = cancelButton.closest('tr'); // Find the closest row
|
}
|
||||||
let readOnlyRow = editRow.previousElementSibling; // Get the next row
|
|
||||||
|
// Check if any other edit row is currently visible and hide it
|
||||||
if (!editRow || !readOnlyRow) {
|
document.querySelectorAll('tr.edit-row:not(.display-none)').forEach(openEditRow => {
|
||||||
console.warn("Expected DOM element but did not find it");
|
let correspondingReadOnlyRow = openEditRow.previousElementSibling;
|
||||||
return;
|
hideElement(openEditRow);
|
||||||
|
showElement(correspondingReadOnlyRow);
|
||||||
|
});
|
||||||
|
|
||||||
|
hideElement(readOnlyRow);
|
||||||
|
showElement(editRow);
|
||||||
|
}
|
||||||
|
|
||||||
|
handleCancelClick(e) {
|
||||||
|
let cancelButton = e.target;
|
||||||
|
let editRow = cancelButton.closest('tr'); // Find the closest row
|
||||||
|
let readOnlyRow = editRow.previousElementSibling; // Get the next row
|
||||||
|
|
||||||
|
if (!editRow || !readOnlyRow) {
|
||||||
|
console.warn("Expected DOM element but did not find it");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
hideElement(editRow);
|
||||||
|
showElement(readOnlyRow);
|
||||||
}
|
}
|
||||||
|
|
||||||
hideElement(editRow);
|
|
||||||
showElement(readOnlyRow);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function initFormNameservers() {
|
export function initFormNameservers() {
|
||||||
const addButton = document.getElementById('nameserver-add-form');
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
if (!addButton) return;
|
|
||||||
|
|
||||||
addButton.addEventListener('click', handleAddFormClick);
|
// Initialize NameserverForm if nameserver-add-form button is present in DOM
|
||||||
|
if (document.getElementById('nameserver-add-form')) {
|
||||||
const editButtons = document.querySelectorAll('.nameserver-edit');
|
const nameserverForm = new NameserverForm();
|
||||||
editButtons.forEach(editButton => {
|
nameserverForm.init();
|
||||||
editButton.addEventListener('click', handleEditClick);
|
}
|
||||||
});
|
});
|
||||||
|
}
|
||||||
const cancelButtons = document.querySelectorAll('.nameserver-cancel');
|
|
||||||
cancelButtons.forEach(cancelButton => {
|
|
||||||
cancelButton.addEventListener('click', handleCancelClick);
|
|
||||||
})
|
|
||||||
}
|
|
Loading…
Add table
Add a link
Reference in a new issue