import React, {useEffect, useState} from "react"; import {Box, HStack, Image, Input, InputGroup, InputRightElement, Stack, Text,} from "@chakra-ui/react"; import {ConversationType, MessagingType} from "../intefaces/interfaces"; import {useMutation, useQuery, useSubscription} from '@apollo/client'; import {addTableRecord, getSearchQuery, getSubscriptionQuery} from "../utils/GenericQueries"; import Moment from "react-moment"; import FilterInput from "./FilterInput"; // import blackUserIcon from "../../../assets/images/blackUserIcon.svg"; // import searchIcon from "./../../../assets/images/searchIcon.svg"; // import sendIcon from "./../../../assets/images/sendIcon.svg"; // import attachmentIcon from "./../../../assets/images/attachmentIcon.svg"; // import composeIcon from "./../../../assets/images/composeIcon.svg"; const blackUserIcon = "https://firebasestorage.googleapis.com/v0/b/imagestorage-7b2d2.appspot.com/o/blackUserIcon.svg?alt=media&token=cf82416b-a44c-4666-a963-fa1336993e80" const searchIcon = "https://firebasestorage.googleapis.com/v0/b/imagestorage-7b2d2.appspot.com/o/searchIcon.svg?alt=media&token=719b8858-b923-4077-8753-a575ea850796" const sendIcon = "https://firebasestorage.googleapis.com/v0/b/imagestorage-7b2d2.appspot.com/o/sendIcon.svg?alt=media&token=270a8bba-62f5-4289-9165-90acfc91be7e" const attachmentIcon = "https://firebasestorage.googleapis.com/v0/b/imagestorage-7b2d2.appspot.com/o/attachmentIcon.svg?alt=media&token=b88da0ce-a221-4c58-8d84-147a90ec9861" const composeIcon = "https://firebasestorage.googleapis.com/v0/b/imagestorage-7b2d2.appspot.com/o/composeIcon.svg?alt=media&token=538dd52a-3feb-498b-9b50-f68645f631b7" const conversationsChats: any = [] function getMessagefor() { let userId = sessionStorage.getItem("authUser"); if (userId == null || userId == '1') return 2 return 1; } function getMessageBy() { let userId = sessionStorage.getItem("authUser"); if (userId == null) return 1; return parseInt(userId) } const createDefaultMessage = { message_by: getMessageBy(), message_for: getMessagefor(), message_text: '', sender_image: '' } const Conversation = (props: ConversationType) => { const {id, title, shortMessage, onConvoSelect, selected, primary, secondary} = props; const onConvoSelectChange = () => { onConvoSelect(id) } return ( FROM: {title} {shortMessage.substring(0, 41)}... ); }; const Messaging = (props: MessagingType) => { const {messageTable, messageCol, userTable, userCol, primary, secondary} = props; const {loading, error, data} = useQuery(getSearchQuery(userTable, userCol)); const allmessages = useSubscription(getSubscriptionQuery(messageTable, messageCol)); const [conversations, setConversations] = useState(conversationsChats); const [defaultMessage, setDefaultMessage] = useState(createDefaultMessage); const [sendTheMessage, {loading: messageSending}] = useMutation(addTableRecord(messageTable, messageCol)); useEffect(() => { if (data) { conversationsDisplay() } }, [data]) function selectConversation(user_id: any) { function getUserBydId(id: any) { let user = data.app_users.find((u: any) => u.id === id) return user } let appuser = getUserBydId(user_id); let temp = {...defaultMessage}; temp.message_for = appuser.id; temp.sender_image = appuser.image; setDefaultMessage(temp); } function conversationsDisplay() { let conversations = data.app_users; let convo = []; let myId = defaultMessage.message_by; for (let i = 0; i < conversations.length; i++) { if (conversations[i].id != myId) { convo.push({ id: conversations[i].id, title: conversations[i].first_name, shortMessage: `${conversations[i].first_name} we should be something`, }) } } setConversations(convo); } function conversationsFilter(filteredConversation: any) { let conversations = filteredConversation; let convo = []; let myId = defaultMessage.message_by; for (let i = 0; i < conversations.length; i++) { if (conversations[i].id != myId) { convo.push({ id: conversations[i].id, title: conversations[i].first_name, shortMessage: `${conversations[i].first_name} we should be something`, }) } } setConversations(convo); } function displayChat(messages: any) { let filteredMessages: any[] = []; for (let i = 0; i < messages.length; i++) { if (messages[i].message_by == defaultMessage.message_by || messages[i].message_for == defaultMessage.message_by) { filteredMessages.push(messages[i]) } } return filteredMessages } //form fields const onMessageText = (e: any) => { let temp = {...defaultMessage} temp.message_text = e.target.value setDefaultMessage(temp) } const clearMessage = () => { let tempx = {...defaultMessage}; tempx.message_text = ""; setDefaultMessage(tempx); } const sendMessage = () => { if (defaultMessage.message_text.trim() == "") { return; } const {sender_image, ...temp} = defaultMessage; sendTheMessage({ variables: { object: temp } }).then(res => { clearMessage() }).catch(err => { console.log(err.message) }) } if (loading || allmessages.loading) { return
Loading...
} if (allmessages.error || error) { return
Error...
} return ( {/* left box */} Message Center Compose { conversationsFilter(filteredConversation) }} /> }/> Inbox {conversations.map((conversation: any) => { return () }) } {/* right box */} SATURDAY, JANUARY 10, 2021 1.39 PM { displayChat(allmessages.data.app_demo_messages).map((res: any) => ( <> {(res.message_by == defaultMessage.message_by && res.message_for == defaultMessage.message_for) && {res.message_text} {res.message_time} } {(res.message_by == defaultMessage.message_for && res.message_for == defaultMessage.message_by) && image {res.message_text} {res.message_time} } )) } { if (e.key === 'Enter') { sendMessage() } }} value={defaultMessage.message_text} onChange={onMessageText} bg="white" placeholder="Reply" alignItems={"center"} h="48px" color="black" _placeholder={{color: "black"}} textAlign={"left"} fontFamily="MaisonBold" fontSize="14px" fontStyle="normal" fontWeight="700" lineHeight="16px" letterSpacing="0.5px" /> {!messageSending && } /> } Add file or attachment {" "} ); }; export default Messaging;