socketActions.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import { history } from "../App";
  2. import {
  3. actionAboutMe,
  4. actionMsgOne,
  5. actionMsgList,
  6. actionChatOne,
  7. actionChatLeft,
  8. } from "../reducers";
  9. import { actionGetMsgsByChat, actionGetMsgById, actionGetChatById } from ".";
  10. // данные из сокета приходят не полные,
  11. // поэтому потом приходится затягивать доп данные из графа
  12. export const actionOnMsg = (msg) => async (dispatch, getState) => {
  13. const state = getState();
  14. const myId = state.auth.payload?.sub?.id;
  15. const ownerId = msg.owner?._id;
  16. const chatId = msg.chat?._id;
  17. await dispatch(actionMsgOne(msg));
  18. const msgFull = await dispatch(actionGetMsgById(msg._id));
  19. await dispatch(actionMsgOne(msgFull));
  20. const chatUpdated = await dispatch(actionGetChatById(chatId));
  21. await dispatch(actionChatOne(chatUpdated));
  22. };
  23. export const actionOnChat = (chat) => async (dispatch, getState) => {
  24. const state = getState();
  25. const myId = state.auth.payload?.sub?.id;
  26. // приходится делать так, так как овнер не приходит по сокету
  27. const ownerId = state.chats[chat._id]?.owner?._id;
  28. dispatch(actionChatOne(chat));
  29. const chatFull = await dispatch(actionGetChatById(chat._id));
  30. await dispatch(actionChatOne(chatFull));
  31. const chatMsgs = await dispatch(actionGetMsgsByChat(chat._id));
  32. await dispatch(actionMsgList(chatMsgs));
  33. await dispatch(actionAboutMe());
  34. };
  35. export const actionOnChatLeft = (chat) => async (dispatch, getState) => {
  36. const state = getState();
  37. const myId = state.auth.payload?.sub?.id;
  38. const ownerId = state.chats[chat._id]?.owner?._id;
  39. // если чат чужой, то удаляем его и апдейтим роутер
  40. // если мой, то просто обновляем статус чата
  41. if (myId !== ownerId) {
  42. dispatch(actionChatLeft(chat));
  43. const [, , histId] = history.location.pathname.split("/");
  44. if (histId === chat._id) {
  45. history.push("/");
  46. }
  47. } else {
  48. dispatch(actionChatOne(chat));
  49. const chatFull = await dispatch(actionGetChatById(chat._id));
  50. await dispatch(actionChatOne(chatFull));
  51. }
  52. await dispatch(actionAboutMe());
  53. };