main.js 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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(msg.chat._id, msg._id, msg.text, msg.createdAt, msg.owner, msg.media)
  33. })
  34. return () => {
  35. console.log("размонтировали")
  36. }
  37. }, [])
  38. useEffect(() => {
  39. chat_id && getMessages(chat_id)
  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. {chats[chat_id] && <ChatEditForm chat_id={chat_id}
  55. chat={chats[chat_id]}
  56. searchState={search}
  57. onUserSearch={userSearch}
  58. onChangeChat={changeChat}
  59. onUpload={addFile} />}
  60. </main>
  61. )
  62. }
  63. export const ConnectMain = connect(state => ({
  64. userID: state.auth.payload.sub.id,
  65. search: state.promise?.userSearch?.payload?.data?.UserFind,
  66. chats: state.chat,
  67. }),
  68. {
  69. getChat: actionFullGetChats,
  70. getMessages: actionFullGetMessages,
  71. addChat: actionAddChat,
  72. addMSG: actionAddMSG,
  73. editMSG: actionEditMSGback,
  74. editMSGState: actionEditMSG,
  75. sendMSG: actionAddMSGBack,
  76. userSearch: actionUserSearch,
  77. newChat: actionAddChatBack,
  78. changeChat: actionFullEditChat,
  79. addFile: actionUploadFile
  80. })(Main)