Skip to content

Commit 744a4cd

Browse files
committed
Add user delete confirmation
1 parent dbbe5ac commit 744a4cd

File tree

1 file changed

+25
-4
lines changed

1 file changed

+25
-4
lines changed

frontend/components/admin-user-management/admin-user-management.tsx

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {
1414
} from "@/components/ui/table";
1515
import LoadingScreen from "@/components/common/loading-screen";
1616
import AdminEditUserModal from "@/components/admin-user-management/admin-edit-user-modal";
17+
import DeleteAccountModal from "@/components/user-settings/delete-account-modal";
1718
import { PencilIcon, Trash2Icon } from "lucide-react";
1819
import { User, UserArraySchema } from "@/lib/schemas/user-schema";
1920
import { userServiceUri } from "@/lib/api-uri";
@@ -51,25 +52,33 @@ export default function AdminUserManagement() {
5152
const [users, setUsers] = useState<User[]>([]);
5253
const [showModal, setShowModal] = useState<boolean>(false);
5354
const [selectedUser, setSelectedUser] = useState<User>();
55+
const [showDeleteModal, setShowDeleteModal] = useState(false);
56+
const [confirmUsername, setConfirmUsername] = useState("");
57+
const [isDeleteButtonEnabled, setIsDeleteButtonEnabled] = useState(false);
5458

5559
useEffect(() => {
5660
if (data) {
5761
setUsers(data);
5862
}
5963
}, [data]);
6064

65+
// Enable delete button in the delete account modal only when the input username matches the original username
66+
useEffect(() => {
67+
setIsDeleteButtonEnabled(confirmUsername === selectedUser?.username);
68+
}, [confirmUsername, selectedUser]);
69+
6170
if (isLoading) {
6271
return <LoadingScreen />;
6372
}
6473

65-
const handleDelete = async (userId: string) => {
74+
const handleDelete = async () => {
6675
const token = auth?.token;
6776
if (!token) {
6877
throw new Error("No authentication token found");
6978
}
7079

7180
const response = await fetch(
72-
`${userServiceUri(window.location.hostname)}/users/${userId}`,
81+
`${userServiceUri(window.location.hostname)}/users/${selectedUser?.id}`,
7382
{
7483
method: "DELETE",
7584
headers: {
@@ -82,7 +91,7 @@ export default function AdminUserManagement() {
8291
throw new Error("Failed to delete user");
8392
}
8493

85-
setUsers(users.filter((user) => user.id !== userId));
94+
setUsers(users.filter((user) => user.id !== selectedUser?.id));
8695
};
8796

8897
const onUserUpdate = () => {
@@ -100,6 +109,15 @@ export default function AdminUserManagement() {
100109
user={selectedUser}
101110
onUserUpdate={onUserUpdate}
102111
/>
112+
<DeleteAccountModal
113+
showDeleteModal={showDeleteModal}
114+
originalUsername={selectedUser?.username || ""}
115+
confirmUsername={confirmUsername}
116+
setConfirmUsername={setConfirmUsername}
117+
handleDeleteAccount={handleDelete}
118+
isDeleteButtonEnabled={isDeleteButtonEnabled}
119+
setShowDeleteModal={setShowDeleteModal}
120+
/>
103121
<Table>
104122
<TableHeader>
105123
<TableRow>
@@ -130,7 +148,10 @@ export default function AdminUserManagement() {
130148
</Button>
131149
<Button
132150
variant="destructive"
133-
onClick={() => handleDelete(user.id)}
151+
onClick={() => {
152+
setSelectedUser(user);
153+
setShowDeleteModal(true);
154+
}}
134155
>
135156
<Trash2Icon className="h-4 w-4" />
136157
</Button>

0 commit comments

Comments
 (0)