1
1
import { User } from "domain/entities/User" ;
2
2
import { userUseCases } from "domain/usecases/UserUseCases" ;
3
3
import { useEffect , useState } from "react" ;
4
- import { EditOutlined , DeleteOutlined , CrownFilled } from "@ant-design/icons" ;
4
+ import { EditOutlined , DeleteOutlined , CrownFilled , CrownOutlined } from "@ant-design/icons" ;
5
5
import styles from "./UserManagement..module.css" ;
6
- import { Button , Modal } from "antd" ;
6
+ import { Modal } from "antd" ;
7
7
import { UpdateProfileForm } from "presentation/components/UpdateProfileForm/UpdateProfileForm" ;
8
8
import { DeleteUserForm } from "presentation/components/DeleteUserForm/DeleteUserForm" ;
9
- import { toast } from "react-toastify" ;
9
+ import { UpdateUserPrivilegeForm } from "presentation/components/UpdateUserPrivilegeForm/UpdateUserPrivilegeForm" ;
10
+
10
11
11
12
export const UserManagement : React . FC < { } > = ( ) => {
12
13
const [ users , setUsers ] = useState < User [ ] > ( [ ] ) ;
14
+
13
15
const [ editingUser , setEditingUser ] = useState < User | null > ( null ) ;
14
16
const [ deletingUser , setDeletingUser ] = useState < User | null > ( null ) ;
17
+ const [ promotingUser , setPromotingUser ] = useState < User | null > ( null ) ;
15
18
16
19
useEffect ( ( ) => {
17
20
const getAllUsers = async ( ) => {
@@ -42,6 +45,11 @@ export const UserManagement: React.FC<{}> = () => {
42
45
{ ! user . isAdmin && (
43
46
< div className = { styles . userControls } >
44
47
< DeleteOutlined onClick = { ( ) => setDeletingUser ( user ) } />
48
+ < CrownOutlined
49
+ onClick = { ( ) => {
50
+ setPromotingUser ( user ) ;
51
+ } }
52
+ />
45
53
< EditOutlined onClick = { ( ) => setEditingUser ( user ) } />
46
54
</ div >
47
55
) }
@@ -50,19 +58,28 @@ export const UserManagement: React.FC<{}> = () => {
50
58
} ;
51
59
52
60
const onEditUser = ( updatedUser : User ) => {
61
+ refreshUsersList ( updatedUser ) ;
62
+ setEditingUser ( null ) ;
63
+ } ;
64
+
65
+ const onDeleteUser = ( userId : string ) => {
66
+ setUsers ( ( users ) => users . filter ( ( user ) => user . _id !== userId ) ) ;
67
+ setDeletingUser ( null ) ;
68
+ } ;
69
+
70
+ const onPromoteUser = ( updatedUser : User ) => {
71
+ refreshUsersList ( updatedUser ) ;
72
+ setPromotingUser ( null ) ;
73
+ } ;
74
+
75
+ const refreshUsersList = ( updatedUser : User ) => {
53
76
const updatedUsers = users . map ( ( user ) => {
54
77
if ( user . _id === updatedUser . _id ) {
55
78
return updatedUser ;
56
79
}
57
80
return user ;
58
81
} ) ;
59
82
setUsers ( updatedUsers ) ;
60
- setEditingUser ( null ) ;
61
- } ;
62
-
63
- const onDelete = ( userId : string ) => {
64
- setUsers ( ( users ) => users . filter ( ( user ) => user . _id !== userId ) ) ;
65
- setDeletingUser ( null ) ;
66
83
} ;
67
84
68
85
return (
@@ -90,7 +107,22 @@ export const UserManagement: React.FC<{}> = () => {
90
107
< DeleteUserForm
91
108
user = { deletingUser }
92
109
onCancel = { ( ) => setDeletingUser ( null ) }
93
- onSubmit = { ( ) => onDelete ( deletingUser ?. _id ) }
110
+ onSubmit = { ( ) => onDeleteUser ( deletingUser ?. _id ) }
111
+ />
112
+ </ Modal >
113
+ ) }
114
+ { promotingUser && (
115
+ < Modal
116
+ open = { promotingUser !== null }
117
+ closable = { false }
118
+ title = "Promote user"
119
+ footer = { null }
120
+ maskClosable = { false }
121
+ >
122
+ < UpdateUserPrivilegeForm
123
+ user = { promotingUser }
124
+ onSubmit = { onPromoteUser }
125
+ onCancel = { ( ) => setPromotingUser ( null ) }
94
126
/>
95
127
</ Modal >
96
128
) }
0 commit comments