From c05a4237cf6d01f3df773407fe24a2475f48676d Mon Sep 17 00:00:00 2001 From: David Kennedy Date: Tue, 29 Oct 2024 14:18:47 -0400 Subject: [PATCH] wip --- src/registrar/assets/js/get-gov.js | 15 +++--- src/registrar/templates/portfolio_member.html | 1 + src/registrar/views/portfolios.py | 48 ++++++++++++------- 3 files changed, 38 insertions(+), 26 deletions(-) diff --git a/src/registrar/assets/js/get-gov.js b/src/registrar/assets/js/get-gov.js index 9d1fec9bb..f499098bb 100644 --- a/src/registrar/assets/js/get-gov.js +++ b/src/registrar/assets/js/get-gov.js @@ -239,6 +239,7 @@ function deleteMember(member_delete_url, pageToDisplay) { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', + 'X-Requested-With': 'XMLHttpRequest', 'X-CSRFToken': csrfToken, }, body: formData @@ -1200,7 +1201,7 @@ function initializeTooltips() { * */ function initializeModals() { - window.modal.on(); + window.modal.on(); } /** @@ -3030,7 +3031,7 @@ document.addEventListener("DOMContentLoaded", () => { }); console.log("AFTER LISTENER") - addModal(member_email, member_id, num_domains, member_delete_url, wrapperDeleteAction); + addModal(member_email, unique_id, num_domains, member_delete_url, wrapperDeleteAction); initializeModals(); @@ -3041,15 +3042,11 @@ document.addEventListener("DOMContentLoaded", () => { const submitButton = modal.querySelector('.usa-modal__submit'); const closeButton = modal.querySelector('.usa-modal__close'); submitButton.addEventListener('click', () => { - let pk = submitButton.getAttribute('data-pk'); closeButton.click(); - // If we're deleting the last item on a page that is not page 1, we'll need to refresh the display to the previous page - let pageToDisplay = data.page; - if (data.total == 1 && data.unfiltered_total > 1) { - pageToDisplay--; + let delete_member_form = document.getElementById("member-delete-form"); + if (delete_member_form) { + delete_member_form.submit(); } - - deleteMember(pk, pageToDisplay); }); }); } diff --git a/src/registrar/templates/portfolio_member.html b/src/registrar/templates/portfolio_member.html index 9e00375b2..3b03c09ea 100644 --- a/src/registrar/templates/portfolio_member.html +++ b/src/registrar/templates/portfolio_member.html @@ -60,6 +60,7 @@ {% endif %} +
{% csrf_token %}
Last active: {% if member and member.last_login %} diff --git a/src/registrar/views/portfolios.py b/src/registrar/views/portfolios.py index a28ab42af..9be10448b 100644 --- a/src/registrar/views/portfolios.py +++ b/src/registrar/views/portfolios.py @@ -2,6 +2,7 @@ import logging from django.http import HttpResponse, Http404, JsonResponse from django.shortcuts import render from django.urls import reverse +from django.utils.safestring import mark_safe from django.contrib import messages from registrar.forms.portfolio import ( @@ -114,29 +115,42 @@ class PortfolioMemberDeleteView(PortfolioMemberPermission, View): support_url = "https://get.gov/contact/" - # If they have any in progress requests + error_message = '' + if active_requests_count > 0: - return JsonResponse( - { - "error": f"This member has an active domain request and can't be removed from the organization. " - f"Contact the .gov team to remove them." - }, - status=400, + # If they have any in progress requests + error_message = mark_safe( + f"This member has an active domain request and can't be removed from the organization. " + f"Contact the .gov team to remove them." + ) + elif member.is_only_admin_of_portfolio(portfolio_member_permission.portfolio): + # If they are the last manager of a domain + error_message = ( + "There must be at least one admin in your organization. Give another member admin " + "permissions, make sure they log into the registrar, and then remove this member." ) - # If they are the last manager of a domain - if member.is_only_admin_of_portfolio(portfolio_member_permission.portfolio): - return JsonResponse( - { - "error": "There must be at least one admin in your organization. Give another member admin \n" - "persmissions, make sure they log into the registrar, and then remove this member." - }, - status=400, - ) + if error_message: + if request.headers.get("X-Requested-With") == "XMLHttpRequest": + return JsonResponse( + { + "error": error_message + }, + status=400, + ) + else: + messages.error(request, error_message) + return redirect(reverse('member', kwargs={'pk': pk})) + # passed all error conditions portfolio_member_permission.delete() - return JsonResponse({"success": f"You've removed {member.email} from the organization."}, status=200) + success_message = f"You've removed {member.email} from the organization." + if request.headers.get("X-Requested-With") == "XMLHttpRequest": + return JsonResponse({"success": success_message}, status=200) + else: + messages.success(request, success_message) + return redirect(reverse('members')) class PortfolioMemberEditView(PortfolioMemberEditPermissionView, View):