- approveInactiveUser({ userId: name, email: email, position: position as UserStatus } as User)}>
+ approveInactiveUser({ userId: userId, email: email, position: position as UserStatus } as User)}>
- deleteUser(name)}>
+ deleteUser(userId)}>
+ setIsChangeGroupModalOpen(false)}
+ onConfirmDelete={changeUserGroup}
+ title={`Change User to ${
+ position === UserStatus.Admin ? "Employee" : "Admin"
+ }`}
+ subtitle="Are you sure you want to change to"
+ boldSubtitle={position === UserStatus.Admin ? "employee" : "admin"}
+ warningMessage={`By changing to ${
+ position === UserStatus.Admin ? "employee" : "admin"
+ }, they will ${
+ position === UserStatus.Admin
+ ? "gain access to sensitive data."
+ : "lose access to admin pages."
+ }`}
+ />
+ setIsDeleteUserModalOpen(false)}
+ onConfirmDelete={deleteUser}
+ title="Delete User"
+ subtitle="Are you sure you want to delete"
+ boldSubtitle={userId}
+ warningMessage="By deleting this user, they won't be available in the system anymore."
+ />
{userId}
{email}
@@ -42,7 +148,7 @@ const ApprovedUserCard = ({ userId, email, position }: ApprovedUserCardProps) =>
setIsChangeGroupModalOpen(true)}
>
Change to {position === UserStatus.Admin ? "employee" : "admin"}
{" "}
@@ -51,7 +157,7 @@ const ApprovedUserCard = ({ userId, email, position }: ApprovedUserCardProps) =>
setIsDeleteUserModalOpen(true)}
>
Delete user{" "}
diff --git a/frontend/src/main-page/users/PendingUserCard.tsx b/frontend/src/main-page/users/PendingUserCard.tsx
index 42985e8..5a4867a 100644
--- a/frontend/src/main-page/users/PendingUserCard.tsx
+++ b/frontend/src/main-page/users/PendingUserCard.tsx
@@ -44,7 +44,7 @@ const PendingUserCard = ({
}),
});
if (response.ok) {
- alert(`User ${name} has been approved successfully`);
+ alert(`User ${userId} has been approved successfully`);
const body = await response.json();
moveUserToActive(body as User)
} else {
diff --git a/frontend/src/main-page/users/Users.tsx b/frontend/src/main-page/users/Users.tsx
index 667de49..7d94f4b 100644
--- a/frontend/src/main-page/users/Users.tsx
+++ b/frontend/src/main-page/users/Users.tsx
@@ -6,57 +6,54 @@ import { Pagination, ButtonGroup, IconButton } from "@chakra-ui/react";
import { HiChevronLeft, HiChevronRight } from "react-icons/hi";
import { observer } from "mobx-react-lite";
import { getAppStore } from "../../external/bcanSatchel/store";
+import { api } from "../../api";
+import { Navigate } from "react-router-dom";
+import { UserStatus } from "../../../../middle-layer/types/UserStatus";
+import { useAuthContext } from "../../context/auth/authContext";
// Represents a specific tab to show on the user page
enum UsersTab {
PendingUsers,
CurrentUsers,
}
-import { api } from "../../api"
-import { Navigate } from "react-router-dom";
-import { UserStatus } from "../../../../middle-layer/types/UserStatus";
-import { useAuthContext } from "@/context/auth/authContext";
const fetchActiveUsers = async (): Promise => {
try {
const response = await api("/user/active", {
- method: 'GET'
+ method: "GET",
});
-
+
if (!response.ok) {
throw new Error(`HTTP Error, Status: ${response.status}`);
}
-
+
const activeUsers = await response.json();
return activeUsers as User[];
} catch (error) {
console.error("Error fetching active users:", error);
return []; // Return empty array on error
}
-}
+};
const fetchInactiveUsers = async () => {
try {
- const response = await api("/user/inactive", {method : 'GET' });
+ const response = await api("/user/inactive", { method: "GET" });
if (!response.ok) {
throw new Error(`HTTP Error, Status: ${response.status}`);
}
const inactiveUsers = await response.json();
return inactiveUsers as User[];
- }
- catch (error) {
+ } catch (error) {
console.error("Error fetching active users:", error);
}
-}
-
+};
const ITEMS_PER_PAGE = 8;
const Users = observer(() => {
const store = getAppStore();
- const { user } = useAuthContext()
-
-
+ const { user } = useAuthContext();
+
useEffect(() => {
const fetchUsers = async () => {
const active = await fetchActiveUsers();
@@ -65,10 +62,10 @@ const Users = observer(() => {
store.activeUsers = active;
}
if (inactive) {
-store.inactiveUsers = inactive; }
+ store.inactiveUsers = inactive;
+ }
};
fetchUsers();
-
}, []);
const [usersTabStatus, setUsersTabStatus] = useState(
@@ -218,6 +215,6 @@ store.inactiveUsers = inactive; }
) : (
);
-})
+});
export default Users;
From fbfb83436aea7ed07510e2c7b978b837caf6700b Mon Sep 17 00:00:00 2001
From: Aaron Ashby <101434393+aaronashby@users.noreply.github.com>
Date: Thu, 4 Dec 2025 00:49:16 -0500
Subject: [PATCH 7/8] Added error logging for delete user
---
frontend/src/main-page/users/ApprovedUserCard.tsx | 2 ++
1 file changed, 2 insertions(+)
diff --git a/frontend/src/main-page/users/ApprovedUserCard.tsx b/frontend/src/main-page/users/ApprovedUserCard.tsx
index 14ea5d4..bfab487 100644
--- a/frontend/src/main-page/users/ApprovedUserCard.tsx
+++ b/frontend/src/main-page/users/ApprovedUserCard.tsx
@@ -91,6 +91,8 @@ const ApprovedUserCard = ({
console.log(`User ${userId} has been deleted successfully`);
alert(`User ${userId} has been deleted successfully`);
} else {
+ const errorBody = await response.json();
+ console.error("Error: ", errorBody)
alert("Failed to delete user");
}
setIsDeleteUserModalOpen(false);
From 354c97678f48e09a4d70c81b7989fb591045a680 Mon Sep 17 00:00:00 2001
From: prooflesben
Date: Fri, 5 Dec 2025 00:57:45 -0500
Subject: [PATCH 8/8] Changed code so that the store updates the changed user
when the yget moved to admin or employee
---
frontend/src/main-page/users/ApprovedUserCard.tsx | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/frontend/src/main-page/users/ApprovedUserCard.tsx b/frontend/src/main-page/users/ApprovedUserCard.tsx
index bfab487..aff3379 100644
--- a/frontend/src/main-page/users/ApprovedUserCard.tsx
+++ b/frontend/src/main-page/users/ApprovedUserCard.tsx
@@ -10,6 +10,7 @@ import { api } from "../../api";
import { User } from "../../../../middle-layer/types/User";
import { toJS } from "mobx";
import { getAppStore } from "../../external/bcanSatchel/store";
+import { setActiveUsers } from "../../external/bcanSatchel/actions";
interface ApprovedUserCardProps {
userId: string;
@@ -62,6 +63,9 @@ const ApprovedUserCard = ({
position === UserStatus.Admin ? "employee" : "admin"
}`
);
+ const updatedUser = await response.json();
+ setActiveUsers([...store.activeUsers.filter(u => u.userId !== userId), updatedUser as User]);
+
setIsChangeGroupModalOpen(false);
} else {
const errorBody = await response.json();
@@ -90,6 +94,8 @@ const ApprovedUserCard = ({
if (response.ok) {
console.log(`User ${userId} has been deleted successfully`);
alert(`User ${userId} has been deleted successfully`);
+ setActiveUsers(store.activeUsers.filter(u => u.userId !== userId));
+
} else {
const errorBody = await response.json();
console.error("Error: ", errorBody)