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 && (
{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;