main.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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, 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, 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('msg', msg => {
  27. console.log("это пришло по сокету (сообщение)", msg)
  28. if (chats) {
  29. let check = chats[msg.chat._id]["messages"].filter(({ _id }) => _id === msg._id).length
  30. console.log(check)
  31. if (check) {
  32. editMSG(msg.chat._id, msg._id, msg.text, msg.media)
  33. } else {
  34. addMSG(msg.chat._id, msg._id, msg.text, msg.createdAt, msg.owner, msg.media)
  35. }
  36. }
  37. })
  38. socket.on('chat', chat => {
  39. console.log("это пришло по сокету (чат)", chat)
  40. let check = Object.keys(chats).filter(id => id === chat._id).length
  41. console.log(check)
  42. if (check) {
  43. editChat(chat._id, chat.title, chat.avatar, chat.members)
  44. } else {
  45. addChat(chat._id, chat.title, chat.createdAt, chat.lastModified, chat.owner, chat.avatar, chat.messages, chat.members)
  46. }
  47. })
  48. return () => {
  49. console.log("размонтировали")
  50. }
  51. }, [])
  52. useEffect(() => {
  53. chat_id && getMessages(chat_id)
  54. }, [_id])
  55. return (
  56. <main>
  57. <ChatsList chats={chats} />
  58. {_id === "chat" && <ConnectChatForm />}
  59. {chats[chat_id] &&
  60. <Chat chat_id={chat_id}
  61. chat_title={chats[chat_id].title}
  62. chat_avatar={chats[chat_id].avatar?.url}
  63. user_id={userID}
  64. messages={chats[chat_id].messages || []}
  65. onUpload={addFile}
  66. onSend={sendMSG} />}
  67. {chats[chat_id] && <ChatEditForm chat_id={chat_id}
  68. chat={chats[chat_id]}
  69. searchState={search}
  70. onUserSearch={userSearch}
  71. onChangeChat={changeChat}
  72. onUpload={addFile} />}
  73. </main>
  74. )
  75. }
  76. export const ConnectMain = connect(state => ({
  77. userID: state.auth.payload.sub.id, chats: state.chat,
  78. search: state.promise?.userSearch?.payload?.data?.UserFind
  79. }),
  80. {
  81. getChat: actionFullGetChats,
  82. getMessages: actionFullGetMessages,
  83. addChat: actionAddChat,
  84. editChat: actionEditChat,
  85. addMSG: actionAddMSG,
  86. editMSG: actionEditMSG,
  87. sendMSG: actionAddMSGBack,
  88. userSearch: actionUserSearch,
  89. newChat: actionAddChatBack,
  90. changeChat: actionFullEditChat,
  91. addFile: actionUploadFile
  92. })(Main)