4
1
mirror of https://github.com/Qortal/qortal-ui.git synced 2025-02-11 17:55:51 +00:00

added pending messages

This commit is contained in:
PhilReact 2023-09-12 21:49:01 -05:00
parent f5a9fe46c4
commit 79fa08a099
5 changed files with 235 additions and 48 deletions

View File

@ -124,7 +124,9 @@ class ChatPage extends LitElement {
goToRepliedMessage: { attribute: false }, goToRepliedMessage: { attribute: false },
isLoadingGoToRepliedMessage: { type: Object }, isLoadingGoToRepliedMessage: { type: Object },
updateMessageHash: { type: Object}, updateMessageHash: { type: Object},
oldMessages: {type: Array} oldMessages: {type: Array},
messageQueue: {type: Array},
isInProcessQueue: {type: Boolean}
} }
} }
@ -1371,6 +1373,10 @@ class ChatPage extends LitElement {
this.oldMessages = [] this.oldMessages = []
this.lastReadMessageTimestamp = 0 this.lastReadMessageTimestamp = 0
this.initUpdate = this.initUpdate.bind(this) this.initUpdate = this.initUpdate.bind(this)
this.messageQueue = []
this.addToQueue = this.addToQueue.bind(this)
this.processQueue = this.processQueue.bind(this)
this.isInProcessQueue = false
} }
setOpenGifModal(value) { setOpenGifModal(value) {
@ -1416,7 +1422,84 @@ class ChatPage extends LitElement {
this.gifsLoading = props this.gifsLoading = props
} }
addToQueue(outSideMsg, messageQueue) {
console.log('added to queue', messageQueue, this.messageQueue)
// Push the new message object to the queue
this.messageQueue = [...messageQueue, { ...outSideMsg, timestamp: Date.now()}];
console.log('Current Queue after adding:', [...this.messageQueue]);
// Start processing the queue only if the message we just added is the only one in the queue
// This ensures that the queue processing starts only once, even if this method is called multiple times
if (this.messageQueue.length === 1) {
this.processQueue();
}
// Notify Lit to update/render due to the property change
this.requestUpdate();
}
async processQueue() {
if (this.messageQueue.length === 0) return;
const currentMessage = this.messageQueue[0];
console.log({currentMessage})
try {
const res = await this.sendMessage(currentMessage);
console.log({res})
if(res === true) {
this.messageQueue = this.messageQueue.slice(1);
} else {
throw new Error('failed')
}
if (this.messageQueue.length > 0) {
setTimeout(() => this.processQueue(), 2000); // Wait for 10 seconds before retrying
// setTimeout(() => this.processQueue(), 0); // Process the next message immediately
}
} catch (error) {
console.error("Failed to send message:", error);
setTimeout(() => this.processQueue(), 10000); // Wait for 10 seconds before retrying
}
}
// async processQueue() {
// let inProcess = false; // to indicate if we're currently sending a message
// while (true) { // Infinite loop
// const currentMessage = this.messageQueue[0];
// // If there's no current message, you could wait a while (e.g., a second) before the next iteration.
// // This prevents the loop from consuming resources unnecessarily when the queue is empty.
// if (!currentMessage) {
// await new Promise(res => setTimeout(res, 1000)); // Wait for 1 second
// continue; // go to the next iteration of the loop
// }
// // If not currently processing another message, attempt to send the current one
// if (!inProcess) {
// inProcess = true; // indicate that we're starting to process a message
// try {
// await this._sendMessage(currentMessage.outSideMsg, currentMessage.msg, true, currentMessage.chatId, currentMessage.isReceipient, currentMessage._publicKey, currentMessage.attachment);
// // If successful, remove the processed message from the queue
// this.messageQueue = this.messageQueue.slice(1);
// inProcess = false; // set inProcess back to false since we're done with this message
// } catch (error) {
// console.error("Failed to send message:", error);
// inProcess = false; // set inProcess back to false since an error occurred
// await new Promise(res => setTimeout(res, 10000)); // Wait for 10 seconds before retrying
// }
// } else {
// await new Promise(res => setTimeout(res, 1000)); // Wait for 1 second before checking again if inProcess is false
// }
// }
// }
render() { render() {
console.log('this.messageQueue', this.messageQueue.length)
return html` return html`
<div class="main-container"> <div class="main-container">
<div <div
@ -1551,6 +1634,7 @@ class ChatPage extends LitElement {
?openGifModal=${this.openGifModal} ?openGifModal=${this.openGifModal}
.setOpenGifModal=${(val) => this.setOpenGifModal(val)} .setOpenGifModal=${(val) => this.setOpenGifModal(val)}
chatId=${this.chatId} chatId=${this.chatId}
.messageQueue=${this.messageQueue}
> >
</chat-text-editor> </chat-text-editor>
</div> </div>
@ -2394,7 +2478,9 @@ class ChatPage extends LitElement {
async firstUpdated() { async firstUpdated() {
this.changeTheme() this.changeTheme()
// this.processQueue();
window.addEventListener('storage', () => { window.addEventListener('storage', () => {
const checkLanguage = localStorage.getItem('qortalLanguage') const checkLanguage = localStorage.getItem('qortalLanguage')
const checkTheme = localStorage.getItem('qortalTheme') const checkTheme = localStorage.getItem('qortalTheme')
@ -2453,6 +2539,7 @@ class ChatPage extends LitElement {
shouldUpdate(changedProperties) { shouldUpdate(changedProperties) {
console.log({changedProperties})
if (changedProperties.has('setActiveChatHeadUrl')) { if (changedProperties.has('setActiveChatHeadUrl')) {
return false return false
} }
@ -2537,6 +2624,7 @@ class ChatPage extends LitElement {
.goToRepliedMessage=${(val, val2) => this.goToRepliedMessage(val, val2)} .goToRepliedMessage=${(val, val2) => this.goToRepliedMessage(val, val2)}
.updateMessageHash=${this.updateMessageHash} .updateMessageHash=${this.updateMessageHash}
.clearUpdateMessageHashmap=${this.clearUpdateMessageHashmap} .clearUpdateMessageHashmap=${this.clearUpdateMessageHashmap}
.messageQueue=${this.messageQueue}
> >
</chat-scroller> </chat-scroller>
` `
@ -3484,11 +3572,25 @@ class ChatPage extends LitElement {
} }
} }
async _sendMessage(outSideMsg, msg) { async _sendMessage(outSideMsg, msg, messageQueue) {
const _chatId= this._chatId
const isReceipient= this.isReceipient
const _publicKey= this._publicKey
const attachment= this.attachment
console.log({
_chatId, isReceipient, _publicKey, attachment
})
// if(messageQueue){
// console.log('is queueCurrent Queue after before:', [...this.messageQueue]);
// this.addToQueue(outSideMsg, msg, messageQueue);
// return
// }
try { try {
if (this.isReceipient) { if (this.isReceipient) {
let hasPublicKey = true let hasPublicKey = true
if (!this._publicKey.hasPubKey) { if (!publicKey.hasPubKey) {
hasPublicKey = false hasPublicKey = false
try { try {
const res = await parentEpml.request('apiCall', { const res = await parentEpml.request('apiCall', {
@ -3496,20 +3598,20 @@ class ChatPage extends LitElement {
url: `/addresses/publickey/${this.selectedAddress.address}` url: `/addresses/publickey/${this.selectedAddress.address}`
}) })
if (res.error === 102) { if (res.error === 102) {
this._publicKey.key = '' publicKey.key = ''
this._publicKey.hasPubKey = false publicKey.hasPubKey = false
} else if (res !== false) { } else if (res !== false) {
this._publicKey.key = res publicKey.key = res
this._publicKey.hasPubKey = true publicKey.hasPubKey = true
hasPublicKey = true hasPublicKey = true
} else { } else {
this._publicKey.key = '' publicKey.key = ''
this._publicKey.hasPubKey = false publicKey.hasPubKey = false
} }
} catch (error) { } catch (error) {
} }
if (!hasPublicKey || !this._publicKey.hasPubKey) { if (!hasPublicKey || !publicKey.hasPubKey) {
let err4string = get("chatpage.cchange39") let err4string = get("chatpage.cchange39")
parentEpml.request('showSnackBar', `${err4string}`) parentEpml.request('showSnackBar', `${err4string}`)
return return
@ -3524,7 +3626,7 @@ class ChatPage extends LitElement {
// create new var called repliedToData and use that to modify the UI // create new var called repliedToData and use that to modify the UI
// find specific object property in local // find specific object property in local
let typeMessage = 'regular' let typeMessage = 'regular'
this.isLoading = true // this.isLoading = true
const trimmedMessage = msg const trimmedMessage = msg
const getName = async (recipient) => { const getName = async (recipient) => {
@ -3640,7 +3742,7 @@ class ChatPage extends LitElement {
isImageDeleted: true isImageDeleted: true
} }
const stringifyMessageObject = JSON.stringify(messageObject) const stringifyMessageObject = JSON.stringify(messageObject)
this.sendMessage(stringifyMessageObject, typeMessage, chatReference) return this.sendMessage({messageText: stringifyMessageObject, typeMessage, chatReference, isForward: false, isReceipient, _chatId, _publicKey, messageQueue})
} else if (outSideMsg && outSideMsg.type === 'deleteAttachment') { } else if (outSideMsg && outSideMsg.type === 'deleteAttachment') {
this.isDeletingAttachment = true this.isDeletingAttachment = true
let compressedFile = '' let compressedFile = ''
@ -3738,7 +3840,7 @@ class ChatPage extends LitElement {
isAttachmentDeleted: true isAttachmentDeleted: true
} }
const stringifyMessageObject = JSON.stringify(messageObject) const stringifyMessageObject = JSON.stringify(messageObject)
this.sendMessage(stringifyMessageObject, typeMessage, chatReference) return this.sendMessage({messageText: stringifyMessageObject, typeMessage, chatReference, isForward: false, isReceipient, _chatId, _publicKey, messageQueue})
} else if (outSideMsg && outSideMsg.type === 'image') { } else if (outSideMsg && outSideMsg.type === 'image') {
this.isUploadingImage = true this.isUploadingImage = true
const userName = await getName(this.selectedAddress.address) const userName = await getName(this.selectedAddress.address)
@ -3826,7 +3928,7 @@ class ChatPage extends LitElement {
version: 3 version: 3
} }
const stringifyMessageObject = JSON.stringify(messageObject) const stringifyMessageObject = JSON.stringify(messageObject)
this.sendMessage(stringifyMessageObject, typeMessage) return this.sendMessage({messageText: stringifyMessageObject, typeMessage, chatReference: undefined, isForward: false, isReceipient, _chatId, _publicKey, messageQueue})
} else if (outSideMsg && outSideMsg.type === 'gif') { } else if (outSideMsg && outSideMsg.type === 'gif') {
const userName = await getName(this.selectedAddress.address) const userName = await getName(this.selectedAddress.address)
if (!userName) { if (!userName) {
@ -3847,7 +3949,7 @@ class ChatPage extends LitElement {
version: 3 version: 3
} }
const stringifyMessageObject = JSON.stringify(messageObject) const stringifyMessageObject = JSON.stringify(messageObject)
this.sendMessage(stringifyMessageObject, typeMessage) return this.sendMessage({messageText: stringifyMessageObject, typeMessage, chatReference: undefined, isForward: false, isReceipient, _chatId, _publicKey, messageQueue})
} else if (outSideMsg && outSideMsg.type === 'attachment') { } else if (outSideMsg && outSideMsg.type === 'attachment') {
this.isUploadingAttachment = true this.isUploadingAttachment = true
const userName = await getName(this.selectedAddress.address) const userName = await getName(this.selectedAddress.address)
@ -3864,7 +3966,7 @@ class ChatPage extends LitElement {
this.webWorkerFile = new WebWorkerFile() this.webWorkerFile = new WebWorkerFile()
const attachment = this.attachment // const attachment = attachment
const id = this.uid() const id = this.uid()
const identifier = `qchat_${id}` const identifier = `qchat_${id}`
const fileSize = attachment.size const fileSize = attachment.size
@ -3916,7 +4018,7 @@ class ChatPage extends LitElement {
version: 3 version: 3
} }
const stringifyMessageObject = JSON.stringify(messageObject) const stringifyMessageObject = JSON.stringify(messageObject)
this.sendMessage(stringifyMessageObject, typeMessage) return this.sendMessage({messageText: stringifyMessageObject, typeMessage, chatReference: undefined, isForward: false, isReceipient, _chatId, _publicKey, messageQueue})
} else if (outSideMsg && outSideMsg.type === 'reaction') { } else if (outSideMsg && outSideMsg.type === 'reaction') {
const userName = await getName(this.selectedAddress.address) const userName = await getName(this.selectedAddress.address)
typeMessage = 'edit' typeMessage = 'edit'
@ -3971,7 +4073,7 @@ class ChatPage extends LitElement {
reactions reactions
} }
const stringifyMessageObject = JSON.stringify(messageObject) const stringifyMessageObject = JSON.stringify(messageObject)
this.sendMessage(stringifyMessageObject, typeMessage, chatReference) return this.sendMessage({messageText: stringifyMessageObject, typeMessage, chatReference, isForward: false, isReceipient, _chatId, _publicKey, messageQueue})
} else if (/^\s*$/.test(trimmedMessage)) { } else if (/^\s*$/.test(trimmedMessage)) {
this.isLoading = false this.isLoading = false
} else if (this.repliedToMessageObj) { } else if (this.repliedToMessageObj) {
@ -3987,7 +4089,7 @@ class ChatPage extends LitElement {
version: 3 version: 3
} }
const stringifyMessageObject = JSON.stringify(messageObject) const stringifyMessageObject = JSON.stringify(messageObject)
this.sendMessage(stringifyMessageObject, typeMessage) return this.sendMessage({messageText: stringifyMessageObject, typeMessage, chatReference: undefined, isForward: false, isReceipient, _chatId, _publicKey, messageQueue})
} else if (this.editedMessageObj) { } else if (this.editedMessageObj) {
typeMessage = 'edit' typeMessage = 'edit'
let chatReference = this.editedMessageObj.signature let chatReference = this.editedMessageObj.signature
@ -4010,7 +4112,7 @@ class ChatPage extends LitElement {
isEdited: true isEdited: true
} }
const stringifyMessageObject = JSON.stringify(messageObject) const stringifyMessageObject = JSON.stringify(messageObject)
this.sendMessage(stringifyMessageObject, typeMessage, chatReference) return this.sendMessage({messageText: stringifyMessageObject, typeMessage, chatReference, isForward: false, isReceipient, _chatId, _publicKey, messageQueue})
} else { } else {
const messageObject = { const messageObject = {
messageText: trimmedMessage, messageText: trimmedMessage,
@ -4025,7 +4127,7 @@ class ChatPage extends LitElement {
this.myTrimmedMeassage = stringifyMessageObject this.myTrimmedMeassage = stringifyMessageObject
this.shadowRoot.getElementById('confirmDialog').open() this.shadowRoot.getElementById('confirmDialog').open()
} else { } else {
this.sendMessage(stringifyMessageObject, typeMessage) return this.sendMessage({messageText: stringifyMessageObject, typeMessage, chatReference: undefined, isForward: false, isReceipient, _chatId, _publicKey, messageQueue})
} }
} }
} catch (error) { } catch (error) {
@ -4036,20 +4138,27 @@ class ChatPage extends LitElement {
} }
async sendMessage(messageText, typeMessage, chatReference, isForward) { async sendMessage({messageText, typeMessage, chatReference, isForward,isReceipient, _chatId, _publicKey, messageQueue}) {
this.isLoading = true console.log('2', {messageText, typeMessage, chatReference, isForward,isReceipient, _chatId, _publicKey})
if(messageQueue){
console.log('is queueCurrent Queue after before:', [...this.messageQueue]);
this.addToQueue({messageText, typeMessage, chatReference, isForward, isReceipient, _chatId, _publicKey}, messageQueue);
this.resetChatEditor()
return
}
// this.isLoading = true
let _reference = new Uint8Array(64) let _reference = new Uint8Array(64)
window.crypto.getRandomValues(_reference) window.crypto.getRandomValues(_reference)
let reference = window.parent.Base58.encode(_reference) let reference = window.parent.Base58.encode(_reference)
const sendMessageRequest = async () => { const sendMessageRequest = async () => {
if (this.isReceipient === true) { if (isReceipient === true) {
let chatResponse = await parentEpml.request('chat', { let chatResponse = await parentEpml.request('chat', {
type: 18, type: 18,
nonce: this.selectedAddress.nonce, nonce: this.selectedAddress.nonce,
params: { params: {
timestamp: Date.now(), timestamp: Date.now(),
recipient: this._chatId, recipient: _chatId,
recipientPublicKey: this._publicKey.key, recipientPublicKey: _publicKey.key,
hasChatReference: typeMessage === 'edit' ? 1 : 0, hasChatReference: typeMessage === 'edit' ? 1 : 0,
chatReference: chatReference, chatReference: chatReference,
message: messageText, message: messageText,
@ -4059,14 +4168,14 @@ class ChatPage extends LitElement {
isText: 1 isText: 1
} }
}) })
_computePow(chatResponse) return _computePow(chatResponse)
} else { } else {
let groupResponse = await parentEpml.request('chat', { let groupResponse = await parentEpml.request('chat', {
type: 181, type: 181,
nonce: this.selectedAddress.nonce, nonce: this.selectedAddress.nonce,
params: { params: {
timestamp: Date.now(), timestamp: Date.now(),
groupID: Number(this._chatId), groupID: Number(_chatId),
hasReceipient: 0, hasReceipient: 0,
hasChatReference: typeMessage === 'edit' ? 1 : 0, hasChatReference: typeMessage === 'edit' ? 1 : 0,
chatReference: chatReference, chatReference: chatReference,
@ -4077,7 +4186,7 @@ class ChatPage extends LitElement {
isText: 1 isText: 1
} }
}) })
_computePow(groupResponse) return _computePow(groupResponse)
} }
} }
@ -4266,11 +4375,12 @@ class ChatPage extends LitElement {
}) })
getSendChatResponse(_response, isForward) getSendChatResponse(_response, isForward)
return _response
} }
const getSendChatResponse = (response, isForward, customErrorMessage) => { const getSendChatResponse = (response, isForward, customErrorMessage) => {
if (response === true) { if (response === true) {
this.resetChatEditor() // this.resetChatEditor()
if (isForward) { if (isForward) {
let successString = get("blockpage.bcchange15") let successString = get("blockpage.bcchange15")
parentEpml.request('showSnackBar', `${successString}`) parentEpml.request('showSnackBar', `${successString}`)
@ -4302,7 +4412,7 @@ class ChatPage extends LitElement {
sendForwardRequest() sendForwardRequest()
return return
} }
sendMessageRequest() return sendMessageRequest()
} }
/** /**

View File

@ -43,6 +43,10 @@ export const chatStyles = css`
margin: 0; margin: 0;
padding: 20px 17px; padding: 20px 17px;
} }
.message-sending {
opacity: 0.5;
cursor: progress;
}
.chat-list { .chat-list {
overflow-y: auto; overflow-y: auto;

View File

@ -245,7 +245,8 @@ class ChatScroller extends LitElement {
clearUpdateMessageHashmap: { attribute: false}, clearUpdateMessageHashmap: { attribute: false},
disableFetching: {type: Boolean}, disableFetching: {type: Boolean},
isLoadingBefore: {type: Boolean}, isLoadingBefore: {type: Boolean},
isLoadingAfter: {type: Boolean} isLoadingAfter: {type: Boolean},
messageQueue: {type: Array}
} }
} }
@ -279,6 +280,7 @@ class ChatScroller extends LitElement {
this.isLoadingAfter = false this.isLoadingAfter = false
this.disableAddingNewMessages = false this.disableAddingNewMessages = false
this.lastReadMessageTimestamp = null this.lastReadMessageTimestamp = null
this.messageQueue = []
} }
addSeenMessage(val) { addSeenMessage(val) {
@ -614,6 +616,7 @@ class ChatScroller extends LitElement {
render() { render() {
console.log('this.chatId', this.chatId)
// let formattedMessages = this.messages.reduce((messageArray, message) => { // let formattedMessages = this.messages.reduce((messageArray, message) => {
// const currentMessage = this.updateMessageHash[message.signature] || message; // const currentMessage = this.updateMessageHash[message.signature] || message;
// const lastGroupedMessage = messageArray[messageArray.length - 1]; // const lastGroupedMessage = messageArray[messageArray.length - 1];
@ -698,17 +701,67 @@ class ChatScroller extends LitElement {
` `
)} )}
` `
)} )}
${this.messageQueue.filter((item )=> this.chatId.includes(item._chatId)).length > 0 ? html`
<div style=${"height: 1px"} id='bottomObserverForFetchingMessages'></div>
` : html`
<div style=${"height: 1px; margin-top: -100px"} id='bottomObserverForFetchingMessages'></div> <div style=${"height: 1px; margin-top: -100px"} id='bottomObserverForFetchingMessages'></div>
`}
<div style=${"height: 1px;"} id='downObserver'></div> <div style=${"height: 1px;"} id='downObserver'></div>
${this.isLoadingAfter ? html` ${this.isLoadingAfter ? html`
<div class="spinnerContainer"> <div class="spinnerContainer">
<paper-spinner-lite active></paper-spinner-lite> <paper-spinner-lite active></paper-spinner-lite>
</div> </div>
` : ''} ` : ''}
${repeat(
this.messageQueue.filter((item )=> this.chatId.includes(item._chatId)),
(message) => message.messageText,
(message, indexMessage) => html`
<message-template
.emojiPicker=${this.emojiPicker}
.escapeHTML=${this.escapeHTML}
.messageObj=${{
decodedMessage: message.messageText,
"timestamp": message.timestamp,
"sender": "QWxEcmZxnM8yb1p92C1YKKRsp8svSVbFEs",
"senderName": "palmas",
"signature": "4B6hHMHTnSvXTMmQb73P4Yr2o772zu7XxiTiRQv8GsgysNaoc9UCUqb9x7ihz2Su6xCREZUvgACmFpHY2gzUbYHf",
}}
.hideMessages=${this.hideMessages}
.setRepliedToMessageObj=${this.setRepliedToMessageObj}
.setEditedMessageObj=${this.setEditedMessageObj}
.sendMessage=${this.sendMessage}
.sendMessageForward=${this.sendMessageForward}
?isFirstMessage=${true}
?isSingleMessageInGroup=${false}
?isLastMessageInGroup=${true}
.setToggledMessage=${this.setToggledMessage}
.setForwardProperties=${this.setForwardProperties}
.setOpenPrivateMessage=${(val) => this.setOpenPrivateMessage(val)}
.setOpenTipUser=${(val) => this.setOpenTipUser(val)}
.setOpenUserInfo=${(val) => this.setOpenUserInfo(val)}
.setUserName=${(val) => this.setUserName(val)}
id=${message.signature}
.goToRepliedMessage=${(val, val2)=> this.goToRepliedMessageFunc(val, val2)}
.addSeenMessage=${(val) => this.addSeenMessage(val)}
.listSeenMessages=${this.listSeenMessages}
chatId=${this.chatId}
?isInProgress=${true}
></message-template>
`
)}
</ul> </ul>
` `
} }
@ -741,6 +794,9 @@ class ChatScroller extends LitElement {
if(changedProperties.has('isLoadingAfter')){ if(changedProperties.has('isLoadingAfter')){
return true return true
} }
if(changedProperties.has('messageQueue')){
return true
}
// Only update element if prop1 changed. // Only update element if prop1 changed.
return changedProperties.has('messages') return changedProperties.has('messages')
} }
@ -820,7 +876,7 @@ class ChatScroller extends LitElement {
_upObserverhandler(entries) { _upObserverhandler(entries) {
if(!entries[0].target || !entries[0].target.nextElementSibling) return
if (entries[0].isIntersecting) { if (entries[0].isIntersecting) {
if (this.disableFetching) { if (this.disableFetching) {
return return
@ -844,7 +900,7 @@ class ChatScroller extends LitElement {
if (this.messagesToRender.length === 0 || this.disableFetching) { if (this.messagesToRender.length === 0 || this.disableFetching) {
return return
} }
if (!entries[0].isIntersecting) { if (!entries[0].isIntersecting || !entries[0].target || !entries[0].target.previousElementSibling) {
} else { } else {
this.disableFetching = true this.disableFetching = true
this.isLoadingAfter = true this.isLoadingAfter = true
@ -926,7 +982,8 @@ class MessageTemplate extends LitElement {
goToRepliedMessage: { attribute: false }, goToRepliedMessage: { attribute: false },
listSeenMessages: { type: Array }, listSeenMessages: { type: Array },
addSeenMessage: { attribute: false }, addSeenMessage: { attribute: false },
chatId: { type: String } chatId: { type: String },
isInProgress: {type: Boolean}
} }
} }
@ -947,6 +1004,7 @@ class MessageTemplate extends LitElement {
this.isSingleMessageInGroup = false this.isSingleMessageInGroup = false
this.isLastMessageInGroup = false this.isLastMessageInGroup = false
this.viewImage = false this.viewImage = false
this.isInProgress = false
} }
static get styles() { static get styles() {
@ -1059,6 +1117,7 @@ class MessageTemplate extends LitElement {
let isEdited = false let isEdited = false
let attachment = null let attachment = null
try { try {
console.log('this.messageOb', this.messageObj )
const parsedMessageObj = JSON.parse(this.messageObj.decodedMessage) const parsedMessageObj = JSON.parse(this.messageObj.decodedMessage)
if (+parsedMessageObj.version > 1 && parsedMessageObj.messageText) { if (+parsedMessageObj.version > 1 && parsedMessageObj.messageText) {
messageVersion2 = generateHTML(parsedMessageObj.messageText, [ messageVersion2 = generateHTML(parsedMessageObj.messageText, [
@ -1250,7 +1309,7 @@ class MessageTemplate extends LitElement {
<div <div
class="message-container" class="message-container"
style="${(this.isSingleMessageInGroup === true && this.isLastMessageInGroup === false) && 'margin-bottom: 0'}"> style="${(this.isSingleMessageInGroup === true && this.isLastMessageInGroup === false) && 'margin-bottom: 0'}">
<div class="message-subcontainer1"> <div class=${`message-subcontainer1 ${this.isInProgress ? 'message-sending' : ''}`}>
${(this.isSingleMessageInGroup === false || ${(this.isSingleMessageInGroup === false ||
(this.isSingleMessageInGroup === true && this.isLastMessageInGroup === true)) (this.isSingleMessageInGroup === true && this.isLastMessageInGroup === true))
? ( ? (
@ -1476,7 +1535,12 @@ class MessageTemplate extends LitElement {
` `
: '' : ''
} }
${this.isInProgress ? html`
<p>Sending...</p>
` : html`
<message-time timestamp=${this.messageObj.timestamp}></message-time> <message-time timestamp=${this.messageObj.timestamp}></message-time>
`}
</div> </div>
</div> </div>
</div> </div>
@ -1518,7 +1582,7 @@ class MessageTemplate extends LitElement {
editedMessageObj: this.messageObj, editedMessageObj: this.messageObj,
reaction: reaction.type, reaction: reaction.type,
})} })}
id=${`reactions-${index}`} id=${`reactions-${indexMessageTemplate}`}
class="reactions-bg"> class="reactions-bg">
${reaction.type} ${reaction.type}
${reaction.qty} ${reaction.qty}
@ -1530,7 +1594,7 @@ class MessageTemplate extends LitElement {
text=${reaction.users.length > 3 ? text=${reaction.users.length > 3 ?
( (
`${reaction.users[0].name `${reaction.users[0].name
? reaction.users[0].name ? reaction.users[0].nameMessageTemplate
: cropAddress(reaction.users[0].address)}, : cropAddress(reaction.users[0].address)},
${reaction.users[1].name ${reaction.users[1].name
? reaction.users[1].name ? reaction.users[1].name
@ -1558,7 +1622,7 @@ class MessageTemplate extends LitElement {
: cropAddress(reaction.users[0].address)} : cropAddress(reaction.users[0].address)}
${get("chatpage.cchange71")} ${get("chatpage.cchange71")}
${reaction.users[1].name ${reaction.users[1].name
? reaction.users[1].name ? reaction.users[1].namMessageTemplatee
: cropAddress(reaction.users[1].address)} ${get("chatpage.cchange74")} ${reaction.type}` : cropAddress(reaction.users[1].address)} ${get("chatpage.cchange74")} ${reaction.type}`
) : reaction.users.length === 1 ? ) : reaction.users.length === 1 ?
( (
@ -1585,7 +1649,7 @@ class MessageTemplate extends LitElement {
toblockaddress=${this.messageObj.sender} toblockaddress=${this.messageObj.sender}
> >
</chat-modals> </chat-modals>
<mwc-dialog <mwc-dialog MessageTemplate
id="showDialogPublicKey" id="showDialogPublicKey"
?open=${this.openDialogImage} ?open=${this.openDialogImage}
@closed=${() => { @closed=${() => {
@ -1600,7 +1664,7 @@ class MessageTemplate extends LitElement {
dialogAction="cancel" dialogAction="cancel"
class="red" class="red"
@click=${() => { @click=${() => {
MessageTemplate
this.openDialogImage = false this.openDialogImage = false
}} }}
> >
@ -1612,7 +1676,7 @@ class MessageTemplate extends LitElement {
?open=${this.openDialogGif} ?open=${this.openDialogGif}
@closed=${() => { @closed=${() => {
this.openDialogGif = false this.openDialogGif = false
}}> }}>MessageTemplate
<div class="dialog-header"></div> <div class="dialog-header"></div>
<div class="dialog-container imageContainer"> <div class="dialog-container imageContainer">
${gifHTMLDialog} ${gifHTMLDialog}
@ -1627,7 +1691,7 @@ class MessageTemplate extends LitElement {
}} }}
> >
${translate("general.close")} ${translate("general.close")}
</mwc-button> </mwc-button>MessageTemplate
</mwc-dialog> </mwc-dialog>
<mwc-dialog <mwc-dialog
hideActions hideActions

View File

@ -163,6 +163,7 @@ class ChatTextEditor extends LitElement {
} }
render() { render() {
console.log('here here')
let scrollHeightBool = false; let scrollHeightBool = false;
try { try {
if (this.chatMessageInput && this.chatMessageInput.contentDocument.body.scrollHeight > 60 && this.shadowRoot.querySelector(".chat-editor").contentDocument.body.querySelector("#chatbarId").innerHTML.trim() !== "") { if (this.chatMessageInput && this.chatMessageInput.contentDocument.body.scrollHeight > 60 && this.shadowRoot.querySelector(".chat-editor").contentDocument.body.querySelector("#chatbarId").innerHTML.trim() !== "") {

View File

@ -36,7 +36,8 @@ class ChatTextEditor extends LitElement {
isEnabledChatEnter: {type: Boolean}, isEnabledChatEnter: {type: Boolean},
openGifModal: { type: Boolean }, openGifModal: { type: Boolean },
setOpenGifModal: { attribute: false }, setOpenGifModal: { attribute: false },
chatId: {type: String} chatId: {type: String},
messageQueue: {type: Array}
} }
} }
@ -376,9 +377,12 @@ mwc-checkbox::shadow .mdc-checkbox::after, mwc-checkbox::shadow .mdc-checkbox::b
this.userName = window.parent.reduxStore.getState().app.accountInfo.names[0] this.userName = window.parent.reduxStore.getState().app.accountInfo.names[0]
this.theme = localStorage.getItem('qortalTheme') ? localStorage.getItem('qortalTheme') : 'light' this.theme = localStorage.getItem('qortalTheme') ? localStorage.getItem('qortalTheme') : 'light'
this.editor = null this.editor = null
this.messageQueue = []
} }
render() { render() {
console.log('at render', this.messageQueue)
return html` return html`
<div <div
class=${["chatbar-container", "chatbar-buttons", this.iframeId !=="_chatEditorDOM" && 'hide-styling'].join(" ")} class=${["chatbar-container", "chatbar-buttons", this.iframeId !=="_chatEditorDOM" && 'hide-styling'].join(" ")}
@ -515,7 +519,8 @@ mwc-checkbox::shadow .mdc-checkbox::after, mwc-checkbox::shadow .mdc-checkbox::b
icon="vaadin:check" icon="vaadin:check"
slot="icon" slot="icon"
@click=${() => { @click=${() => {
this.sendMessageFunc(); console.log('onclick', this.messageQueue)
this.sendMessageFunc(this.messageQueue);
}} }}
> >
</vaadin-icon> </vaadin-icon>
@ -538,7 +543,8 @@ mwc-checkbox::shadow .mdc-checkbox::after, mwc-checkbox::shadow .mdc-checkbox::b
alt="send-icon" alt="send-icon"
class="send-icon" class="send-icon"
@click=${() => { @click=${() => {
this.sendMessageFunc(); console.log('onclick', this.messageQueue)
this.sendMessageFunc(this.messageQueue);
}} }}
/> />
` : ` :
@ -641,6 +647,7 @@ mwc-checkbox::shadow .mdc-checkbox::after, mwc-checkbox::shadow .mdc-checkbox::b
} }
sendMessageFunc(props) { sendMessageFunc(props) {
console.log({props})
if(this.editor.isEmpty && (this.iframeId !== 'newChat' && this.iframeId !== 'newAttachmentChat')) return if(this.editor.isEmpty && (this.iframeId !== 'newChat' && this.iframeId !== 'newAttachmentChat')) return
this.getMessageSize(this.editor.getJSON()) this.getMessageSize(this.editor.getJSON())
if (this.chatMessageSize > 4000 ) { if (this.chatMessageSize > 4000 ) {
@ -648,7 +655,8 @@ mwc-checkbox::shadow .mdc-checkbox::after, mwc-checkbox::shadow .mdc-checkbox::b
return; return;
} }
this.chatMessageSize = 0; this.chatMessageSize = 0;
this._sendMessage(props, this.editor.getJSON()); console.log('messageQueue', this.messageQueue)
this._sendMessage(props, this.editor.getJSON(), this.messageQueue);
} }
getMessageSize(message){ getMessageSize(message){