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"; 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"; // 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 conversationsChats: any = []; function getMessagefor() { 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...
; } function showCustomerStaffs(conversations: any) { let customerSupport = new Set(); customerSupport.add(1); let customerAgents = conversations.filter((c: any) => customerSupport.has(c.id) ); return customerAgents; } return ( {/* left box */} Message Center Compose { conversationsFilter(filteredConversation); }} /> }/> Inbox {showCustomerStaffs(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;