feature/IO-3000-Migrate-MSG-to-Sockets - Major Progress
Signed-off-by: Dave Richer <dave@imexsystems.ca>
This commit is contained in:
@@ -2,9 +2,9 @@ import MessagingActionTypes from "./messaging.types";
|
||||
|
||||
export const toggleChatVisible = () => ({
|
||||
type: MessagingActionTypes.TOGGLE_CHAT_VISIBLE
|
||||
//payload: user
|
||||
});
|
||||
|
||||
// Action to handle when a message is sent via WebSocket
|
||||
export const sendMessage = (message) => ({
|
||||
type: MessagingActionTypes.SEND_MESSAGE,
|
||||
payload: message
|
||||
@@ -19,17 +19,39 @@ export const sendMessageFailure = (error) => ({
|
||||
type: MessagingActionTypes.SEND_MESSAGE_FAILURE,
|
||||
payload: error
|
||||
});
|
||||
|
||||
// Set the selected conversation by ID
|
||||
export const setSelectedConversation = (conversationId) => ({
|
||||
type: MessagingActionTypes.SET_SELECTED_CONVERSATION,
|
||||
payload: conversationId
|
||||
});
|
||||
|
||||
// Open chat by phone number (if there’s a need to search for a conversation)
|
||||
export const openChatByPhone = (phoneNumber) => ({
|
||||
type: MessagingActionTypes.OPEN_CHAT_BY_PHONE,
|
||||
payload: phoneNumber
|
||||
});
|
||||
|
||||
// Set an individual message (e.g., from a new message event)
|
||||
export const setMessage = (message) => ({
|
||||
type: MessagingActionTypes.SET_MESSAGE,
|
||||
payload: message
|
||||
});
|
||||
|
||||
// Set the list of conversations received from WebSocket
|
||||
export const setConversations = (conversations) => ({
|
||||
type: MessagingActionTypes.SET_CONVERSATIONS,
|
||||
payload: conversations
|
||||
});
|
||||
|
||||
// Add a message to the conversation messages
|
||||
export const addMessage = (message) => ({
|
||||
type: MessagingActionTypes.ADD_MESSAGE,
|
||||
payload: message
|
||||
});
|
||||
|
||||
// Update unread count for a conversation (e.g., after marking messages as read)
|
||||
export const updateUnreadCount = (conversationId) => ({
|
||||
type: MessagingActionTypes.UPDATE_UNREAD_COUNT,
|
||||
payload: conversationId
|
||||
});
|
||||
|
||||
@@ -6,6 +6,9 @@ const INITIAL_STATE = {
|
||||
isSending: false,
|
||||
error: null,
|
||||
message: null,
|
||||
conversations: [], // Holds the list of conversations
|
||||
messages: [], // Holds the list of messages for the selected conversation
|
||||
unreadCount: 0,
|
||||
searchingForConversation: false
|
||||
};
|
||||
|
||||
@@ -13,40 +16,76 @@ const messagingReducer = (state = INITIAL_STATE, action) => {
|
||||
switch (action.type) {
|
||||
case MessagingActionTypes.SET_MESSAGE:
|
||||
return { ...state, message: action.payload };
|
||||
|
||||
case MessagingActionTypes.TOGGLE_CHAT_VISIBLE:
|
||||
return {
|
||||
...state,
|
||||
open: !state.open
|
||||
};
|
||||
|
||||
case MessagingActionTypes.OPEN_CHAT_BY_PHONE:
|
||||
return {
|
||||
...state,
|
||||
searchingForConversation: true
|
||||
};
|
||||
|
||||
case MessagingActionTypes.SET_SELECTED_CONVERSATION:
|
||||
return {
|
||||
...state,
|
||||
open: true,
|
||||
searchingForConversation: false,
|
||||
selectedConversationId: action.payload
|
||||
selectedConversationId: action.payload,
|
||||
messages: [] // Reset messages when a new conversation is selected
|
||||
};
|
||||
|
||||
case MessagingActionTypes.SEND_MESSAGE:
|
||||
return {
|
||||
...state,
|
||||
error: null,
|
||||
isSending: true
|
||||
};
|
||||
|
||||
case MessagingActionTypes.SEND_MESSAGE_SUCCESS:
|
||||
return {
|
||||
...state,
|
||||
message: "",
|
||||
isSending: false
|
||||
};
|
||||
|
||||
case MessagingActionTypes.SEND_MESSAGE_FAILURE:
|
||||
return {
|
||||
...state,
|
||||
error: action.payload
|
||||
error: action.payload,
|
||||
isSending: false
|
||||
};
|
||||
|
||||
case MessagingActionTypes.SET_CONVERSATIONS:
|
||||
return {
|
||||
...state,
|
||||
conversations: action.payload
|
||||
};
|
||||
|
||||
case MessagingActionTypes.ADD_MESSAGE:
|
||||
return {
|
||||
...state,
|
||||
messages: [...state.messages, action.payload]
|
||||
};
|
||||
|
||||
case MessagingActionTypes.UPDATE_UNREAD_COUNT:
|
||||
console.log("SKL");
|
||||
console.dir({ action, state });
|
||||
return {
|
||||
...state,
|
||||
conversations: Array.isArray(state.conversations)
|
||||
? state.conversations.map((conversation) =>
|
||||
conversation.id === action.payload
|
||||
? { ...conversation, unreadCount: 0 } // Reset unread count for the selected conversation
|
||||
: conversation
|
||||
)
|
||||
: state.conversations,
|
||||
unreadCount: Math.max(state.unreadCount - 1, 0) // Ensure unreadCount does not go below zero
|
||||
};
|
||||
|
||||
default:
|
||||
return state;
|
||||
}
|
||||
|
||||
@@ -19,3 +19,8 @@ export const searchingForConversation = createSelector(
|
||||
[selectMessaging],
|
||||
(messaging) => messaging.searchingForConversation
|
||||
);
|
||||
|
||||
// New selectors for conversations and unread count
|
||||
export const selectConversations = createSelector([selectMessaging], (messaging) => messaging.conversations);
|
||||
|
||||
export const selectUnreadCount = createSelector([selectMessaging], (messaging) => messaging.unreadCount);
|
||||
|
||||
@@ -5,6 +5,9 @@ const MessagingActionTypes = {
|
||||
SEND_MESSAGE_FAILURE: "SEND_MESSAGE_FAILURE",
|
||||
SET_SELECTED_CONVERSATION: "SET_SELECTED_CONVERSATION",
|
||||
OPEN_CHAT_BY_PHONE: "OPEN_CHAT_BY_PHONE",
|
||||
SET_MESSAGE: "SET_MESSAGE"
|
||||
SET_MESSAGE: "SET_MESSAGE",
|
||||
ADD_MESSAGE: "ADD_MESSAGE",
|
||||
UPDATE_UNREAD_COUNT: "UPDATE_UNREAD_COUNT",
|
||||
SET_CONVERSATIONS: "SET_CONVERSATIONS"
|
||||
};
|
||||
export default MessagingActionTypes;
|
||||
|
||||
Reference in New Issue
Block a user