chatEditForm.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import { useEffect, useState } from "react"
  2. import { connect } from "react-redux"
  3. import { actionFullEditChat, actionUserSearch } from "../actions"
  4. import { MemberList, UserSearch } from "./chatForm"
  5. import { ConnectDropzone } from "./dropzone"
  6. const ChatEditForm = ({ chat_id, chat, searchState, onUserSearch, onChangeChat }) => {
  7. let [edit, setEdit] = useState(false)
  8. let [newTitle, setNewTitle] = useState(chat.title || "")
  9. let [newAvatar, setNewAvatar] = useState([])
  10. let [newMembers, setNewMembers] = useState(chat.members)
  11. console.log(newAvatar)
  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 ? <input onChange={(e) => setNewTitle(e.target.value)} value={newTitle} /> : <span>Название чата: {chat.title}</span>}
  31. {edit ? <div>
  32. <span>Загрузите новый аватар</span>
  33. <ConnectDropzone maxFiles={1} onSet={setNewAvatar} />
  34. </div> :
  35. chat.avatar && <img src={"/" + chat.avatar.url} alt="chatAvatar" />}
  36. {<MemberList members={newMembers} onDeleteMember={edit && memberDeleteHandler} />}
  37. {edit && <UserSearch searchState={searchState} onUserSearch={onUserSearch} onAddMember={userAddHandler} />}
  38. <div className="edit-btn-container">
  39. <button onClick={() => editChatHandler()} >{edit ? "Отменить редактирование" : "Редактировать чат"}</button>
  40. {edit && <button onClick={() => onChangeChat(chat_id, newTitle, newAvatar[0]?._id, newMembers)}>Применить изменения</button>}
  41. </div>
  42. </div>
  43. )
  44. }
  45. const ConnectChatEditForm = connect(state => ({ searchState: state.promise?.userSearch?.payload?.data?.UserFind }),
  46. {
  47. onUserSearch: actionUserSearch,
  48. onChangeChat: actionFullEditChat
  49. })(ChatEditForm)
  50. export default ConnectChatEditForm