|
| 1 | +import React, {useState, useRef, useEffect} from 'react'; |
| 2 | +import {useUser} from '../../hooks/useUser/useUser.jsx'; |
| 3 | +import {useEasyauth} from '../../hooks/useEasyauth/useEasyauth.jsx'; |
| 4 | +import PropTypes from 'prop-types'; |
| 5 | + |
| 6 | + |
| 7 | +export const UserButton = ({position}) => { |
| 8 | + const auth = useEasyauth(); |
| 9 | + const {user} = useUser(); |
| 10 | + const [isOpen, setIsOpen] = useState(false); |
| 11 | + const cardRef = useRef(null); |
| 12 | + |
| 13 | + const handleButtonClick = () => { |
| 14 | + setIsOpen(!isOpen); |
| 15 | + }; |
| 16 | + |
| 17 | + const handleLogout = () => { |
| 18 | + auth.removeUser(); |
| 19 | + }; |
| 20 | + |
| 21 | + const handleAccount = () => { |
| 22 | + // Redirect to account page |
| 23 | + }; |
| 24 | + |
| 25 | + useEffect(() => { |
| 26 | + function handleClickOutside(event) { |
| 27 | + if (cardRef.current && !cardRef.current.contains(event.target)) { |
| 28 | + setIsOpen(false); |
| 29 | + } |
| 30 | + } |
| 31 | + |
| 32 | + document.addEventListener('mousedown', handleClickOutside); |
| 33 | + return () => { |
| 34 | + document.removeEventListener('mousedown', handleClickOutside); |
| 35 | + }; |
| 36 | + }, []); |
| 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 | + if (position === 'left') { |
| 50 | + cardStyle.left = '0'; |
| 51 | + } else if (position === 'right') { |
| 52 | + cardStyle.right = '0'; |
| 53 | + } else { |
| 54 | + cardStyle.right = '0'; |
| 55 | + } |
| 56 | + |
| 57 | + 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} |
| 80 | + > |
| 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 | + /> |
| 95 | + <div |
| 96 | + style={{ |
| 97 | + color: 'black', |
| 98 | + fontSize: '16px', |
| 99 | + overflow: 'hidden', |
| 100 | + textOverflow: 'ellipsis', |
| 101 | + }} |
| 102 | + > |
| 103 | + {user.email} |
| 104 | + </div> |
| 105 | + </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> |
| 136 | + ); |
| 137 | +}; |
| 138 | + |
| 139 | +UserButton.propTypes = { |
| 140 | + position: PropTypes.string, |
| 141 | +}; |
0 commit comments