123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- import { actionPromise } from "./actionsPromise";
- import { gql } from "../helpers/gql";
- import { actionUploadFiles } from "./actionsMedia";
- import { history } from "../App";
- import { actionSetDropMedia, actionSetMessageEditor } from "../reducers/chatReducer";
- import { addUploadDate } from "../components/utils/addUploadDate";
- import { actionOpenModal } from "../reducers/modalReducer";
- import { actionGetOneChat } from "./actionsForChats";
- export const actionAddMessages = (data, id) => ({type: 'MSG', data, id});
- const actionAddMessage = (message, id) => ({type: 'MSG', data: [message], id});
- const actionGetOneMessage = (_id) =>
- actionPromise('oneMessage', gql(`query getOneMes($mesId: String){
- MessageFindOne(query: $mesId){
- _id
- text
- createdAt
- chat{
- _id
- }
- media {
- url
- _id
- type
- originalFileName
- }
- replyTo{
- _id
- text
- media {
- url
- _id
- type
- }
- owner {
- nick
- }
- }
- replies{
- _id text
- chat{
- _id
- }
- }
- forwarded{
- _id
- text
- owner {
- nick
- }
- media {
- url
- _id
- type
- }
- }
- forwardWith{
- _id
- text
- chat{
- _id
- }
- }
- owner {
- _id
- nick
- avatar {
- url
- }
- }
- }
- }`, {mesId: JSON.stringify([{_id}])}))
- export const actionUpsertMSG = (message) =>
- actionPromise('sendMSG', gql(`mutation MessageUpsert($message: MessageInput) {
- MessageUpsert(message: $message) {
- _id
- createdAt
- text
- media {
- url
- _id
- type
- }
- replyTo{
- _id
- }
- forwarded{
- _id
- }
- owner {
- nick
- avatar {
- url
- }
- }
- chat{
- _id
- }
- }
- }`, {
- message
- }))
- export const actionSendMessage = (messageId, chatId, text, media, replyTo, forwarded) =>
- async (dispatch, getState) => {
- let newMedia = null
- if(media){
- let checkedMedia = media.filter(item => !item._id && item)
- console.log(media, checkedMedia)
- let uploadedFiles = checkedMedia.length !== 0 ? await dispatch(actionUploadFiles(checkedMedia)) : null;
- newMedia = uploadedFiles ? [...uploadedFiles, ...media.filter(item => item._id && item)].map(({_id}) => ({_id})) : null;
- console.log(uploadedFiles)
- }
-
- const mes = Object.fromEntries(Object.entries({
- _id: messageId, chat: (chatId ? {_id: chatId} : chatId), text: text, media: newMedia, replyTo: (replyTo ? {_id: replyTo} : replyTo), forwarded: (forwarded ? {_id: forwarded} : forwarded)
- }).filter(([_, v]) => v != null));
- console.log(mes)
- let message = await dispatch(actionUpsertMSG(mes))
-
- return message
-
- }
- export const actionGetMessageFromSocket = (msg) =>
- async (dispatch, getState) => {
- let message = await dispatch(actionGetOneMessage(msg._id));
- dispatch(actionAddMessage(message, message.chat._id));
- dispatch(actionGetOneChat(msg.chat._id));
- ////////check all replies and forwardWith (if message has them to send changes)
- const {replies, forwardWith} = message;
- const state = getState();
- // const [,route, histId] = history.location.pathname.split('/');
- if(replies){
- replies.forEach(async ({_id, chat}) => {
- if(state.chats[chat._id].messages?.hasOwnProperty(_id)){
- let mes = await dispatch(actionGetOneMessage(_id))
- dispatch(actionAddMessage(mes, chat._id));
- }
-
- })
- }
- if(forwardWith){
- forwardWith.forEach(async ({_id, chat}) => {
- if(state.chats[chat._id].messages?.hasOwnProperty(_id)){
- let mes = await dispatch(actionGetOneMessage(_id))
- dispatch(actionAddMessage(mes, chat._id));
- }
-
- })
- }
- }
- export const actionEditMessage = (chatId, message) =>
- (dispatch, getState) => {
- dispatch(actionSetMessageEditor(chatId, {message: message, value: message.text}))
- if (message.media){
- let files = addUploadDate([...message.media])
- console.log(files)
- dispatch(actionSetDropMedia(chatId, files))
- dispatch(actionOpenModal('messageEditorMediaModal'))
- }
- }
|