diff --git a/static/js/accessRequestForm.js b/static/js/accessRequestForm.js index 0dc56982..db922ee6 100644 --- a/static/js/accessRequestForm.js +++ b/static/js/accessRequestForm.js @@ -1,9 +1,24 @@ let submitted_forms = 0 +function handleButtonLoading(elem, status) { + if(status) { + elem.attr('disabled', true); + elem.html(""); + let newSpan = $("#submitButtonLoading").clone(true, true); + newSpan.removeClass("collapse"); + newSpan.appendTo(elem); + } else { + elem.attr('disabled', false); + elem.html("Submit request"); + } +} + function submitRequest(event, elem, multi, access_tag, accesses="") { event.preventDefault() form = $(elem) let actionUrl = form.attr('action'); + let button = $(form.find("button#submitButton")); + handleButtonLoading(button, true); $.ajax({ type: "POST", url: actionUrl, @@ -15,6 +30,7 @@ function submitRequest(event, elem, multi, access_tag, accesses="") { else { showNotification("failed", "Failed to send the request", "Something went wrong"); } + handleButtonLoading(button, false); } }).done(function(data, statusText, xhr) { let status = xhr.status; @@ -36,6 +52,7 @@ function submitRequest(event, elem, multi, access_tag, accesses="") { showRedirectModal("Request submitted"); } } + handleButtonLoading(button, false); }) } diff --git a/static/js/addUserToGroup.js b/static/js/addUserToGroup.js index 86f37b8e..8fb30061 100644 --- a/static/js/addUserToGroup.js +++ b/static/js/addUserToGroup.js @@ -113,10 +113,25 @@ const handleUserSelection = (elem) => { updateSelectedUser(); }; +function handleButtonLoading(elem, status) { + if(status) { + elem.attr('disabled', true); + elem.html(""); + let newSpan = $("#submitButtonLoading").clone(true, true); + newSpan.removeClass("collapse"); + newSpan.appendTo(elem); + } else { + elem.attr('disabled', false); + elem.html("Submit request"); + } +} + function submitRequest(event, elem) { event.preventDefault(); form = $(elem); let actionUrl = form.attr('action'); + let button = $(form.find("button#submitButton")); + handleButtonLoading(button, true); $.ajax({ type: "POST", url: actionUrl, @@ -128,6 +143,7 @@ function submitRequest(event, elem) { else { showNotification("failed", "Failed to send the request", "Something went wrong"); } + handleButtonLoading(button, false); } }).done(function(data, statusText, xhr) { let status = xhr.status; @@ -137,6 +153,7 @@ function submitRequest(event, elem) { else { showRedirectModal("Request submitted"); } + handleButtonLoading(button, false); }) }; diff --git a/static/js/createNewGroup.js b/static/js/createNewGroup.js index 9d5865f3..3d9bd4c0 100644 --- a/static/js/createNewGroup.js +++ b/static/js/createNewGroup.js @@ -197,6 +197,19 @@ function showRedirectModal(title, message="") { $("#modal-message").html(message); } +function handleButtonLoading(elem, status) { + if(status) { + elem.attr('disabled', true); + elem.html(""); + let newSpan = $("#submitButtonLoading").clone(true, true); + newSpan.removeClass("collapse"); + newSpan.appendTo(elem); + } else { + elem.attr('disabled', false); + elem.html("Submit request"); + } +} + function submitRequest() { const members = $('#member-selection-table').children('tr'); const emails = []; @@ -219,6 +232,8 @@ function submitRequest() { return; } else { + let button = $('#submitNewGroup'); + handleButtonLoading(button, true); $.ajax({ url: urlBuilder, type: "POST", @@ -231,7 +246,8 @@ function submitRequest() { "selectAllUsers": selectAllUsers, }, success: function (result) { - showRedirectModal("Request Submitted", result.status.msg) + showRedirectModal("Request Submitted", result.status.msg); + handleButtonLoading(button, false); }, error: function (XMLHttpRequest, textStatus, errorThrown) { if(XMLHttpRequest.responseJSON) { @@ -240,6 +256,7 @@ function submitRequest() { } else { showNotification("failed", "Something when wrong while creating the group, contact admin.", "Internal Error") } + handleButtonLoading(button, false); } }); } diff --git a/static/js/failureActions.js b/static/js/failureActions.js index bbb5542d..f314fa55 100644 --- a/static/js/failureActions.js +++ b/static/js/failureActions.js @@ -1,5 +1,31 @@ -function sendAPICall(requestId, url, messageId, desc) { - url =`${url}?requestId=${requestId}` +function handleButtonLoading(elem, status) { + let parentElem = $(elem.parentElement); + let text = $(elem).html(); + let button = $(elem); + if(status) { + parentElem.find("button#resolveButton").attr('disabled', true); + parentElem.find("button#declineButton").attr('disabled', true); + parentElem.find("button#actionButton").attr('disabled', true); + button.html(""); + let newSpan; + if (text == "Resolve") { + newSpan = $("#resolveButtonLoading").clone(true, true); + } else { + newSpan = $("#actionButtonLoading").clone(true, true); + } + newSpan.removeClass("collapse"); + newSpan.appendTo(button); + } else { + parentElem.find("button#resolveButton").attr('disabled', false); + parentElem.find("button#declineButton").attr('disabled', false); + parentElem.find("button#actionButton").attr('disabled', false); + button.html(text); + } +} + +function sendAPICall(elem, requestId, url, messageId, desc) { + url =`${url}?requestId=${requestId}`; + handleButtonLoading(elem, true); $.ajax({ url: url, error: (xhr, statusText, data) => { @@ -9,10 +35,12 @@ function sendAPICall(requestId, url, messageId, desc) { else { showNotification("failed", "Failed to send the request", "Something went wrong"); } + handleButtonLoading(elem, false); } }).done((data) => { showNotification("success", data["status_list"][0]["title"], data["status_list"][0]["msg"]); - updateStatus(desc, messageId, requestId) + updateStatus(desc, messageId, requestId); + handleButtonLoading(elem, false); }) } diff --git a/static/js/groupAccessRequestForm.js b/static/js/groupAccessRequestForm.js index 2b52d423..83dbf1f3 100644 --- a/static/js/groupAccessRequestForm.js +++ b/static/js/groupAccessRequestForm.js @@ -1,9 +1,24 @@ let submitted_forms = 0 +function handleButtonLoading(elem, status) { + if(status) { + elem.attr('disabled', true); + elem.html(""); + let newSpan = $("#submitButtonLoading").clone(true, true); + newSpan.removeClass("collapse"); + newSpan.appendTo(elem); + } else { + elem.attr('disabled', false); + elem.html("Submit request"); + } +} + function submitRequest(event, elem, multi, access_tag, accesses="") { event.preventDefault() form = $(elem) let actionUrl = form.attr('action'); + let button = $(form.find("button#submitButton")); + handleButtonLoading(button, true); $.ajax({ type: "POST", url: actionUrl, @@ -15,6 +30,7 @@ function submitRequest(event, elem, multi, access_tag, accesses="") { else { showNotification("failed", "Failed to send the request", "Something went wrong"); } + handleButtonLoading(button, false); } }).done(function(data, statusText, xhr) { let status = xhr.status; @@ -36,6 +52,7 @@ function submitRequest(event, elem, multi, access_tag, accesses="") { showRedirectModal("Request submitted"); } } + handleButtonLoading(button, false); }) } diff --git a/static/js/pendingRequests.js b/static/js/pendingRequests.js index 9a99dfdd..23b76c8d 100644 --- a/static/js/pendingRequests.js +++ b/static/js/pendingRequests.js @@ -1,7 +1,7 @@ function showDeclineModal(request_id, action, messageId) { $('#decline_modal').show(); $("#declineHeading").html("

"+request_id+"

") - $('#decline_modal').find("form").attr("onsubmit", `clickDeclineFinalButton('${request_id}', '${action}', '${messageId}');return false`) + $('#decline_modal').find("form").attr("onsubmit", `clickDeclineFinalButton(this, '${request_id}', '${action}', '${messageId}');return false`) } function closeDeclineModal() { @@ -10,20 +10,24 @@ function closeDeclineModal() { $('#decline_modal').hide(); } -const clickDeclineFinalButton = (requestId, action, messageId) => { +const clickDeclineFinalButton = (elem, requestId, action, messageId) => { closeDeclineModal(); const declineReason = $("#declineReasonText").val(); - const urlBuilder = `/decline/${action}/${requestId}` + const urlBuilder = `/decline/${action}/${requestId}`; + let button = $(elem); + handleButtonLoading(button, true); $.ajax({ url: urlBuilder, data: {"reason": declineReason}, error: function (XMLHttpRequest, textStatus, errorThrown) { if(XMLHttpRequest.responseJSON) { - showNotification("failed", XMLHttpRequest.responseJSON["response"][requestId]["error"]) + showNotification("failed", XMLHttpRequest.responseJSON["response"][requestId]["error"]); } + handleButtonLoading(button, true, "Decline"); } }).done(function (data) { - updateStatus(false, messageId, requestId) + updateStatus(false, messageId, requestId); + handleButtonLoading(button, true, "Decline"); }) } @@ -43,6 +47,19 @@ function setDeclineReason(reason) { $("#declineReasonText").val(reason); } +function handleButtonLoading(elem, status, text=null) { + if(status) { + elem.attr('disabled', true); + elem.html(""); + let svgElem = $("#buttonLoading").clone(true, true); + svgElem.removeClass("collapse"); + svgElem.appendTo(elem); + } else { + elem.attr('disabled', false); + elem.html(text); + } +} + function updateStatus(type, id, requestId) { const newMessageBox = $("#message-box").clone(true, true); const item = $(`#${id}`); @@ -62,16 +79,23 @@ function updateStatus(type, id, requestId) { $(`#${id}-actions`).hide(); } -function approveAccess(requestId, action, messageId) { +function approveAccess(elem, requestId, action, messageId) { const urlBuilder = `/accept_bulk/${action}?requestId=${encodeURIComponent(requestId)}` + let button = $(elem); + handleButtonLoading(button, true); + $(elem.parentElement).find("button#declineButton").attr('disabled', true); $.ajax({ url: urlBuilder, error: function (XMLHttpRequest, textStatus, errorThrown) { if(XMLHttpRequest.responseJSON) { showNotification("failed", XMLHttpRequest.responseJSON["response"][requestId]["error"]) } + handleButtonLoading(button, false, "Accept"); + $(elem.parentElement).find("button#declineButton").attr('disabled', false); } }).done(() => { updateStatus(true, messageId, requestId); + handleButtonLoading(button, false, "Accept"); + $(elem.parentElement).find("button#declineButton").attr('disabled', false); }) } diff --git a/templates/EnigmaOps/accessRequestForm.html b/templates/EnigmaOps/accessRequestForm.html index d936596f..3a5e98bb 100644 --- a/templates/EnigmaOps/accessRequestForm.html +++ b/templates/EnigmaOps/accessRequestForm.html @@ -89,7 +89,9 @@

Module details

- + @@ -119,10 +121,18 @@

{{ each_access.formDesc }} Modul - + {% endfor %} {% endif %} + + + + +
-
+ {% csrf_token %} @@ -175,7 +175,7 @@

All group members

- + @@ -183,6 +183,14 @@

All group members

{% include "EnigmaOps/shared/redirect_to_dashboard.html" %} + + + + + + {% include "EnigmaOps/shared/notificationTemplate.html" %} {% endblock %} diff --git a/templates/EnigmaOps/createNewGroup.html b/templates/EnigmaOps/createNewGroup.html index 7b36e15e..13882743 100644 --- a/templates/EnigmaOps/createNewGroup.html +++ b/templates/EnigmaOps/createNewGroup.html @@ -215,11 +215,10 @@

Please select members from
-
@@ -244,6 +243,14 @@

Please select members from {% include "EnigmaOps/shared/redirect_to_dashboard.html" %} + + + + + + {% include "EnigmaOps/shared/notificationTemplate.html" %} {% endblock %} diff --git a/templates/EnigmaOps/failureActions.html b/templates/EnigmaOps/failureActions.html index 8dcc9785..0ad6616f 100644 --- a/templates/EnigmaOps/failureActions.html +++ b/templates/EnigmaOps/failureActions.html @@ -59,7 +59,7 @@

Failure Actions

{% for request in grant_failures %}

{{request.request_id}}

- +
@@ -91,7 +91,7 @@

{{request.request_id}}

Requested by {{ request.user_identity.user }}
-
+
  • Resolve Instruction - check logs or email for issue. Run approval again.
  • @@ -101,9 +101,9 @@

    {{request.request_id}}

- - - + + +
{% endfor %} @@ -129,7 +129,7 @@

{{request.request_id}}

{% for request in revoke_failures %}

{{request.request_id}}

- +
@@ -161,7 +161,7 @@

{{request.request_id}}

Requested by {{ request.user_identity.user }}
-
+
  • Resolve Instruction - check logs or email for issue. Run approval again.
  • @@ -171,9 +171,9 @@

    {{request.request_id}}

- - - + + +
{% endfor %} @@ -201,6 +201,20 @@

The request - {{eachAccessDetails.requestId}} is

+ + + + + + + + + + + + {% include "EnigmaOps/shared/notificationTemplate.html" %} diff --git a/templates/EnigmaOps/groupAccessRequestForm.html b/templates/EnigmaOps/groupAccessRequestForm.html index 573f07c1..0ef1d386 100644 --- a/templates/EnigmaOps/groupAccessRequestForm.html +++ b/templates/EnigmaOps/groupAccessRequestForm.html @@ -93,7 +93,7 @@

Module details

- +
@@ -121,11 +121,18 @@

{{ each_access.formDesc }} Modul - + {% endfor %} {% endif %} {% endif %} + + + + + {% endfor %} @@ -173,8 +173,8 @@

{{group.groupRequest.group_id}}
- - + +
{% endfor %} @@ -230,8 +230,8 @@

{{member.membership_id}}

- - + +
{% endfor %} @@ -305,8 +305,8 @@

{{eachRequest.club_id}}

- - + +
@@ -356,7 +356,7 @@

{{eachRequest.club_id}}

- +
@@ -380,6 +380,15 @@

The request - {{eachAccessDetails.requestId}} is + + + + + + + {% include "EnigmaOps/shared/notificationTemplate.html" %}