ChatInfoDrawer.jsx 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import { Avatar, Drawer, IconButton } from "@mui/material"
  2. import { ChatInfoModalAvatar, ChatInfoModalMain, ChatInfoModalName, ChatInfoTitle, Divider, MemberAmount, MemberListHeader } from "../ChatInfoModal/ChatInfoModal.style"
  3. import { ChatInfoDrawerHeader, LeaveChatButton } from "./ChatInfoDrawer.style"
  4. import CloseIcon from "../ChatInfoModal/icons8-close.svg";
  5. import { ChatMembersAmount } from "../ChatPageHeader/ChatPageHeader.style";
  6. import { CDropZoneAvatarForChat } from "../ChatInfoModal/ChatInfoModal";
  7. import { backendURL } from "../../helpers/gql";
  8. import { history } from "../../App";
  9. import { useEffect } from "react";
  10. import { connect } from "react-redux";
  11. import { actionUpsertChat } from "../../actions/actionsForChats";
  12. import { MemberList } from "../MemberList/MemberList";
  13. import MembersIcon from "../ChatInfoModal/user.png";
  14. import AddUserIcon from "../ChatInfoModal/add-user.png";
  15. import Exit from "../ChatInfoOptions/icons8_exit.png";
  16. import { actionUpsertUser } from "../../actions/actionsForUser";
  17. import { ChatInfoDrawerMediaList } from "../ChatInfoDrawerMediaList/ChatInfoDrawerMediaList";
  18. import { actionOpenModal } from "../../actions/actionsForModal";
  19. const ChatInfoDrawer = ({open, closeChatMenu, chats, userId, openModal, leaveChat, updateChat}) => {
  20. const [,route, histId] = history.location.pathname.split('/');
  21. useEffect(() => {
  22. chats[histId] || closeChatMenu()
  23. }, [chats[histId]])
  24. const amount = chats[histId]?.members?.length;
  25. const isOwner = userId === chats[histId]?.owner?._id;
  26. return(
  27. <Drawer
  28. anchor='right'
  29. variant="persistent"
  30. open={open}
  31. onClose={closeChatMenu}>
  32. <div style={{width: '300px'}}>
  33. <ChatInfoDrawerHeader>
  34. <ChatInfoModalName>Chat Info</ChatInfoModalName>
  35. <IconButton onClick={closeChatMenu}>
  36. <img style={{cursor: 'pointer'}} src={CloseIcon}/>
  37. </IconButton>
  38. </ChatInfoDrawerHeader>
  39. <ChatInfoModalMain>
  40. <ChatInfoModalAvatar>
  41. <Avatar
  42. src={`${backendURL}/${chats[histId]?.avatar?.url || ''}`}
  43. alt={chats[histId]?.title || 'chat'}
  44. sx={{ width: 75, height: 75}}
  45. />
  46. {isOwner && <CDropZoneAvatarForChat component={"dropAvatarPopupComponent"}/>}
  47. </ChatInfoModalAvatar>
  48. <div>
  49. <ChatInfoTitle>{chats[histId]?.title}</ChatInfoTitle>
  50. <ChatMembersAmount>{amount} {amount === 1 ? 'member' : 'members'}</ChatMembersAmount>
  51. </div>
  52. </ChatInfoModalMain>
  53. <ChatInfoDrawerMediaList chatMedia={chats[histId]?.chatMedia}/>
  54. <Divider/>
  55. <MemberListHeader>
  56. <div style={{display: 'flex', justifyContent: 'left'}}>
  57. <img src={MembersIcon} style={{height: "20px", marginRight: "30px"}}/>
  58. <MemberAmount>{amount} {amount === 1 ? 'member' : 'members'}</MemberAmount>
  59. </div>
  60. {isOwner && <img src={AddUserIcon} onClick={() => openModal('searchUserModal')} style={{height: "20px", cursor: "pointer"}} />}
  61. </MemberListHeader>
  62. <MemberList members={chats[histId]?.members}/>
  63. <Divider style={{marginTop: '10px'}}/>
  64. <LeaveChatButton onClick={()=> leaveChat(null, null, null, histId)}>
  65. <img src={Exit} alt="exit" style={{margin: ' 0 20px', height: '24px'}}/>
  66. Leave chat
  67. </LeaveChatButton>
  68. </div>
  69. </Drawer>
  70. )
  71. }
  72. export default connect(state => ({
  73. chats: state?.chats || [],
  74. userId: state?.auth?.payload?.sub?.id
  75. }), {updateChat: actionUpsertChat, openModal: actionOpenModal, leaveChat: actionUpsertUser})(ChatInfoDrawer);