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 @@Requested by | {{ request.user_identity.user }} | @@ -91,7 +91,7 @@
Requested by | {{ request.user_identity.user }} | @@ -161,7 +161,7 @@