chatEditForm.js 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import { Avatar, Button, ButtonGroup, TextField } from "@mui/material"
  2. import { useEffect, useState } from "react"
  3. import { connect } from "react-redux"
  4. import { actionFullEditChat, actionUserSearch } from "../actions"
  5. import { MemberList, UserSearch } from "./chatForm"
  6. import { ConnectDropzone } from "./dropzone"
  7. const ChatEditForm = ({ chat_id, chat, searchState, onUserSearch, onChangeChat }) => {
  8. let [edit, setEdit] = useState(false)
  9. let [newTitle, setNewTitle] = useState(chat.title || "")
  10. let [newAvatar, setNewAvatar] = useState([])
  11. let [newMembers, setNewMembers] = useState(chat.members)
  12. useEffect(() => {
  13. setEdit(false)
  14. setNewTitle(chat.title)
  15. setNewAvatar([chat.avatar])
  16. setNewMembers(chat.members)
  17. }, [chat])
  18. let editChatHandler = () => {
  19. setEdit(!edit)
  20. setNewMembers(chat.members)
  21. }
  22. let userAddHandler = (user) => {
  23. setNewMembers([...newMembers, user])
  24. }
  25. let memberDeleteHandler = (user) => {
  26. setNewMembers(newMembers.filter(member => member._id !== user._id))
  27. }
  28. return (
  29. <div className="chat-edit-form">
  30. {edit ? <div>
  31. <span>Загрузите новый аватар</span>
  32. <ConnectDropzone maxFiles={1} onSet={setNewAvatar} />
  33. </div> :
  34. chat.avatar && <Avatar src={"/" + chat.avatar.url} alt="chatAvatar" sx={{ width: 60, height: 60 }} />}
  35. {edit ? <TextField
  36. label="Сменить название чата"
  37. variant="standard"
  38. onChange={(e) => setNewTitle(e.target.value)}
  39. value={newTitle}
  40. placeholder="Сменить название чата" /> : <span>Название чата: {chat.title}</span>}
  41. {<MemberList members={newMembers} onDeleteMember={edit && memberDeleteHandler} />}
  42. {edit && <UserSearch searchState={searchState} onUserSearch={onUserSearch} onAddMember={userAddHandler} />}
  43. <ButtonGroup size="small">
  44. <Button variant="outlined" onClick={() => editChatHandler()} >
  45. {edit ? "Отменить редактирование" : "Редактировать чат"}
  46. </Button>
  47. {edit &&
  48. <Button variant="contained" onClick={() => onChangeChat(chat_id, newTitle, newAvatar[0]?._id, newMembers)}>
  49. Применить изменения
  50. </Button>}
  51. </ButtonGroup>
  52. </div>
  53. )
  54. }
  55. const ConnectChatEditForm = connect(state => ({ searchState: state.promise?.userSearch?.payload?.data?.UserFind }),
  56. {
  57. onUserSearch: actionUserSearch,
  58. onChangeChat: actionFullEditChat
  59. })(ChatEditForm)
  60. export default ConnectChatEditForm