revise error msg and log errors

This commit is contained in:
Rachid Mrad 2024-12-30 21:38:35 -05:00
parent 1547a107ea
commit 99a60c09e7
No known key found for this signature in database
9 changed files with 91 additions and 37 deletions

View file

@ -1,9 +1,17 @@
export function hideElement(element) {
element.classList.add('display-none');
if (element) {
element.classList.add('display-none');
} else {
throw new Error('hideElement expected a passed DOM element as an argument, but none was provided.');
}
};
export function showElement(element) {
element.classList.remove('display-none');
if (element) {
element.classList.remove('display-none');
} else {
throw new Error('showElement expected a passed DOM element as an argument, but none was provided.');
}
};
/**

View file

@ -143,7 +143,7 @@ export class BaseTable {
this.statusCheckboxes = document.querySelectorAll(`.${this.sectionSelector} input[name="filter-status"]`);
this.statusIndicator = document.getElementById(`${this.sectionSelector}__filter-indicator`);
this.statusToggle = document.getElementById(`${this.sectionSelector}__usa-button--filter`);
this.noTableWrapper = document.getElementById(`${this.sectionSelector}__no-data`);
this.noDataTableWrapper = document.getElementById(`${this.sectionSelector}__no-data`);
this.noSearchResultsWrapper = document.getElementById(`${this.sectionSelector}__no-search-results`);
this.portfolioElement = document.getElementById('portfolio-js-value');
this.portfolioValue = this.portfolioElement ? this.portfolioElement.getAttribute('data-portfolio') : null;
@ -451,7 +451,7 @@ export class BaseTable {
}
// handle the display of proper messaging in the event that no members exist in the list or search returns no results
this.updateDisplay(data, this.tableWrapper, this.noTableWrapper, this.noSearchResultsWrapper, this.currentSearchTerm);
this.updateDisplay(data, this.tableWrapper, this.noDataTableWrapper, this.noSearchResultsWrapper, this.currentSearchTerm);
// identify the DOM element where the list of results will be inserted into the DOM
const tbody = this.tableWrapper.querySelector('tbody');
tbody.innerHTML = '';

View file

@ -22,7 +22,7 @@ export class EditMemberDomainsTable extends BaseTable {
this.editModeContainer = document.getElementById('domain-assignments-edit-view');
this.readonlyModeContainer = document.getElementById('domain-assignments-readonly-view');
this.reviewButton = document.getElementById('review-domain-assignments');
this.backButton = document.querySelectorAll('.back-to-edit-domain-assignments');
this.backButton = document.getElementById('back-to-edit-domain-assignments');
this.saveButton = document.getElementById('save-domain-assignments');
this.initializeDomainAssignments();
this.initCancelEditDomainAssignmentButton();
@ -326,17 +326,15 @@ export class EditMemberDomainsTable extends BaseTable {
this.showReadonlyMode();
});
} else {
console.warn('Missing DOM element. Expected element with id review-domain-assignments')
console.warn('Missing DOM element. Expected element with id review-domain-assignments');
}
if (this.backButton.length == 2) {
this.backButton.forEach(backbutton => {
backbutton.addEventListener('click', () => {
this.showEditMode();
});
if (this.backButton) {
this.backButton.addEventListener('click', () => {
this.showEditMode();
});
} else {
console.warn('Missing one or more DOM element. Expected 2 elements with class back-to-edit-domain-assignments')
console.warn('Missing DOM element. Expected element with id back-to-edit-domain-assignments');
}
if (this.saveButton) {
@ -344,7 +342,7 @@ export class EditMemberDomainsTable extends BaseTable {
this.submitChanges();
});
} else {
console.warn('Missing DOM element. Expected element with id save-domain-assignments')
console.warn('Missing DOM element. Expected element with id save-domain-assignments');
}
}
}

View file

@ -1,4 +1,5 @@
import { showElement, hideElement } from './helpers.js';
import { BaseTable } from './table-base.js';
export class MemberDomainsTable extends BaseTable {
@ -24,7 +25,28 @@ export class MemberDomainsTable extends BaseTable {
`;
tbody.appendChild(row);
}
updateDisplay = (data, dataWrapper, noDataWrapper, noSearchResultsWrapper) => {
const { unfiltered_total, total } = data;
const searchSection = document.getElementById('edit-member-domains__search');
if (!searchSection) console.warn('MemberDomainsTable updateDisplay expected an element with id edit-member-domains__search but none was found');
if (unfiltered_total) {
showElement(searchSection);
if (total) {
showElement(dataWrapper);
hideElement(noSearchResultsWrapper);
hideElement(noDataWrapper);
} else {
hideElement(dataWrapper);
showElement(noSearchResultsWrapper);
hideElement(noDataWrapper);
}
} else {
hideElement(searchSection);
hideElement(dataWrapper);
hideElement(noSearchResultsWrapper);
showElement(noDataWrapper);
}
};
}
export function initMemberDomainsTable() {

View file

@ -34,7 +34,7 @@
{% endif %}
</h2>
<div class="section-outlined__header margin-bottom-3 grid-row">
<div class="section-outlined__header margin-bottom-3 grid-row" id="edit-member-domains__search">
<!-- ---------- SEARCH ---------- -->
<div class="section-outlined__search mobile:grid-col-12 desktop:grid-col-9">
<section aria-label="Member domains search component" class="margin-top-2">

View file

@ -100,7 +100,8 @@
<li class="usa-button-group__item">
<button
type="button"
class="usa-button usa-button--outline back-to-edit-domain-assignments"
class="usa-button usa-button--outline"
id="back-to-edit-domain-assignments"
>
Back
</button>

View file

@ -134,7 +134,6 @@
id="invite-member-modal"
aria-labelledby="invite-member-heading"
aria-describedby="confirm-invite-description"
style="display: none;"
>
<div class="usa-modal__content">
<div class="usa-modal__main">

View file

@ -121,21 +121,22 @@ class PortfolioMembersJson(PortfolioMembersPermission, View):
def initial_invitations_search(self, portfolio):
"""Perform initial invitations search and get related DomainInvitation data based on the email."""
# Subquery to get concatenated domain information for each email
domain_invitations = DomainInvitation.objects.filter(
email=OuterRef("email"),
domain__domain_info__portfolio=portfolio
).annotate(
concatenated_info=Concat(
F("domain__id"), Value(":"), F("domain__name"), output_field=CharField()
)
).values("concatenated_info")
concatenated_domain_info = domain_invitations.values("email").annotate(
domain_info=StringAgg("concatenated_info", delimiter=", ")
).values("domain_info")
# Subquery to get concatenated domain information for each email
domain_invitations = (
DomainInvitation.objects.filter(email=OuterRef("email"), domain__domain_info__portfolio=portfolio)
.annotate(
concatenated_info=Concat(F("domain__id"), Value(":"), F("domain__name"), output_field=CharField())
)
.values("concatenated_info")
)
concatenated_domain_info = (
domain_invitations.values("email")
.annotate(domain_info=StringAgg("concatenated_info", delimiter=", "))
.values("domain_info")
)
# PortfolioInvitation query
invitations = PortfolioInvitation.objects.filter(portfolio=portfolio)
invitations = invitations.annotate(

View file

@ -15,6 +15,7 @@ from registrar.models.user_domain_role import UserDomainRole
from registrar.models.user_portfolio_permission import UserPortfolioPermission
from registrar.models.utility.portfolio_helper import UserPortfolioPermissionChoices, UserPortfolioRoleChoices
from registrar.utility.email import EmailSendingError
from registrar.utility.enums import DefaultUserValues
from registrar.views.utility.mixins import PortfolioMemberPermission
from registrar.views.utility.permission_views import (
PortfolioDomainRequestsPermissionView,
@ -250,10 +251,18 @@ class PortfolioMemberDomainsEditView(PortfolioMemberDomainsEditPermissionView, V
messages.success(request, "The domain assignment changes have been saved.")
return redirect(reverse("member-domains", kwargs={"pk": pk}))
except IntegrityError:
messages.error(request, "A database error occurred while saving changes.")
messages.error(
request,
f"A database error occurred while saving changes. If the issue persists, please contact {DefaultUserValues.HELP_EMAIL}",
)
logger.error("A database error occurred while saving changes.")
return redirect(reverse("member-domains-edit", kwargs={"pk": pk}))
except Exception as e:
messages.error(request, f"An unexpected error occurred: {str(e)}")
messages.error(
request,
f"An unexpected error occurred: {str(e)}. If the issue persists, please contact {DefaultUserValues.HELP_EMAIL}",
)
logger.error(f"An unexpected error occurred: {str(e)}")
return redirect(reverse("member-domains-edit", kwargs={"pk": pk}))
else:
messages.info(request, "No changes detected.")
@ -266,7 +275,11 @@ class PortfolioMemberDomainsEditView(PortfolioMemberDomainsEditPermissionView, V
try:
return json.loads(domain_data) if domain_data else []
except json.JSONDecodeError:
messages.error(self.request, f"Invalid data for {domain_type}.")
messages.error(
self.request,
f"Invalid data for {domain_type}. If the issue persists, please contact {DefaultUserValues.HELP_EMAIL}",
)
logger.error(f"Invalid data for {domain_type}")
return None
def _process_added_domains(self, added_domain_ids, member):
@ -438,10 +451,18 @@ class PortfolioInvitedMemberDomainsEditView(PortfolioMemberDomainsEditPermission
messages.success(request, "The domain assignment changes have been saved.")
return redirect(reverse("invitedmember-domains", kwargs={"pk": pk}))
except IntegrityError:
messages.error(request, "A database error occurred while saving changes.")
messages.error(
request,
f"A database error occurred while saving changes. If the issue persists, please contact {DefaultUserValues.HELP_EMAIL}.",
)
logger.error(f"A database error occurred while saving changes.")
return redirect(reverse("invitedmember-domains-edit", kwargs={"pk": pk}))
except Exception as e:
messages.error(request, f"An unexpected error occurred: {str(e)}")
messages.error(
request,
f"An unexpected error occurred: {str(e)}. If the issue persists, please contact {DefaultUserValues.HELP_EMAIL}",
)
logger.error(f"An unexpected error occurred: {str(e)}.")
return redirect(reverse("invitedmember-domains-edit", kwargs={"pk": pk}))
else:
messages.info(request, "No changes detected.")
@ -454,7 +475,11 @@ class PortfolioInvitedMemberDomainsEditView(PortfolioMemberDomainsEditPermission
try:
return json.loads(domain_data) if domain_data else []
except json.JSONDecodeError:
messages.error(self.request, f"Invalid data for {domain_type}.")
messages.error(
self.request,
f"Invalid data for {domain_type}. If the issue persists, please contact {DefaultUserValues.HELP_EMAIL}.",
)
logger.error(f"Invalid data for {domain_type}.")
return None
def _process_added_domains(self, added_domain_ids, email):