main.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import Chat from "../components/chatWindow";
  2. import ChatsList from "../components/chatsList";
  3. import { useEffect } from "react";
  4. import io from 'socket.io-client';
  5. import { connect } from "react-redux";
  6. import { actionAddChat, actionAddChatBack, actionAddMSG, actionAddMSGBack, actionEditChat, actionEditMSG, actionEditMSGback, actionFullEditChat, actionFullGetChats, actionFullGetMessages, actionUploadFile, actionUserSearch } from "../actions";
  7. import ConnectChatForm from "../components/chatForm";
  8. import { ChatEditForm } from "../components/chatEditForm";
  9. //все в куче
  10. const Main = ({ match: { params: { _id } }, userID, chats, getChat, getMessages, addChat, editChat, addMSG, editMSG, editMSGState, sendMSG, search, userSearch, changeChat, addFile }) => {
  11. let chat_id = _id.split(".")[1]
  12. useEffect(() => {
  13. getChat(userID)
  14. console.log("монтируем")
  15. const socket = io("ws://chat.fs.a-level.com.ua")
  16. socket.emit("jwt", localStorage.authToken)
  17. socket.on("jwt_ok", data => console.log("С JWT все норм", data))
  18. socket.on("jwt_fail", error => console.log("С JWT траблы", error))
  19. socket.on("connect", () => {
  20. // getChat(userID)
  21. console.log("Законектились, сокет: ", socket.id)
  22. });
  23. socket.on("connect_error", error => console.log("ошибка конекта", error));
  24. socket.on("reconnect_attempt", () => console.log("пробуем реконектнуть"));
  25. socket.on("disconnect", () => console.log("дисконект", socket.id));
  26. socket.on('chat', chat => {
  27. console.log("это пришло по сокету (чат)", chat)
  28. addChat(chat._id, chat.title, chat.createdAt, chat.lastModified, chat.owner, chat.avatar, chat.messages, chat.members)
  29. })
  30. socket.on('msg', msg => {
  31. console.log("это пришло по сокету (сообщение)", msg)
  32. addMSG(true, msg.chat._id, msg._id, msg.text, msg.createdAt, msg.owner, msg.media, msg.replyTo)
  33. })
  34. return () => {
  35. console.log("размонтировали")
  36. }
  37. }, [])
  38. useEffect(() => {
  39. chat_id && getMessages(chat_id, 0)
  40. }, [_id])
  41. return (
  42. <main>
  43. <ChatsList chats={chats} />
  44. {_id === "chat" && <ConnectChatForm />}
  45. {chats[chat_id] &&
  46. <Chat chat_id={chat_id}
  47. chat_title={chats[chat_id].title}
  48. chat_avatar={chats[chat_id].avatar?.url}
  49. user_id={userID}
  50. messages={chats[chat_id].messages || []}
  51. onUpload={addFile}
  52. onSend={sendMSG}
  53. onMSGEdit={editMSG}
  54. onScrollTopComplete={getMessages} />}
  55. {chats[chat_id] && <ChatEditForm chat_id={chat_id}
  56. chat={chats[chat_id]}
  57. searchState={search}
  58. onUserSearch={userSearch}
  59. onChangeChat={changeChat}
  60. onUpload={addFile} />}
  61. </main>
  62. )
  63. }
  64. export const ConnectMain = connect(state => ({
  65. userID: state.auth.payload.sub.id,
  66. search: state.promise?.userSearch?.payload?.data?.UserFind,
  67. chats: state.chat,
  68. }),
  69. {
  70. getChat: actionFullGetChats,
  71. getMessages: actionFullGetMessages,
  72. addChat: actionAddChat,
  73. addMSG: actionAddMSG,
  74. editMSG: actionEditMSGback,
  75. editMSGState: actionEditMSG,
  76. sendMSG: actionAddMSGBack,
  77. userSearch: actionUserSearch,
  78. newChat: actionAddChatBack,
  79. changeChat: actionFullEditChat,
  80. addFile: actionUploadFile
  81. })(Main)