Skip to content

Commit 7c04b7e

Browse files
authored
Merge pull request #608 from Xeelee33/bugfix/manage_group_errors
Bug fix - fixed group member management errors with selecting new users, removing them, and updating the roles
2 parents db25652 + 8af21bc commit 7c04b7e

File tree

1 file changed

+61
-49
lines changed

1 file changed

+61
-49
lines changed

application/single_app/static/js/group/manage_group.js

Lines changed: 61 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,39 @@ $(document).ready(function () {
5959
}
6060
});
6161

62+
// Add event delegation for select user button in search results
63+
$(document).on("click", ".select-user-btn", function () {
64+
const id = $(this).data("user-id");
65+
const name = $(this).data("user-name");
66+
const email = $(this).data("user-email");
67+
selectUserForAdd(id, name, email);
68+
});
69+
70+
// Add event delegation for remove member button
71+
$(document).on("click", ".remove-member-btn", function () {
72+
const userId = $(this).data("user-id");
73+
removeMember(userId);
74+
});
75+
76+
// Add event delegation for change role button
77+
$(document).on("click", ".change-role-btn", function () {
78+
const userId = $(this).data("user-id");
79+
const currentRole = $(this).data("user-role");
80+
openChangeRoleModal(userId, currentRole);
81+
$("#changeRoleModal").modal("show");
82+
});
83+
84+
// Add event delegation for approve/reject request buttons
85+
$(document).on("click", ".approve-request-btn", function () {
86+
const requestId = $(this).data("request-id");
87+
approveRequest(requestId);
88+
});
89+
90+
$(document).on("click", ".reject-request-btn", function () {
91+
const requestId = $(this).data("request-id");
92+
rejectRequest(requestId);
93+
});
94+
6295
// CSV Bulk Upload Events
6396
$("#addBulkMemberBtn").on("click", function () {
6497
$("#csvBulkUploadModal").modal("show");
@@ -407,17 +440,15 @@ function renderMemberActions(member) {
407440
} else {
408441
return `
409442
<button
410-
class="btn btn-sm btn-danger me-1"
411-
onclick="removeMember('${member.userId}')">
443+
class="btn btn-sm btn-danger me-1 remove-member-btn"
444+
data-user-id="${member.userId}">
412445
Remove
413446
</button>
414447
<button
415448
type="button"
416-
class="btn btn-sm btn-outline-secondary"
417-
data-bs-toggle="modal"
418-
data-bs-target="#changeRoleModal"
419-
onclick="openChangeRoleModal('${member.userId}', '${member.role}')"
420-
>
449+
class="btn btn-sm btn-outline-secondary change-role-btn"
450+
data-user-id="${member.userId}"
451+
data-user-role="${member.role}">
421452
Change Role
422453
</button>
423454
`;
@@ -473,8 +504,10 @@ function loadPendingRequests() {
473504
<td>${u.displayName}</td>
474505
<td>${u.email}</td>
475506
<td>
476-
<button class="btn btn-sm btn-success" onclick="approveRequest('${u.userId}')">Approve</button>
477-
<button class="btn btn-sm btn-danger" onclick="rejectRequest('${u.userId}')">Reject</button>
507+
<button class="btn btn-sm btn-success approve-request-btn"
508+
data-request-id="${u.userId}">Approve</button>
509+
<button class="btn btn-sm btn-danger reject-request-btn"
510+
data-request-id="${u.userId}">Reject</button>
478511
</td>
479512
</tr>
480513
`;
@@ -522,66 +555,44 @@ function rejectRequest(requestId) {
522555
});
523556
}
524557

558+
// Search users for manual add
525559
function searchUsers() {
526560
const term = $("#userSearchTerm").val().trim();
527561
if (!term) {
528-
alert("Please enter a search term.");
562+
alert("Enter a name or email to search.");
529563
return;
530564
}
531-
532-
// UI state
533565
$("#searchStatus").text("Searching...");
534566
$("#searchUsersBtn").prop("disabled", true);
535567

536-
$.ajax({
537-
url: "/api/userSearch",
538-
method: "GET",
539-
data: { query: term },
540-
dataType: "json",
541-
})
542-
.done(function (results) {
543-
renderUserSearchResults(results);
544-
})
545-
.fail(function (jqXHR, textStatus, errorThrown) {
546-
console.error("User search error:", textStatus, errorThrown);
547-
548-
if (jqXHR.status === 401) {
549-
// Session expired or no token → force re-login
550-
window.location.href = "/login";
551-
} else {
552-
const msg = jqXHR.responseJSON?.error
553-
? jqXHR.responseJSON.error
554-
: "User search failed.";
555-
alert(msg);
556-
}
568+
$.get("/api/userSearch", { query: term })
569+
.done(renderUserSearchResults)
570+
.fail(function (jq) {
571+
const err = jq.responseJSON?.error || jq.statusText;
572+
alert("User search failed: " + err);
557573
})
558574
.always(function () {
559-
// Restore UI state
560575
$("#searchStatus").text("");
561576
$("#searchUsersBtn").prop("disabled", false);
562577
});
563578
}
564579

580+
// Render user-search results in add-member modal
565581
function renderUserSearchResults(users) {
566582
let html = "";
567-
if (!users || users.length === 0) {
568-
html = `
569-
<tr>
570-
<td colspan="3" class="text-muted text-center">No results found</td>
571-
</tr>
572-
`;
583+
if (!users || !users.length) {
584+
html = `<tr><td colspan="3" class="text-center text-muted">No results.</td></tr>`;
573585
} else {
574-
users.forEach((u) => {
586+
users.forEach(u => {
575587
html += `
576588
<tr>
577589
<td>${u.displayName || "(no name)"}</td>
578590
<td>${u.email || ""}</td>
579591
<td>
580-
<button class="btn btn-sm btn-primary"
581-
onclick="selectUserForAdd('${u.id}', '${u.displayName}', '${
582-
u.email
583-
}')"
584-
>
592+
<button class="btn btn-sm btn-primary select-user-btn"
593+
data-user-id="${u.id}"
594+
data-user-name="${u.displayName}"
595+
data-user-email="${u.email}">
585596
Select
586597
</button>
587598
</td>
@@ -592,9 +603,10 @@ function renderUserSearchResults(users) {
592603
$("#userSearchResultsTable tbody").html(html);
593604
}
594605

595-
function selectUserForAdd(uid, displayName, email) {
596-
$("#newUserId").val(uid);
597-
$("#newUserDisplayName").val(displayName);
606+
// Populate manual-add fields from search result
607+
function selectUserForAdd(id, name, email) {
608+
$("#newUserId").val(id);
609+
$("#newUserDisplayName").val(name);
598610
$("#newUserEmail").val(email);
599611
}
600612

0 commit comments

Comments
 (0)