12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- import { history } from "../App";
- import {
- actionAboutMe,
- actionMsgOne,
- actionMsgList,
- actionChatOne,
- actionChatLeft,
- } from "../reducers";
- import { actionGetMsgsByChat, actionGetMsgById, actionGetChatById } from ".";
- // данные из сокета приходят не полные,
- // поэтому потом приходится затягивать доп данные из графа
- export const actionOnMsg = (msg) => async (dispatch, getState) => {
- const state = getState();
- const myId = state.auth.payload?.sub?.id;
- const ownerId = msg.owner?._id;
- const chatId = msg.chat?._id;
- await dispatch(actionMsgOne(msg));
- const msgFull = await dispatch(actionGetMsgById(msg._id));
- await dispatch(actionMsgOne(msgFull));
- const chatUpdated = await dispatch(actionGetChatById(chatId));
- await dispatch(actionChatOne(chatUpdated));
- };
- export const actionOnChat = (chat) => async (dispatch, getState) => {
- const state = getState();
- const myId = state.auth.payload?.sub?.id;
- // приходится делать так, так как овнер не приходит по сокету
- const ownerId = state.chats[chat._id]?.owner?._id;
- dispatch(actionChatOne(chat));
- const chatFull = await dispatch(actionGetChatById(chat._id));
- await dispatch(actionChatOne(chatFull));
- const chatMsgs = await dispatch(actionGetMsgsByChat(chat._id));
- await dispatch(actionMsgList(chatMsgs));
- await dispatch(actionAboutMe());
- };
- export const actionOnChatLeft = (chat) => async (dispatch, getState) => {
- const state = getState();
- const myId = state.auth.payload?.sub?.id;
- const ownerId = state.chats[chat._id]?.owner?._id;
- // если чат чужой, то удаляем его и апдейтим роутер
- // если мой, то просто обновляем статус чата
- if (myId !== ownerId) {
- dispatch(actionChatLeft(chat));
- const [, , histId] = history.location.pathname.split("/");
- if (histId === chat._id) {
- history.push("/");
- }
- } else {
- dispatch(actionChatOne(chat));
- const chatFull = await dispatch(actionGetChatById(chat._id));
- await dispatch(actionChatOne(chatFull));
- }
- await dispatch(actionAboutMe());
- };
|