@@ -2,13 +2,40 @@ import React, {useState, useRef, useEffect} from 'react';
2
2
import { useUser } from '../../hooks/useUser/useUser.jsx' ;
3
3
import { useEasyauth } from '../../hooks/useEasyauth/useEasyauth.jsx' ;
4
4
import PropTypes from 'prop-types' ;
5
+ import { iconUser } from '../uiComponents/iconUser.js' ;
6
+ import { Box , Modal } from '@mui/material' ;
7
+ import { UserProfile } from '../UserProfile/UserProfile.jsx' ;
5
8
6
9
7
- export const UserButton = ( { position} ) => {
10
+ export const UserButton = ( { position, profileRedirect } ) => {
8
11
const auth = useEasyauth ( ) ;
9
12
const { user} = useUser ( ) ;
10
13
const [ isOpen , setIsOpen ] = useState ( false ) ;
11
14
const cardRef = useRef ( null ) ;
15
+ const [ open , setOpen ] = useState ( false ) ;
16
+
17
+
18
+ const ProfileModal = ( ) => {
19
+ const handleClose = ( ) => {
20
+ setOpen ( false ) ;
21
+ } ;
22
+ return (
23
+ < >
24
+ < Modal open = { open } onClose = { handleClose } >
25
+ < Box >
26
+ < div
27
+ style = { {
28
+ display : 'flex' ,
29
+ justifyContent : 'center' ,
30
+ } }
31
+ >
32
+ < UserProfile />
33
+ </ div >
34
+ </ Box >
35
+ </ Modal >
36
+ </ >
37
+ ) ;
38
+ } ;
12
39
13
40
const handleButtonClick = ( ) => {
14
41
setIsOpen ( ! isOpen ) ;
@@ -19,9 +46,22 @@ export const UserButton = ({position}) => {
19
46
} ;
20
47
21
48
const handleAccount = ( ) => {
22
- // Redirect to account page
49
+ setIsOpen ( false ) ;
50
+ if ( ! profileRedirect ) {
51
+ setOpen ( true ) ;
52
+ }
23
53
} ;
24
54
55
+ const cardStyle = {
56
+ position : 'absolute' ,
57
+ top : '50px' ,
58
+ borderRadius : '8px' ,
59
+ backgroundColor : '#fff' ,
60
+ boxShadow : '0 2px 4px rgba(0, 0, 0, 0.1)' ,
61
+ padding : '10px' ,
62
+ display : 'flex' ,
63
+ flexDirection : 'column' ,
64
+ } ;
25
65
useEffect ( ( ) => {
26
66
function handleClickOutside ( event ) {
27
67
if ( cardRef . current && ! cardRef . current . contains ( event . target ) ) {
@@ -34,18 +74,6 @@ export const UserButton = ({position}) => {
34
74
document . removeEventListener ( 'mousedown' , handleClickOutside ) ;
35
75
} ;
36
76
} , [ ] ) ;
37
-
38
- const cardStyle = {
39
- position : 'absolute' ,
40
- top : '50px' ,
41
- borderRadius : '8px' ,
42
- backgroundColor : '#fff' ,
43
- boxShadow : '0 2px 4px rgba(0, 0, 0, 0.1)' ,
44
- padding : '10px' ,
45
- display : 'flex' ,
46
- flexDirection : 'column' ,
47
- } ;
48
-
49
77
if ( position === 'left' ) {
50
78
cardStyle . left = '0' ;
51
79
} else if ( position === 'right' ) {
@@ -55,87 +83,97 @@ export const UserButton = ({position}) => {
55
83
}
56
84
57
85
return (
58
- < div style = { { position : 'relative' , display : 'inline-block' } } >
59
- < button
60
- style = { {
61
- width : '40px' ,
62
- height : '40px' ,
63
- borderRadius : '50%' ,
64
- padding : '0' ,
65
- border : 'none' ,
66
- backgroundColor : '#ccc' ,
67
- } }
68
- onClick = { handleButtonClick }
69
- >
70
- < img
71
- src = "data:image/png;base64,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"
72
- style = { { width : '100%' , height : '100%' } }
73
- />
74
- </ button >
75
-
76
- { isOpen && (
77
- < div
78
- ref = { cardRef }
79
- style = { cardStyle }
86
+ < >
87
+ < div style = { { position : 'relative' , display : 'inline-block' } } >
88
+ < button
89
+ style = { {
90
+ width : '40px' ,
91
+ height : '40px' ,
92
+ borderRadius : '50%' ,
93
+ padding : '0' ,
94
+ border : 'none' ,
95
+ backgroundColor : '#ccc' ,
96
+ } }
97
+ onClick = { handleButtonClick }
80
98
>
81
- < div
82
- style = { {
83
- display : 'flex' ,
84
- alignItems : 'center' ,
85
- marginBottom : '10px' ,
86
- overflow : 'hidden' ,
87
- textOverflow : 'ellipsis' ,
88
- } }
89
- >
90
- < img
91
- src = "data:image/png;base64,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"
92
- alt = "Profile Icon"
93
- style = { { width : '30px' , height : '30px' , marginRight : '10px' } }
94
- />
99
+ < img
100
+ src = { iconUser ( ) }
101
+ alt = "profile icon"
102
+ style = { { width : '100%' , height : '100%' } }
103
+ />
104
+ </ button >
105
+
106
+ < ProfileModal />
107
+ { isOpen && (
108
+ < div ref = { cardRef } style = { cardStyle } >
95
109
< div
96
110
style = { {
97
- color : 'black' ,
98
- fontSize : '16px' ,
111
+ display : 'flex' ,
112
+ alignItems : 'center' ,
113
+ marginBottom : '10px' ,
99
114
overflow : 'hidden' ,
100
115
textOverflow : 'ellipsis' ,
101
116
} }
102
117
>
103
- { user . email }
118
+ < img
119
+ src = { iconUser ( ) }
120
+ alt = "Profile Icon"
121
+ style = { { width : '30px' , height : '30px' , marginRight : '10px' } }
122
+ />
123
+ < div
124
+ style = { {
125
+ color : 'black' ,
126
+ fontSize : '16px' ,
127
+ overflow : 'hidden' ,
128
+ textOverflow : 'ellipsis' ,
129
+ } }
130
+ >
131
+ { user . email }
132
+ </ div >
104
133
</ div >
134
+ < button
135
+ style = { {
136
+ backgroundColor : '#007bff' ,
137
+ color : '#fff' ,
138
+ padding : '5px 10px' ,
139
+ marginBottom : '10px' ,
140
+ border : 'none' ,
141
+ borderRadius : '3px' ,
142
+ cursor : 'pointer' ,
143
+ } }
144
+ onClick = { handleLogout }
145
+ >
146
+ Logout
147
+ </ button >
148
+ < a
149
+ href = { profileRedirect }
150
+ style = { {
151
+ backgroundColor : '#17a2b8' ,
152
+ } }
153
+ >
154
+ < button
155
+ style = { {
156
+ backgroundColor : '#17a2b8' ,
157
+ color : '#fff' ,
158
+ padding : '5px 10px' ,
159
+ border : 'none' ,
160
+ borderRadius : '3px' ,
161
+ cursor : 'pointer' ,
162
+ } }
163
+ onClick = { handleAccount }
164
+ >
165
+ Account
166
+ </ button >
167
+ </ a >
105
168
</ div >
106
- < button
107
- style = { {
108
- backgroundColor : '#007bff' ,
109
- color : '#fff' ,
110
- padding : '5px 10px' ,
111
- marginBottom : '10px' ,
112
- border : 'none' ,
113
- borderRadius : '3px' ,
114
- cursor : 'pointer' ,
115
- } }
116
- onClick = { handleLogout }
117
- >
118
- Logout
119
- </ button >
120
- < button
121
- style = { {
122
- backgroundColor : '#17a2b8' ,
123
- color : '#fff' ,
124
- padding : '5px 10px' ,
125
- border : 'none' ,
126
- borderRadius : '3px' ,
127
- cursor : 'pointer' ,
128
- } }
129
- onClick = { handleAccount }
130
- >
131
- Account
132
- </ button >
133
- </ div >
134
- ) }
135
- </ div >
169
+ ) }
170
+ </ div >
171
+ </ >
136
172
) ;
137
173
} ;
138
174
175
+
139
176
UserButton . propTypes = {
140
177
position : PropTypes . string ,
178
+ profileRedirect : PropTypes . string ,
141
179
} ;
0 commit comments