import { PayloadAction, createSlice } from '@reduxjs/toolkit'; import { Logger } from '../../utils/Log'; import { IMessage, IMessagesState, ITyping } from './types'; import { messagesService } from '../../services/messages-service'; import { sharedFilesService } from '../../services/sharedFiles'; const logger = new Logger('invitationsSlice'); const initialState: IMessagesState = { loading: false, messages: [], downloadProgress: 0, downloadStatus: '' } interface ISendMsgInfo { message: IMessage, urgency: string , attachedFileUri: string[] } const messagesSlice = createSlice({ name: 'messages', initialState, reducers: { getMessages(state, action:PayloadAction){ state.loading =true; messagesService.getMessages(action.payload); }, getMessagesResult(state, action:PayloadAction<{messages: IMessage[], scene: string, conversationJid: string}>){ state.loading = false; if(action.payload.scene === 'messages'){ messagesService.messagesMarkedASReadInActiveConversation(action.payload.conversationJid); } state.messages = action.payload.messages; }, clearMessages(state){ state.messages = []; }, loadMoreMessages(state){ state.loading =true; messagesService.loadMore(); }, sendMessage(state, action:PayloadAction){ messagesService.sendMessage(action.payload.message, action.payload.urgency, action.payload.attachedFileUri); state.messages.push(action.payload.message); }, deleteMessage(state, action:PayloadAction){ messagesService.deleteMessage(action.payload); }, replyMessage(state, action:PayloadAction){ messagesService.replyMessage(action.payload) }, forwardMessage(state, action:PayloadAction<{text: string, message: IMessage, conversationsIds: string[]}>){ messagesService.forwardMessage(action.payload.conversationsIds, action.payload.message._id,action.payload.text); }, downloadFile(state, action:PayloadAction){ sharedFilesService.downloadFile(action.payload); }, getDownloadFileProgress(state, action:PayloadAction){ state.downloadProgress = action.payload; }, getDownloadFileStatus(state, action:PayloadAction){ state.downloadStatus = action.payload; }, getIsTypingResult(state, action:PayloadAction){ state.typing = action.payload; } } }); // Export action creators and reducer export const { getMessages, getMessagesResult, clearMessages, loadMoreMessages, sendMessage, deleteMessage, replyMessage, forwardMessage, downloadFile, getDownloadFileProgress, getDownloadFileStatus, getIsTypingResult } = messagesSlice.actions; export default messagesSlice.reducer;