UserEditorModal.jsx 3.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import { BadgeComponent, Child, ModalChildContent, UserEditorAvatar, UserEditorHeader, UserEditorList, UserEditorListItem, UserEditorMain, UserEditorModalWrapper, UserEditorName, UserEditorTitle } from "./UserEditorModal.style";
  2. import CloseIcon from "../ChatInfoModal/icons8-close.svg";
  3. import { Avatar, Badge, IconButton, Modal } from "@mui/material";
  4. import { connect } from "react-redux";
  5. import { backendURL } from "../../helpers/gql";
  6. import PasswordIcon from "./icons8_password.png";
  7. import LoginIcon from "./icons8_userlogin.png";
  8. import NickIcon from "./icons8_usernick.png";
  9. import { Divider } from "../ChatInfoModal/ChatInfoModal.style";
  10. import DropZoneAvatar from "../DropZone/DropZoneAvatar";
  11. import { actionSetUserAvatar } from "../../actions/actionsMedia";
  12. import { useState } from "react";
  13. import UserNickEditor from "./UserEditorSubModals/UserNickEditor";
  14. import UserLoginEditor from "./UserEditorSubModals/UserLoginEditor";
  15. import UserPasswordEditor from "./UserEditorSubModals/UserPasswordEditor";
  16. const CDropZoneAvatarForUser = connect(null, {onLoad: actionSetUserAvatar})(DropZoneAvatar)
  17. const UserEditorModal = ({user, handleClose}) => {
  18. const [isOpen, setOpen] = useState(false);
  19. const [subModalContent, setSubModalContent] = useState();
  20. const handleCloseChildModal = () => setOpen(false);
  21. const modalMap = {
  22. userNickEditor: <UserNickEditor handleClose={handleCloseChildModal}/>,
  23. userLoginEditor: <UserLoginEditor handleClose={handleCloseChildModal}/>,
  24. userPasswordEditor: <UserPasswordEditor handleClose={handleCloseChildModal} />
  25. }
  26. return(
  27. <UserEditorModalWrapper>
  28. <UserEditorHeader>
  29. <UserEditorTitle>User Info</UserEditorTitle>
  30. <IconButton onClick={handleClose}>
  31. <img style={{cursor: 'pointer'}} src={CloseIcon}/>
  32. </IconButton>
  33. </UserEditorHeader>
  34. <UserEditorMain>
  35. <UserEditorAvatar>
  36. <Badge
  37. sx={{margin: "0 20px"}}
  38. overlap="circular"
  39. anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}
  40. // invisible={!invisible}
  41. badgeContent={
  42. <CDropZoneAvatarForUser component={"dropAvatarBadge"}/>
  43. }
  44. >
  45. <Avatar
  46. alt={user?.nick}
  47. src={`${backendURL}/${user?.avatar?.url || ''}`}
  48. sx={{ width: 100, height: 100}}
  49. />
  50. </Badge>
  51. </UserEditorAvatar>
  52. <UserEditorName>{user?.nick || ''}</UserEditorName>
  53. </UserEditorMain>
  54. <Divider/>
  55. <UserEditorList>
  56. <UserEditorListItem onClick={() => {setOpen(true); setSubModalContent('userNickEditor')} }>
  57. <img src={NickIcon}/>Nick
  58. </UserEditorListItem>
  59. <UserEditorListItem onClick={() => {setOpen(true); setSubModalContent('userLoginEditor')} }>
  60. <img src={LoginIcon}/>Login
  61. </UserEditorListItem>
  62. <UserEditorListItem onClick={() => {setOpen(true); setSubModalContent('userPasswordEditor')} }>
  63. <img src={PasswordIcon}/>Password
  64. </UserEditorListItem>
  65. </UserEditorList>
  66. <Modal
  67. open={isOpen}
  68. onClose={handleCloseChildModal}
  69. aria-labelledby="parent-modal-title"
  70. aria-describedby="parent-modal-description"
  71. >
  72. <ModalChildContent>
  73. {modalMap[subModalContent]}
  74. </ModalChildContent>
  75. </Modal>
  76. </UserEditorModalWrapper>
  77. )
  78. }
  79. export default connect(state => ({user: state?.promise?.aboutMe?.payload }))(UserEditorModal);