diff --git a/qortal-ui-core/language/us.json b/qortal-ui-core/language/us.json
index 2aa00796..c2bc9565 100644
--- a/qortal-ui-core/language/us.json
+++ b/qortal-ui-core/language/us.json
@@ -518,7 +518,11 @@
"bcchange10": "More",
"bcchange11": "Reply",
"bcchange12": "Edit",
- "bcchange13": "Reaction"
+ "bcchange13": "Reaction",
+ "bcchange14": "Forward",
+ "bcchange15": "Message Forwarded",
+ "bcchange16": "Choose recipient",
+ "bcchange17": "FORWARDED"
},
"grouppage": {
"gchange1": "Qortal Groups",
diff --git a/qortal-ui-plugins/plugins/core/components/ChatHead.js b/qortal-ui-plugins/plugins/core/components/ChatHead.js
index a16b11fc..4e9c170c 100644
--- a/qortal-ui-plugins/plugins/core/components/ChatHead.js
+++ b/qortal-ui-plugins/plugins/core/components/ChatHead.js
@@ -14,6 +14,7 @@ class ChatHead extends LitElement {
iconName: { type: String },
activeChatHeadUrl: { type: String },
isImageLoaded: { type: Boolean },
+ setActiveChatHeadUrl: {attribute: false}
}
}
@@ -116,8 +117,6 @@ class ChatHead extends LitElement {
}
-
-
return html`
this.getUrl(this.chatInfo.url)} class="clearfix ${this.activeChatHeadUrl === this.chatInfo.url ? 'active' : ''}">
${this.isImageLoaded ? html`${avatarImg}` : html`` }
@@ -150,8 +149,19 @@ class ChatHead extends LitElement {
parentEpml.imReady()
}
+ shouldUpdate(changedProperties) {
+ if(changedProperties.has('activeChatHeadUrl')){
+ return true
+ }
+ if(changedProperties.has('chatInfo')){
+ return true
+ }
+
+ return false
+ }
+
getUrl(chatUrl) {
- this.onPageNavigation(`/app/q-chat/${chatUrl}`)
+ this.setActiveChatHeadUrl(chatUrl)
}
onPageNavigation(pageUrl) {
diff --git a/qortal-ui-plugins/plugins/core/components/ChatPage.js b/qortal-ui-plugins/plugins/core/components/ChatPage.js
index 158d24eb..48edbb1f 100644
--- a/qortal-ui-plugins/plugins/core/components/ChatPage.js
+++ b/qortal-ui-plugins/plugins/core/components/ChatPage.js
@@ -16,6 +16,7 @@ import './NameMenu.js';
import './TimeAgo.js';
import './ChatTextEditor';
import './WrapperModal';
+import './ChatSelect.js'
import '@polymer/paper-spinner/paper-spinner-lite.js';
import '@material/mwc-button';
import '@material/mwc-dialog';
@@ -67,7 +68,11 @@ class ChatPage extends LitElement {
userLanguage: { type: String },
lastMessageRefVisible: { type: Boolean },
isLoadingOldMessages: {type: Boolean},
- isEditMessageOpen: { type: Boolean }
+ isEditMessageOpen: { type: Boolean },
+ webSocket: {attribute: false},
+ chatHeads: {type: Array},
+ forwardActiveChatHeadUrl: {type: String},
+ openForwardOpen: {type: Boolean}
}
}
@@ -77,6 +82,15 @@ class ChatPage extends LitElement {
scroll-behavior: smooth;
}
+ .chat-head-container {
+ display: flex;
+ justify-content: flex-start;
+ flex-direction: column;
+ height: 50vh;
+ overflow-y: auto;
+ width: 100%;
+ }
+
.chat-container {
display: grid;
grid-template-rows: minmax(6%, 92vh) minmax(40px, auto);
@@ -428,6 +442,11 @@ class ChatPage extends LitElement {
height: 100%;
}
+ .dialog-container-title {
+ color: var(--black);
+ font-size: 18px;
+ }
+
.dialog-container-loader {
position: relative;
display: flex;
@@ -549,7 +568,10 @@ class ChatPage extends LitElement {
position: 'top-start',
boxShadow: 'rgba(4, 4, 5, 0.15) 0px 0px 0px 1px, rgba(0, 0, 0, 0.24) 0px 8px 16px 0px'
});
+ this.openForwardOpen = false
}
+
+
render() {
return html`
@@ -701,11 +723,105 @@ class ChatPage extends LitElement {
+ {
+ this.openForwardOpen = false
+ this.forwardActiveChatHeadUrl = ""
+ } }
+ style=${this.openForwardOpen ? "display: block" : "display: none"}>
+
+
+
+
${translate("blockpage.bcchange16")}
+
+
+ ${this.chatHeads.map((item)=> {
+ return html` {
+ this.forwardActiveChatHeadUrl = val
+ }} chatInfo=${JSON.stringify(item)}>`
+ })}
+
+
+
+
+
+
+
+
+
`
}
-
+ setForwardProperties(forwardedMessage){
+ this.openForwardOpen = true
+ this.forwardedMessage = forwardedMessage
+ }
+
+ async sendForwardMessage(){
+ let parsedMessageObj = {}
+ let publicKey = {
+ hasPubKey: false,
+ key: ''
+ }
+ try {
+ parsedMessageObj = JSON.parse(this.forwardedMessage);
+
+ } catch (error) {
+ parsedMessageObj = {}
+ }
+
+ try {
+ const res = await parentEpml.request('apiCall', {
+ type: 'api',
+ url: `/addresses/publickey/${this.forwardChatId}`
+ })
+ if (res.error === 102) {
+ publicKey.key = ''
+ publicKey.hasPubKey = false
+ } else if (res !== false) {
+ publicKey.key = res
+ publicKey.hasPubKey = true
+ } else {
+ publicKey.key = ''
+ publicKey.hasPubKey = false
+ }
+ } catch (error) {
+
+ }
+
+ try {
+ const message = {
+ ...parsedMessageObj,
+ type: 'forward'
+ }
+ delete message.reactions
+ const stringifyMessageObject = JSON.stringify(message)
+ this.sendMessage(stringifyMessageObject, undefined, '', true, {
+ isReceipient: true,
+ chatId: 'Qdxha59Cm1Ty4QkKMBWPnKrNigcDCDk6eq',
+ publicKey: {
+ hasPubKey: false,
+ key: ''
+ }
+ })
+ } catch (error) {
+ console.log({error})
+ }
+ }
showLastMessageRefScroller(props) {
this.lastMessageRefVisible = props;
@@ -733,13 +849,18 @@ class ChatPage extends LitElement {
this.chatEditor.enable();
}
- async firstUpdated() {
- window.addEventListener('storage', () => {
- const checkLanguage = localStorage.getItem('qortalLanguage');
- use(checkLanguage);
- this.userLanguage = checkLanguage;
- })
+ changeMsgInput(id) {
+
+ this.chatEditor.remove()
+ this.chatMessageInput = this.shadowRoot.getElementById(id);
+ this.initChatEditor();
+ }
+ async initUpdate(){
+ if(this.webSocket){
+ this.webSocket.close()
+ this.webSocket= ''
+ }
const getAddressPublicKey = () => {
parentEpml.request('apiCall', {
@@ -781,6 +902,16 @@ class ChatPage extends LitElement {
// this.initChatEditor();
}, 100)
+
+ }
+
+ async firstUpdated() {
+ window.addEventListener('storage', () => {
+ const checkLanguage = localStorage.getItem('qortalLanguage');
+ use(checkLanguage);
+ this.userLanguage = checkLanguage;
+ })
+
parentEpml.ready().then(() => {
parentEpml.subscribe('selected_address', async selectedAddress => {
this.selectedAddress = {}
@@ -804,10 +935,11 @@ class ChatPage extends LitElement {
})
})
parentEpml.imReady();
+
+ await this.initUpdate()
}
async updated(changedProperties) {
-
if (changedProperties && changedProperties.has('userLanguage')) {
const userLang = changedProperties.get('userLanguage')
@@ -817,6 +949,10 @@ class ChatPage extends LitElement {
}
}
+ if (changedProperties && changedProperties.has('chatId') && changedProperties.get('chatId')) {
+ await this.initUpdate()
+ }
+
}
async renderPlaceholder() {
@@ -849,6 +985,7 @@ class ChatPage extends LitElement {
renderChatScroller() {
return html`
this.setEditedMessageObj(val)}
.focusChatEditor=${() => this.focusChatEditor()}
.sendMessage=${(val) => this._sendMessage(val)}
+ .sendMessageForward=${(messageText, typeMessage, chatReference, isForward, forwardParams)=> this.sendMessage(messageText, typeMessage, chatReference, isForward, forwardParams)}
.showLastMessageRefScroller=${(val) => this.showLastMessageRefScroller(val)}
.emojiPicker=${this.emojiPicker}
?isLoadingMessages=${this.isLoadingOldMessages}
.setIsLoadingMessages=${(val) => this.setIsLoadingMessages(val)}
+ .setForwardProperties=${(forwardedMessage)=> this.setForwardProperties(forwardedMessage)}
>
`
@@ -1119,7 +1258,6 @@ class ChatPage extends LitElement {
async fetchChatMessages(chatId) {
const initDirect = async (cid) => {
-
let initial = 0
let directSocketTimeout
@@ -1138,22 +1276,22 @@ class ChatPage extends LitElement {
directSocketLink = `ws://${nodeUrl}/websockets/chat/messages?involving=${window.parent.reduxStore.getState().app.selectedAddress.address}&involving=${cid}`;
}
- const directSocket = new WebSocket(directSocketLink);
+ this.webSocket = new WebSocket(directSocketLink);
// Open Connection
- directSocket.onopen = () => {
+ this.webSocket.onopen = () => {
setTimeout(pingDirectSocket, 50)
}
// Message Event
- directSocket.onmessage = async (e) => {
+ this.webSocket.onmessage = async (e) => {
if (initial === 0) {
const isReceipient = this.chatId.includes('direct')
-
- const chatReference1 = isReceipient ? 'direct' : 'group';
- const chatReference2 = this.chatId.split('/')[1];
+ // commented out code= localstorage persistance
+ // const chatReference1 = isReceipient ? 'direct' : 'group';
+ // const chatReference2 = this.chatId.split('/')[1];
// const cachedData = await messagesCache.getItem(`${chatReference1}-${chatReference2}`);
const cachedData = null
let getInitialMessages = []
@@ -1186,17 +1324,17 @@ class ChatPage extends LitElement {
}
// Closed Event
- directSocket.onclose = () => {
+ this.webSocket.onclose = () => {
clearTimeout(directSocketTimeout)
}
// Error Event
- directSocket.onerror = (e) => {
+ this.webSocket.onerror = (e) => {
clearTimeout(directSocketTimeout)
}
const pingDirectSocket = () => {
- directSocket.send('ping')
+ this.webSocket.send('ping')
directSocketTimeout = setTimeout(pingDirectSocket, 295000)
}
@@ -1224,16 +1362,16 @@ class ChatPage extends LitElement {
groupSocketLink = `ws://${nodeUrl}/websockets/chat/messages?txGroupId=${groupId}`;
}
- const groupSocket = new WebSocket(groupSocketLink);
+ this.webSocket = new WebSocket(groupSocketLink);
// Open Connection
- groupSocket.onopen = () => {
+ this.webSocket.onopen = () => {
setTimeout(pingGroupSocket, 50)
}
// Message Event
- groupSocket.onmessage = async (e) => {
+ this.webSocket.onmessage = async (e) => {
if (initial === 0) {
const isGroup = this.chatId.includes('group')
@@ -1275,17 +1413,17 @@ class ChatPage extends LitElement {
}
// Closed Event
- groupSocket.onclose = () => {
+ this.webSocket.onclose = () => {
clearTimeout(groupSocketTimeout)
}
// Error Event
- groupSocket.onerror = (e) => {
+ this.webSocket.onerror = (e) => {
clearTimeout(groupSocketTimeout)
}
const pingGroupSocket = () => {
- groupSocket.send('ping')
+ this.webSocket.send('ping')
groupSocketTimeout = setTimeout(pingGroupSocket, 295000)
}
@@ -1533,7 +1671,7 @@ class ChatPage extends LitElement {
const findEmojiIndex = reactions.findIndex((reaction)=> reaction.type === outSideMsg.reaction)
if(findEmojiIndex !== -1){
let users = reactions[findEmojiIndex].users || []
- const findUserIndex = users.find((user)=> user === this.selectedAddress.address )
+ const findUserIndex = users.findIndex((user)=> user === this.selectedAddress.address )
if(findUserIndex !== -1){
users.splice(findUserIndex, 1)
} else {
@@ -1614,8 +1752,7 @@ class ChatPage extends LitElement {
}
}
- async sendMessage(messageText, typeMessage, chatReference) {
-
+ async sendMessage(messageText, typeMessage, chatReference, isForward, forwardParams) {
this.isLoading = true;
let _reference = new Uint8Array(64);
@@ -1663,7 +1800,55 @@ class ChatPage extends LitElement {
}
};
- const _computePow = async (chatBytes) => {
+ const sendForwardRequest = async () => {
+ const { publicKey } = forwardParams
+
+ const isRecipient = this.forwardActiveChatHeadUrl.includes('direct') === true ? true : false;
+
+ const chatId = this.forwardActiveChatHeadUrl.split('/')[1];
+ this.openForwardOpen = false
+ if (isRecipient === true) {
+ let chatResponse = await parentEpml.request('chat', {
+ type: 18,
+ nonce: this.selectedAddress.nonce,
+ params: {
+ timestamp: Date.now(),
+ recipient: chatId,
+ recipientPublicKey: publicKey.key,
+ hasChatReference: 0,
+ chatReference: "",
+ message: messageText,
+ lastReference: reference,
+ proofOfWorkNonce: 0,
+ isEncrypted: publicKey.hasPubKey === false ? 0 : 1,
+ isText: 1
+ }
+ });
+
+ _computePow(chatResponse, true)
+ } else {
+ let groupResponse = await parentEpml.request('chat', {
+ type: 181,
+ nonce: this.selectedAddress.nonce,
+ params: {
+ timestamp: Date.now(),
+ groupID: Number(chatId),
+ hasReceipient: 0,
+ hasChatReference: 0,
+ chatReference: chatReference,
+ message: messageText,
+ lastReference: reference,
+ proofOfWorkNonce: 0,
+ isEncrypted: 0, // Set default to not encrypted for groups
+ isText: 1
+ }
+ });
+
+ _computePow(groupResponse, true)
+ }
+ };
+
+ const _computePow = async (chatBytes, isForward) => {
const difficulty = this.balance === 0 ? 12 : 8;
const path = window.parent.location.origin + '/memory-pow/memory-pow.wasm.full'
const worker = new WebWorker();
@@ -1688,13 +1873,17 @@ class ChatPage extends LitElement {
});
- getSendChatResponse(_response);
+ getSendChatResponse(_response, isForward);
};
- const getSendChatResponse = (response) => {
+ const getSendChatResponse = (response, isForward) => {
if (response === true) {
this.chatEditor.resetValue();
this.chatEditorNewChat.resetValue()
+ if(isForward){
+ let successString = get("blockpage.bcchange15");
+ parentEpml.request('showSnackBar', `${successString}`);
+ }
} else if (response.error) {
parentEpml.request('showSnackBar', response.message);
} else {
@@ -1707,9 +1896,14 @@ class ChatPage extends LitElement {
this.chatEditorNewChat.enable()
this.closeEditMessageContainer()
this.closeRepliedToContainer()
+ this.openForwardOpen = false
+ this.forwardActiveChatHeadUrl = ""
};
- // Exec..
+ if(isForward){
+ sendForwardRequest();
+ return
+ }
sendMessageRequest();
}
diff --git a/qortal-ui-plugins/plugins/core/components/ChatScroller-css.js b/qortal-ui-plugins/plugins/core/components/ChatScroller-css.js
index d37a2d92..4b644c79 100644
--- a/qortal-ui-plugins/plugins/core/components/ChatScroller-css.js
+++ b/qortal-ui-plugins/plugins/core/components/ChatScroller-css.js
@@ -63,6 +63,12 @@ export const chatStyles = css`
margin-bottom: 5px;
}
+ .message-data-forward {
+ user-select: none;
+ color: var(--mainmenutext);
+ margin-bottom: 5px;
+ font-size: 12px;
+ }
.message-data-my-name {
color: #cf21e8;
text-shadow: 0 0 3px #cf21e8;
diff --git a/qortal-ui-plugins/plugins/core/components/ChatScroller.js b/qortal-ui-plugins/plugins/core/components/ChatScroller.js
index 05ad663b..204b302d 100644
--- a/qortal-ui-plugins/plugins/core/components/ChatScroller.js
+++ b/qortal-ui-plugins/plugins/core/components/ChatScroller.js
@@ -30,10 +30,13 @@ class ChatScroller extends LitElement {
setEditedMessageObj: {attribute: false},
focusChatEditor: {attribute: false},
sendMessage: {attribute: false},
+ sendMessageForward: {attribute: false},
showLastMessageRefScroller: { type: Function },
emojiPicker: { attribute: false },
isLoadingMessages: { type: Boolean},
- setIsLoadingMessages: {attribute: false}
+ setIsLoadingMessages: {attribute: false},
+ chatId: { type: String },
+ setForwardProperties: {attribute: false},
}
}
@@ -50,6 +53,7 @@ class ChatScroller extends LitElement {
render() {
+ console.log({messages: this.messages})
let formattedMessages = this.messages.reduce((messageArray, message) => {
const lastGroupedMessage = messageArray[messageArray.length - 1];
let timestamp;
@@ -95,10 +99,12 @@ class ChatScroller extends LitElement {
.setEditedMessageObj=${this.setEditedMessageObj}
.focusChatEditor=${this.focusChatEditor}
.sendMessage=${this.sendMessage}
+ .sendMessageForward=${this.sendMessageForward}
?isFirstMessage=${indexMessage === 0}
?isSingleMessageInGroup=${formattedMessage.messages.length > 1}
?isLastMessageInGroup=${indexMessage === formattedMessage.messages.length - 1}
.setToggledMessage=${this.setToggledMessage}
+ .setForwardProperties=${this.setForwardProperties}
>
`
)
@@ -112,6 +118,9 @@ class ChatScroller extends LitElement {
if(changedProperties.has('isLoadingMessages')){
return true
}
+ if(changedProperties.has('chatId') && changedProperties.get('chatId')){
+ return true
+ }
// Only update element if prop1 changed.
return changedProperties.has('messages');
}
@@ -215,12 +224,14 @@ class MessageTemplate extends LitElement {
setEditedMessageObj: {attribute: false},
focusChatEditor: {attribute: false},
sendMessage: {attribute: false},
+ sendMessageForward: {attribute: false},
openDialogImage: {attribute: false},
isImageLoaded: { type: Boolean },
isFirstMessage: { type: Boolean },
isSingleMessageInGroup: { type: Boolean },
isLastMessageInGroup: { type: Boolean },
- setToggledMessage: {attribute: false}
+ setToggledMessage: {attribute: false},
+ setForwardProperties: {attribute: false},
}
}
@@ -275,6 +286,7 @@ class MessageTemplate extends LitElement {
let image = null;
let isImageDeleted = false;
let version = 0;
+ let isForwarded = false
try {
const parsedMessageObj = JSON.parse(this.messageObj.decodedMessage);
message = parsedMessageObj.messageText;
@@ -282,6 +294,7 @@ class MessageTemplate extends LitElement {
isImageDeleted = parsedMessageObj.isImageDeleted;
reactions = parsedMessageObj.reactions || [];
version = parsedMessageObj.version
+ isForwarded = parsedMessageObj.type === 'forward'
if (parsedMessageObj.images && Array.isArray(parsedMessageObj.images) && parsedMessageObj.images.length > 0) {
image = parsedMessageObj.images[0];
}
@@ -295,6 +308,7 @@ class MessageTemplate extends LitElement {
let nameMenu = '';
let levelFounder = '';
let hideit = hidemsg.includes(this.messageObj.sender);
+ let forwarded = ''
levelFounder = html``;
if (this.messageObj.senderName) {
@@ -348,6 +362,11 @@ class MessageTemplate extends LitElement {
${this.messageObj.senderName ? this.messageObj.senderName : cropAddress(this.messageObj.sender)}
`;
+ forwarded = html`
+
+ ${translate("blockpage.bcchange17")}
+
+ `;
if (repliedToData) {
try {
@@ -410,6 +429,14 @@ class MessageTemplate extends LitElement {
`
: null
}
+ ${isForwarded ?
+ html`
+
+ ${forwarded}
+
+ `
+ : null
+ }
${this.isFirstMessage ? (
html`
${levelFounder}
@@ -476,9 +503,11 @@ class MessageTemplate extends LitElement {
.myAddress=${this.myAddress}
@blur=${() => this.showBlockIconFunc(false)}
.sendMessage=${this.sendMessage}
+ .sendMessageForward=${this.sendMessageForward}
version=${version}
.emojiPicker=${this.emojiPicker}
.setToggledMessage=${this.setToggledMessage}
+ .setForwardProperties=${this.setForwardProperties}
>
@@ -555,7 +584,9 @@ class ChatMenu extends LitElement {
emojiPicker: { attribute: false },
sendMessage: {attribute: false},
version: {type: String},
- setToggledMessage: {attribute: false}
+ setToggledMessage: {attribute: false},
+ sendMessageForward: {attribute: false},
+ setForwardProperties: {attribute: false}
}
}
@@ -585,6 +616,51 @@ class ChatMenu extends LitElement {
parentEpml.request('showSnackBar', `${errorMsg}`)
}
+ async messageForwardFunc(){
+ let parsedMessageObj = {}
+ let publicKey = {
+ hasPubKey: false,
+ key: ''
+ }
+ try {
+ parsedMessageObj = JSON.parse(this.originalMessage.decodedMessage);
+
+ } catch (error) {
+ parsedMessageObj = {}
+ }
+
+ try {
+ const res = await parentEpml.request('apiCall', {
+ type: 'api',
+ url: `/addresses/publickey/${this._chatId}`
+ })
+ if (res.error === 102) {
+ publicKey.key = ''
+ publicKey.hasPubKey = false
+ } else if (res !== false) {
+ publicKey.key = res
+ publicKey.hasPubKey = true
+ } else {
+ publicKey.key = ''
+ publicKey.hasPubKey = false
+ }
+ } catch (error) {
+
+ }
+
+ try {
+ const message = {
+ ...parsedMessageObj,
+ type: 'forward'
+ }
+ const stringifyMessageObject = JSON.stringify(message)
+ this.setForwardProperties(stringifyMessageObject)
+
+ } catch (error) {
+ console.log({error})
+ }
+ }
+
render() {
return html`
@@ -606,6 +682,14 @@ class ChatMenu extends LitElement {
}}
>
+
+
- ${window.parent.location.pathname !== "/app/q-chat" ? html`${this.renderChatPage(this.chatId)}` : html`${this.renderChatWelcomePage()}`}
+
+ ${window.parent.location.pathname !== "/app/q-chat" || this.activeChatHeadUrl ? html`${this.renderChatPage(this.chatId)}` : html`${this.renderChatWelcomePage()}`}
@@ -445,15 +454,10 @@ class Chat extends LitElement {
this.getChatBlockedList()
this.getLocalBlockedList()
- setInterval(() => {
- this.blockedUserList = JSON.parse(localStorage.getItem("ChatBlockedAddresses") || "[]")
- }, 1000)
-
const getBlockedUsers = async () => {
let blockedUsers = await parentEpml.request('apiCall', {
url: `/lists/blockedAddresses?apiKey=${this.getApiKey()}`
})
-
this.blockedUsers = blockedUsers
setTimeout(getBlockedUsers, 60000)
}
@@ -478,7 +482,7 @@ class Chat extends LitElement {
const runFunctionsAfterPageLoad = () => {
// Functions to exec after render while waiting for page info...
- getDataFromURL()
+ // getDataFromURL()
try {
let key = `${window.parent.reduxStore.getState().app.selectedAddress.address.substr(0, 10)}_chat-heads`
@@ -764,6 +768,8 @@ class Chat extends LitElement {
hidelist.push(item)
})
localStorage.setItem("MessageBlockedAddresses", JSON.stringify(hidelist))
+
+ this.blockedUserList = hidelist
})
}
@@ -796,6 +802,7 @@ class Chat extends LitElement {
obj.push(noName)
}
localStorage.setItem("ChatBlockedAddresses", JSON.stringify(obj))
+ this.blockedUserList = JSON.parse(localStorage.getItem("ChatBlockedAddresses") || "[]")
})
})
})
@@ -873,20 +880,20 @@ class Chat extends LitElement {
let tempUrl = document.location.href
let splitedUrl = decodeURI(tempUrl).split('?')
- let activeChatHeadUrl = splitedUrl[1] === undefined ? '' : splitedUrl[1]
+ // let activeChatHeadUrl = splitedUrl[1] === undefined ? '' : splitedUrl[1]
return chatHeadArr.map(eachChatHead => {
- return html``
+ return html` this.setActiveChatHeadUrl(val)} chatInfo=${JSON.stringify(eachChatHead)}>`
})
}
renderChatPage(chatId) {
+
// Check for the chat ID from and render chat messages
// Else render Welcome to Q-CHat
// TODO: DONE: Do the above in the ChatPage
-
- return html``
+ return html``
}
setChatHeads(chatObj) {