chatEditForm.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import { useEffect, useState } from "react"
  2. import { connect } from "react-redux"
  3. import { actionEditChat, actionFullEditChat, actionUploadFile, actionUserSearch } from "../actions"
  4. import { MemberList, UserSearch } from "./chatForm"
  5. import { MyDropzone } from "./dropzone"
  6. export const ChatEditForm = ({ chat_id, chat, searchState, onUpload, onUserSearch, onChangeChat }) => {
  7. let [edit, setEdit] = useState(false)
  8. let [newTitle, setNewTitle] = useState(chat.title || "")
  9. let [newAvatar, setNewAvatar] = useState(chat.avatar)
  10. let [newMembers, setNewMembers] = useState(chat.members)
  11. useEffect(() => {
  12. setEdit(false)
  13. setNewTitle(chat.title)
  14. setNewAvatar(chat.avatar)
  15. setNewMembers(chat.members)
  16. }, [chat])
  17. console.log(chat_id)
  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. <MyDropzone maxFiles={1} onUpload={onUpload} onSet={setNewAvatar} />
  34. </div> :
  35. chat.avatar && <img src={"/" + chat.avatar.url} />}
  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._id, newMembers)}>Применить изменения</button>}
  41. </div>
  42. </div>
  43. )
  44. }
  45. export const ConnectChatEditForm = connect(state => ({ searchState: state.promise?.userSearch?.payload?.data?.UserFind }),
  46. {
  47. onUpload: actionUploadFile,
  48. onUserSearch: actionUserSearch,
  49. onChangeChat: actionFullEditChat
  50. })(ChatEditForm)