Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

UserButton.js 1.9KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import React from "react";
  2. import PropTypes from "prop-types";
  3. import selectedTheme from "../../../themes";
  4. import { AccountCircle } from "@mui/icons-material";
  5. import { IconButton } from "../../Buttons/IconButton/IconButton";
  6. import { UserButtonContainer, UserName } from "./UserButton.styled";
  7. import PopoverComponent from "../../Popovers/PopoverComponent";
  8. import { MyProfile } from "../../Popovers/MyProfile/MyProfile";
  9. import { useState } from "react";
  10. import { useEffect } from "react";
  11. import { useLocation } from "react-router-dom";
  12. import { useTranslation } from "react-i18next";
  13. const UserButton = (props) => {
  14. const location = useLocation();
  15. const { t } = useTranslation();
  16. const [userPopoverOpen, setUserPopoverOpen] = useState(false);
  17. const [userAnchorEl, setUserAnchorEl] = useState(null);
  18. useEffect(() => {
  19. setUserPopoverOpen(false);
  20. }, [location.pathname]);
  21. const openUserPopover = (event) => {
  22. setUserPopoverOpen(true);
  23. setUserAnchorEl(event.currentTarget);
  24. };
  25. const closeUserPopover = () => {
  26. setUserPopoverOpen(false);
  27. setUserAnchorEl(null);
  28. };
  29. return (
  30. <>
  31. <UserButtonContainer onClick={openUserPopover}>
  32. <UserName>{props.name}</UserName>
  33. <IconButton
  34. aria-label={t("header.myProfile")}
  35. style={{
  36. background: selectedTheme.colors.primaryIconBackgroundColor,
  37. color: selectedTheme.colors.primaryPurple,
  38. }}
  39. >
  40. <AccountCircle onClick={openUserPopover} />
  41. </IconButton>
  42. </UserButtonContainer>
  43. <PopoverComponent
  44. anchorEl={userAnchorEl}
  45. open={userPopoverOpen}
  46. onClose={() => {
  47. setUserPopoverOpen(false);
  48. setUserAnchorEl(null);
  49. }}
  50. content={<MyProfile closePopover={closeUserPopover} />}
  51. />
  52. </>
  53. );
  54. };
  55. UserButton.propTypes = {
  56. onClick: PropTypes.func,
  57. name: PropTypes.string,
  58. };
  59. export default UserButton;