@@ -14,6 +14,7 @@ import {
14
14
} from "@/components/ui/table" ;
15
15
import LoadingScreen from "@/components/common/loading-screen" ;
16
16
import AdminEditUserModal from "@/components/admin-user-management/admin-edit-user-modal" ;
17
+ import DeleteAccountModal from "@/components/common/delete-account-modal" ;
17
18
import { PencilIcon , Trash2Icon } from "lucide-react" ;
18
19
import { User , UserArraySchema } from "@/lib/schemas/user-schema" ;
19
20
import { userServiceUri } from "@/lib/api-uri" ;
@@ -51,25 +52,33 @@ export default function AdminUserManagement() {
51
52
const [ users , setUsers ] = useState < User [ ] > ( [ ] ) ;
52
53
const [ showModal , setShowModal ] = useState < boolean > ( false ) ;
53
54
const [ selectedUser , setSelectedUser ] = useState < User > ( ) ;
55
+ const [ showDeleteModal , setShowDeleteModal ] = useState ( false ) ;
56
+ const [ confirmUsername , setConfirmUsername ] = useState ( "" ) ;
57
+ const [ isDeleteButtonEnabled , setIsDeleteButtonEnabled ] = useState ( false ) ;
54
58
55
59
useEffect ( ( ) => {
56
60
if ( data ) {
57
61
setUsers ( data ) ;
58
62
}
59
63
} , [ data ] ) ;
60
64
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
+
61
70
if ( isLoading ) {
62
71
return < LoadingScreen /> ;
63
72
}
64
73
65
- const handleDelete = async ( userId : string ) => {
74
+ const handleDelete = async ( ) => {
66
75
const token = auth ?. token ;
67
76
if ( ! token ) {
68
77
throw new Error ( "No authentication token found" ) ;
69
78
}
70
79
71
80
const response = await fetch (
72
- `${ userServiceUri ( window . location . hostname ) } /users/${ userId } ` ,
81
+ `${ userServiceUri ( window . location . hostname ) } /users/${ selectedUser ?. id } ` ,
73
82
{
74
83
method : "DELETE" ,
75
84
headers : {
@@ -82,7 +91,7 @@ export default function AdminUserManagement() {
82
91
throw new Error ( "Failed to delete user" ) ;
83
92
}
84
93
85
- setUsers ( users . filter ( ( user ) => user . id !== userId ) ) ;
94
+ setUsers ( users . filter ( ( user ) => user . id !== selectedUser ?. id ) ) ;
86
95
} ;
87
96
88
97
const onUserUpdate = ( ) => {
@@ -100,6 +109,16 @@ export default function AdminUserManagement() {
100
109
user = { selectedUser }
101
110
onUserUpdate = { onUserUpdate }
102
111
/>
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
+ isAdmin = { true }
121
+ />
103
122
< Table >
104
123
< TableHeader >
105
124
< TableRow >
@@ -130,7 +149,10 @@ export default function AdminUserManagement() {
130
149
</ Button >
131
150
< Button
132
151
variant = "destructive"
133
- onClick = { ( ) => handleDelete ( user . id ) }
152
+ onClick = { ( ) => {
153
+ setSelectedUser ( user ) ;
154
+ setShowDeleteModal ( true ) ;
155
+ } }
134
156
>
135
157
< Trash2Icon className = "h-4 w-4" />
136
158
</ Button >
0 commit comments