Spaces:
Paused
Paused
| import { useDispatch, useSelector } from "react-redux"; | |
| import { chatActions } from "../store/chatSlice"; | |
| import useSocket from "./useSocket"; | |
| const useSendMessage = (setMessageEmpty) => { | |
| // Get messageMode | |
| const messageMode = useSelector((state) => state.chatReducer.mode); | |
| // Get socketFns | |
| const { socketEmit, userId } = useSocket(); | |
| // Get currentChatRoom | |
| const chatRoomId = useSelector( | |
| (state) => state.chatReducer.currentChatRoom._id | |
| ); | |
| // Get chat profile of other user to check if it's the bot | |
| const chatWithBot = useSelector( | |
| (state) => | |
| state.chatReducer.currentChatRoom.chatProfile.username === | |
| process.env.REACT_APP_BOT_USERNAME | |
| ); | |
| const dispatch = useDispatch(); | |
| const sendMessage = (messageData) => { | |
| // Construct message | |
| const message = { | |
| sender: userId, | |
| timeSent: new Date(Date.now()).toISOString(), | |
| readStatus: chatWithBot ? true : false, | |
| deliveredStatus: chatWithBot ? true : false, | |
| }; | |
| // If message is raw text | |
| if (messageMode === "typing") { | |
| message.messageType = "text"; | |
| message.message = document.querySelector("#messageInput").innerHTML; | |
| document.querySelector("#messageInput").innerHTML = ""; | |
| setMessageEmpty(true); | |
| } | |
| // If message is a recording | |
| if (messageMode === "audioUpload") { | |
| message.messageType = "voice"; | |
| message.voiceNoteUrl = messageData.url; | |
| message.voiceNoteDuration = messageData.duration; | |
| } | |
| // If message is an image upload | |
| if (messageMode === "imageUpload") { | |
| message.imageUrl = messageData.url; | |
| message.messageType = "image"; | |
| } | |
| // If message is being sent by bot | |
| if (messageData?.botId) { | |
| message.sender = messageData.botId; | |
| message.messageType = "text"; | |
| message.message = messageData.botMessage; | |
| } | |
| // If message is a call | |
| if (!messageMode && messageData?.callType) { | |
| message.callDetails = messageData; | |
| message.messageType = "call"; | |
| message.sender = messageData.sender; | |
| } | |
| // Emit message event | |
| socketEmit("user:message", { | |
| chatRoomId: | |
| messageData?.callType || messageData?.botId | |
| ? messageData.chatRoomId | |
| : chatRoomId, | |
| message, | |
| }); | |
| // Set chatMode to sending | |
| dispatch(chatActions.setMode({ mode: "sending" })); | |
| }; | |
| return { sendMessage }; | |
| }; | |
| export default useSendMessage; | |