From 1b813cabf8e7bbb5d75e59abd6161394683e3b69 Mon Sep 17 00:00:00 2001 From: David Kennedy Date: Mon, 23 Dec 2024 09:16:24 -0500 Subject: [PATCH 01/14] table sort on icon only --- src/registrar/assets/src/js/getgov/table-base.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/registrar/assets/src/js/getgov/table-base.js b/src/registrar/assets/src/js/getgov/table-base.js index e526c6b5f..e9830ca0e 100644 --- a/src/registrar/assets/src/js/getgov/table-base.js +++ b/src/registrar/assets/src/js/getgov/table-base.js @@ -495,8 +495,10 @@ export class BaseTable { // Add event listeners to table headers for sorting initializeTableHeaders() { this.tableHeaders.forEach(header => { - header.addEventListener('click', () => { - const sortBy = header.getAttribute('data-sortable'); + const sortBy = header.getAttribute('data-sortable'); + // add event listener to respond to clicks on the button + let button = header.querySelector('.usa-table__header__button') + button.addEventListener('click', () => { let order = 'asc'; // sort order will be ascending, unless the currently sorted column is ascending, and the user // is selecting the same column to sort in descending order From f817dbdf18c2d2aceb148a310373ad6e98638c96 Mon Sep 17 00:00:00 2001 From: David Kennedy Date: Mon, 23 Dec 2024 09:32:58 -0500 Subject: [PATCH 02/14] simulate button click outside button --- src/registrar/assets/src/js/getgov/table-base.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/registrar/assets/src/js/getgov/table-base.js b/src/registrar/assets/src/js/getgov/table-base.js index e9830ca0e..8f47ca53a 100644 --- a/src/registrar/assets/src/js/getgov/table-base.js +++ b/src/registrar/assets/src/js/getgov/table-base.js @@ -495,10 +495,12 @@ export class BaseTable { // Add event listeners to table headers for sorting initializeTableHeaders() { this.tableHeaders.forEach(header => { - const sortBy = header.getAttribute('data-sortable'); + // add event listener to respond to clicks on the button - let button = header.querySelector('.usa-table__header__button') - button.addEventListener('click', () => { + + header.addEventListener('click', function(event) { + let button = header.querySelector('.usa-table__header__button') + const sortBy = header.getAttribute('data-sortable'); let order = 'asc'; // sort order will be ascending, unless the currently sorted column is ascending, and the user // is selecting the same column to sort in descending order @@ -507,6 +509,11 @@ export class BaseTable { } // load the results with the updated sort this.loadTable(1, sortBy, order); + // Check if the click occurred outside the button + if (!button.contains(event.target)) { + // Simulate a button click + button.click(); + } }); }); } From ebe8aa7f782bc56882e6da8902280177a6392559 Mon Sep 17 00:00:00 2001 From: David Kennedy Date: Mon, 23 Dec 2024 09:41:14 -0500 Subject: [PATCH 03/14] header click updates button --- src/registrar/assets/src/js/getgov/table-base.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/registrar/assets/src/js/getgov/table-base.js b/src/registrar/assets/src/js/getgov/table-base.js index 8f47ca53a..97c256734 100644 --- a/src/registrar/assets/src/js/getgov/table-base.js +++ b/src/registrar/assets/src/js/getgov/table-base.js @@ -495,10 +495,7 @@ export class BaseTable { // Add event listeners to table headers for sorting initializeTableHeaders() { this.tableHeaders.forEach(header => { - - // add event listener to respond to clicks on the button - - header.addEventListener('click', function(event) { + header.addEventListener('click', event => { let button = header.querySelector('.usa-table__header__button') const sortBy = header.getAttribute('data-sortable'); let order = 'asc'; @@ -509,7 +506,9 @@ export class BaseTable { } // load the results with the updated sort this.loadTable(1, sortBy, order); - // Check if the click occurred outside the button + // If the click occurs outside of the button, need to simulate a button click in order + // for USWDS listener on the button to execute. + // Check first to see if click occurs outside of the button if (!button.contains(event.target)) { // Simulate a button click button.click(); From 549f099c53013a861ae88181857942c7b0f1e7ec Mon Sep 17 00:00:00 2001 From: David Kennedy Date: Mon, 23 Dec 2024 10:10:35 -0500 Subject: [PATCH 04/14] fix sort on creator column in domain request table --- src/registrar/views/domain_requests_json.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/registrar/views/domain_requests_json.py b/src/registrar/views/domain_requests_json.py index d0e673adf..6dffc534e 100644 --- a/src/registrar/views/domain_requests_json.py +++ b/src/registrar/views/domain_requests_json.py @@ -109,6 +109,10 @@ def apply_sorting(queryset, request): sort_by = request.GET.get("sort_by", "id") # Default to 'id' order = request.GET.get("order", "asc") # Default to 'asc' + # Handle special case for 'creator' + if sort_by == "creator": + sort_by = "creator__email" + if order == "desc": sort_by = f"-{sort_by}" return queryset.order_by(sort_by) From fcf842853f6219afb02f54dfc00809a770364e38 Mon Sep 17 00:00:00 2001 From: David Kennedy Date: Mon, 23 Dec 2024 10:56:19 -0500 Subject: [PATCH 05/14] initial implementation of scss changes for arrow spacing --- src/registrar/assets/src/sass/_theme/_tables.scss | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/registrar/assets/src/sass/_theme/_tables.scss b/src/registrar/assets/src/sass/_theme/_tables.scss index 45f0b5245..9c5cf8884 100644 --- a/src/registrar/assets/src/sass/_theme/_tables.scss +++ b/src/registrar/assets/src/sass/_theme/_tables.scss @@ -91,5 +91,13 @@ th { th[data-sortable]:not([aria-sort]) .usa-table__header__button { right: auto; } + + th[data-sortable][aria-sort=ascending] .usa-table__header__button { + right: auto; + } + + th[data-sortable][aria-sort=descending] .usa-table__header__button { + right: auto; + } } } From e2cc041feec92cef6146a00cd472ebaddac81eff Mon Sep 17 00:00:00 2001 From: David Kennedy Date: Mon, 23 Dec 2024 10:57:53 -0500 Subject: [PATCH 06/14] condensed version --- .../assets/src/sass/_theme/_tables.scss | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/registrar/assets/src/sass/_theme/_tables.scss b/src/registrar/assets/src/sass/_theme/_tables.scss index 9c5cf8884..ea160396e 100644 --- a/src/registrar/assets/src/sass/_theme/_tables.scss +++ b/src/registrar/assets/src/sass/_theme/_tables.scss @@ -88,16 +88,14 @@ th { } @include at-media(tablet-lg) { - th[data-sortable]:not([aria-sort]) .usa-table__header__button { - right: auto; - } - - th[data-sortable][aria-sort=ascending] .usa-table__header__button { - right: auto; - } - - th[data-sortable][aria-sort=descending] .usa-table__header__button { + th[data-sortable] .usa-table__header__button { right: auto; + + &[aria-sort=ascending], + &[aria-sort=descending], + &:not([aria-sort]) { + right: auto; + } } } } From 76ebec01ce0e0220904b2d4705c5341e4b33c5fe Mon Sep 17 00:00:00 2001 From: David Kennedy Date: Tue, 24 Dec 2024 12:46:02 -0500 Subject: [PATCH 07/14] refactored domain request form modal to remove hidden input --- .../src/js/getgov/domain-request-form.js | 12 ++++++++++ src/registrar/assets/src/js/getgov/helpers.js | 14 +++++++++++ src/registrar/assets/src/js/getgov/main.js | 3 +++ .../templates/domain_request_form.html | 14 ++++++++++- src/registrar/templates/includes/modal.html | 24 ++++++++++++++++--- src/registrar/views/domain_request.py | 13 ---------- 6 files changed, 63 insertions(+), 17 deletions(-) create mode 100644 src/registrar/assets/src/js/getgov/domain-request-form.js diff --git a/src/registrar/assets/src/js/getgov/domain-request-form.js b/src/registrar/assets/src/js/getgov/domain-request-form.js new file mode 100644 index 000000000..d9b660a50 --- /dev/null +++ b/src/registrar/assets/src/js/getgov/domain-request-form.js @@ -0,0 +1,12 @@ +import { submitForm } from './helpers.js'; + +export function initDomainRequestForm() { + document.addEventListener('DOMContentLoaded', function() { + const button = document.getElementById("domain-request-form-submit-button"); + if (button) { + button.addEventListener("click", function () { + submitForm("submit-domain-request-form"); + }); + } + }); +} \ No newline at end of file diff --git a/src/registrar/assets/src/js/getgov/helpers.js b/src/registrar/assets/src/js/getgov/helpers.js index 1afd84520..4b893ae7c 100644 --- a/src/registrar/assets/src/js/getgov/helpers.js +++ b/src/registrar/assets/src/js/getgov/helpers.js @@ -75,3 +75,17 @@ export function debounce(handler, cooldown=600) { export function getCsrfToken() { return document.querySelector('input[name="csrfmiddlewaretoken"]').value; } + +/** + * Helper function to submit a form + * @param {} form_id - the id of the form to be submitted + */ +export function submitForm(form_id) { + let form = document.getElementById(form_id); + if (form) { + console.log("submitting form"); + form.submit(); + } else { + console.error("Form '" + form_id + "' not found."); + } +} diff --git a/src/registrar/assets/src/js/getgov/main.js b/src/registrar/assets/src/js/getgov/main.js index f5ebc83a3..cee28e7a0 100644 --- a/src/registrar/assets/src/js/getgov/main.js +++ b/src/registrar/assets/src/js/getgov/main.js @@ -11,6 +11,7 @@ import { initMembersTable } from './table-members.js'; import { initMemberDomainsTable } from './table-member-domains.js'; import { initEditMemberDomainsTable } from './table-edit-member-domains.js'; import { initPortfolioNewMemberPageToggle, initAddNewMemberPageListeners, initPortfolioMemberPageRadio } from './portfolio-member-page.js'; +import { initDomainRequestForm } from './domain-request-form.js'; initDomainValidators(); @@ -36,6 +37,8 @@ initMembersTable(); initMemberDomainsTable(); initEditMemberDomainsTable(); +initDomainRequestForm(); + // Init the portfolio new member page initPortfolioMemberPageRadio(); initPortfolioNewMemberPageToggle(); diff --git a/src/registrar/templates/domain_request_form.html b/src/registrar/templates/domain_request_form.html index a076220cb..aeae9fb34 100644 --- a/src/registrar/templates/domain_request_form.html +++ b/src/registrar/templates/domain_request_form.html @@ -130,9 +130,21 @@ aria-describedby="Are you sure you want to submit a domain request?" data-force-action > - {% include 'includes/modal.html' with is_domain_request_form=True review_form_is_complete=review_form_is_complete modal_heading=modal_heading|safe modal_description=modal_description|safe modal_button=modal_button|safe %} + {% if review_form_is_complete %} + {% with modal_heading="You are about to submit a domain request for " domain_name_modal=requested_domain__name modal_description="Once you submit this request, you won’t be able to edit it until we review it. You’ll only be able to withdraw your request." modal_button_id="domain-request-form-submit-button" modal_button_text="Submit request" %} + {% include 'includes/modal.html' %} + {% endwith %} + {% else %} + {% with modal_heading="Your request form is incomplete" modal_description='This request cannot be submitted yet. Return to the request and visit the steps that are marked as "incomplete."' modal_button_text="Return to request" cancel_button_only=True %} + {% include 'includes/modal.html' %} + {% endwith %} + {% endif %} +
+ {% csrf_token %} +
+ {% block after_form_content %}{% endblock %} diff --git a/src/registrar/templates/includes/modal.html b/src/registrar/templates/includes/modal.html index 625044585..72a989484 100644 --- a/src/registrar/templates/includes/modal.html +++ b/src/registrar/templates/includes/modal.html @@ -24,8 +24,26 @@