From a525fbc3b4d7ff587fa9a6547c464f5d7730d5c7 Mon Sep 17 00:00:00 2001
From: Justin Ferrari <‘justinwesleyferrari@gmail.com’>
Date: Fri, 4 Nov 2022 22:04:56 -0500
Subject: [PATCH] Added loader for messages + fixed message size UI
---
.../plugins/core/components/ChatPage.js | 405 ++++++++++++------
1 file changed, 267 insertions(+), 138 deletions(-)
diff --git a/qortal-ui-plugins/plugins/core/components/ChatPage.js b/qortal-ui-plugins/plugins/core/components/ChatPage.js
index d25b29f4..37d522b6 100644
--- a/qortal-ui-plugins/plugins/core/components/ChatPage.js
+++ b/qortal-ui-plugins/plugins/core/components/ChatPage.js
@@ -165,8 +165,9 @@ class ChatPage extends LitElement {
}
.chat-text-area .typing-area .chatbar {
- width: auto;
+ position: relative;
display: flex;
+ flex-direction: column;
justify-content: center;
align-items: center;
height: auto;
@@ -174,6 +175,13 @@ class ChatPage extends LitElement {
overflow-y: hidden;
}
+ .chatbar-container {
+ width: 100%;
+ display: flex;
+ height: auto;
+ overflow: hidden;
+ }
+
.chat-text-area .typing-area .emoji-button {
width: 45px;
height: 40px;
@@ -186,6 +194,98 @@ class ChatPage extends LitElement {
color: var(--black);
}
+ .message-size-container {
+ display: flex;
+ justify-content: flex-end;
+ width: 100%;
+ }
+
+ .message-size {
+ font-family: Roboto, sans-serif;
+ font-size: 12px;
+ color: black;
+ }
+
+ .lds-grid {
+ width: 120px;
+ height: 120px;
+ position: absolute;
+ left: 50%;
+ top: 40%;
+ }
+
+ .lds-grid div {
+ position: absolute;
+ width: 34px;
+ height: 34px;
+ border-radius: 50%;
+ background: #03a9f4;
+ animation: lds-grid 1.2s linear infinite;
+ }
+
+ .lds-grid div:nth-child(1) {
+ top: 4px;
+ left: 4px;
+ animation-delay: 0s;
+ }
+
+ .lds-grid div:nth-child(2) {
+ top: 4px;
+ left: 48px;
+ animation-delay: -0.4s;
+ }
+
+ .lds-grid div:nth-child(3) {
+ top: 4px;
+ left: 90px;
+ animation-delay: -0.8s;
+ }
+
+ .lds-grid div:nth-child(4) {
+ top: 50px;
+ left: 4px;
+ animation-delay: -0.4s;
+ }
+
+ .lds-grid div:nth-child(5) {
+ top: 50px;
+ left: 48px;
+ animation-delay: -0.8s;
+ }
+
+ .lds-grid div:nth-child(6) {
+ top: 50px;
+ left: 90px;
+ animation-delay: -1.2s;
+ }
+
+ .lds-grid div:nth-child(7) {
+ top: 95px;
+ left: 4px;
+ animation-delay: -0.8s;
+ }
+
+ .lds-grid div:nth-child(8) {
+ top: 95px;
+ left: 48px;
+ animation-delay: -1.2s;
+ }
+
+ .lds-grid div:nth-child(9) {
+ top: 95px;
+ left: 90px;
+ animation-delay: -1.6s;
+ }
+
+ @keyframes lds-grid {
+ 0%, 100% {
+ opacity: 1;
+ }
+ 50% {
+ opacity: 0.5;
+ }
+ }
+
.float-left {
float: left;
}
@@ -207,16 +307,19 @@ class ChatPage extends LitElement {
width: 30px;
margin-left: 5px;
transition: all 0.1s ease-in-out;
+ cursor: pointer;
}
.send-icon:hover {
filter: brightness(1.1);
}
+
.file-picker-container {
position: relative;
height: 25px;
width: 25px;
}
+
.file-picker-input-container {
position: absolute;
top: 0px;
@@ -229,14 +332,15 @@ class ChatPage extends LitElement {
}
input[type=file]::-webkit-file-upload-button {
- cursor: pointer;
-}
+ cursor: pointer;
+ }
`
}
constructor() {
super()
+ this.getMessageConfig = this.getMessageConfig.bind(this)
this.getOldMessage = this.getOldMessage.bind(this)
this._sendMessage = this._sendMessage.bind(this)
this.insertImage = this.insertImage.bind(this)
@@ -264,7 +368,7 @@ class ChatPage extends LitElement {
this.repliedToMessageObj = null
this.editedMessageObj = null
this.iframeHeight = 40
- this.chatMessageSize = 5
+ this.chatMessageSize = 0
this.imageFile = null
this.uid = new ShortUniqueId()
}
@@ -273,44 +377,56 @@ class ChatPage extends LitElement {
return html`
- ${this.isLoadingMessages ? html`
${translate("chatpage.cchange22")}
` : this.renderChatScroller(this._initialMessages)}
-
{
- this.imageFile = null
- }}>
-
-
- ${this.imageFile && html`
-
- `}
-
-
- {
- this._sendMessage({
- type: 'image',
- imageFile: this.imageFile,
- caption: 'This is a caption'
- })
- }}
- >
- send
-
- {
-
- this.imageFile = null
- }}
- >
- ${translate("general.close")}
-
-
+ ${this.isLoadingMessages ?
+ html`
+
+ ` :
+ this.renderChatScroller(this._initialMessages)}
+
{
+ this.imageFile = null
+ }}>
+
+
+ ${this.imageFile && html`
+
+ `}
+
+ {
+ this._sendMessage({
+ type: 'image',
+ imageFile: this.imageFile,
+ caption: 'This is a caption'
+ })
+ }}
+ >
+ send
+
+ {
+
+ this.imageFile = null
+ }}
+ >
+ ${translate("general.close")}
+
+
@@ -348,58 +464,78 @@ class ChatPage extends LitElement {
>
`}
-
-
-
this.closeEditMessageContainer()}
+
+
-
-
- this.insertImage(e.target.files[0])}"
- class="file-picker-input" type="file" name="myImage" accept="image/*" />
-
-
-
-
-
-
-
- ${this.editedMessageObj ? (
- html`
-
- ${this.isLoading === false ? html`
+
this._sendMessage()}
- >
+ @click=${() => this.closeEditMessageContainer()}
+ >
- ` :
- html`
-
- `}
+
+ this.insertImage(e.target.files[0])}"
+ class="file-picker-input" type="file" name="myImage" accept="image/*" />
+
- `
- ) :
- html`
-
- ${this.isLoading === false ? html`
` : html`
`}
+
+
+
+ ${this.editedMessageObj ? (
+ html`
+
+ ${this.isLoading === false ? html`
+
this._sendMessage()}
+ >
+
+ ` :
+ html`
+
+ `}
- `
- }
+ `
+ ) :
+ html`
+
+ ${this.isLoading === false ? html`
+
this._sendMessage()} />
+ ` :
+ html`
+
+ `}
+
+ `
+ }
+
+ ${this.chatMessageSize >= 750 ?
+ html`
+
+
+ ${`Your message size is of ${this.chatMessageSize} bytes out of a maximum of 1000`}
+
+
+ ` :
+ html``}
+
`
}
@@ -426,6 +562,8 @@ class ChatPage extends LitElement {
this.emojiPickerHandler = this.shadowRoot.querySelector('.emoji-button');
this.mirrorChatInput = this.shadowRoot.getElementById('messageBox');
this.chatMessageInput = this.shadowRoot.getElementById('_chatEditorDOM');
+ console.log(this.chatMessageInput);
+ console.log(this.mirrorChatInput.clientHeight);
document.addEventListener('keydown', (e) => {
if (!this.chatEditor.content.body.matches(':focus')) {
// WARNING: Deprecated methods from KeyBoard Event
@@ -536,15 +674,16 @@ class ChatPage extends LitElement {
if (chatReference1 && chatReference2) {
await messagesCache.setItem(`${chatReference1}-${chatReference2}`, this.messagesRendered);
}
-
}
if (changedProperties && changedProperties.has('editedMessageObj')) {
this.chatEditor.insertText(this.editedMessageObj.message)
}
+ if (changedProperties && changedProperties.has('chatMessageSize')) {
+ console.log(this.chatMessageSize, "Chat Message Size");
+ }
}
calculateIFrameHeight(height) {
- console.log(height, "height here")
this.iframeHeight = height;
}
@@ -716,63 +855,54 @@ class ChatPage extends LitElement {
}
}
+ getMessageConfig() {
+ const textAreaElement = this.shadowRoot.getElementById('messageBox');
+ return textAreaElement.value;
+ }
+
getMessageSize(message){
try {
-
- const messageText = message
+ const messageText = message;
// Format and Sanitize Message
const sanitizedMessage = messageText.replace(/ /gi, ' ').replace(/
/gi, '\n');
const trimmedMessage = sanitizedMessage.trim();
let messageObject = {};
if (this.repliedToMessageObj) {
- let chatReference = this.repliedToMessageObj.reference
-
- if(this.repliedToMessageObj.chatReference){
- chatReference = this.repliedToMessageObj.chatReference
+ let chatReference = this.repliedToMessageObj.reference;
+ if (this.repliedToMessageObj.chatReference) {
+ chatReference = this.repliedToMessageObj.chatReference;
}
-
messageObject = {
messageText: trimmedMessage,
images: [''],
repliedTo: chatReference,
version: 1
}
-
} else if (this.editedMessageObj) {
-
-
-
-
- let message = ""
- try {
- const parsedMessageObj = JSON.parse(this.editedMessageObj.decodedMessage)
- message = parsedMessageObj
-
- } catch (error) {
- message = this.messageObj.decodedMessage
- }
+ let message = "";
+ try {
+ const parsedMessageObj = JSON.parse(this.editedMessageObj.decodedMessage);
+ message = parsedMessageObj;
+ } catch (error) {
+ message = this.messageObj.decodedMessage
+ }
messageObject = {
...message,
messageText: trimmedMessage,
-
}
-
} else {
messageObject = {
messageText: trimmedMessage,
images: [''],
repliedTo: '',
version: 1
- }
-
-
+ };
}
- const stringified = JSON.stringify(messageObject)
+ const stringified = JSON.stringify(messageObject);
const size = new Blob([stringified]).size;
- this.chatMessageSize = size
-
+ this.chatMessageSize = size;
} catch (error) {
console.error(error)
@@ -1168,8 +1298,7 @@ class ChatPage extends LitElement {
const userName = outSideMsg.name
const identifier = outSideMsg.identifier
let compressedFile = ''
- var str =
- "iVBORw0KGgoAAAANSUhEUgAAAsAAAAGMAQMAAADuk4YmAAAAA1BMVEX///+nxBvIAAAAAXRSTlMAQObYZgAAADlJREFUeF7twDEBAAAAwiD7p7bGDlgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAGJrAABgPqdWQAAAABJRU5ErkJggg==";
+ var str = "iVBORw0KGgoAAAANSUhEUgAAAsAAAAGMAQMAAADuk4YmAAAAA1BMVEX///+nxBvIAAAAAXRSTlMAQObYZgAAADlJREFUeF7twDEBAAAAwiD7p7bGDlgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAGJrAABgPqdWQAAAABJRU5ErkJggg==";
const b64toBlob = (b64Data, contentType='', sliceSize=512) => {
const byteCharacters = atob(b64Data);
@@ -1226,42 +1355,38 @@ class ChatPage extends LitElement {
} catch (error) {
console.error(error)
}
-
-
-
- typeMessage = 'edit'
- let chatReference = outSideMsg.editedMessageObj.reference
+ typeMessage = 'edit';
+ let chatReference = outSideMsg.editedMessageObj.reference;
if(outSideMsg.editedMessageObj.chatReference){
chatReference = outSideMsg.editedMessageObj.chatReference
}
- let message = ""
+ let message = "";
try {
- const parsedMessageObj = JSON.parse(outSideMsg.editedMessageObj.decodedMessage)
- message = parsedMessageObj
+ const parsedMessageObj = JSON.parse(outSideMsg.editedMessageObj.decodedMessage);
+ message = parsedMessageObj;
} catch (error) {
- message = outSideMsg.editedMessageObj.decodedMessage
+ message = outSideMsg.editedMessageObj.decodedMessage;
}
const messageObject = {
...message,
isImageDeleted: true
}
- const stringifyMessageObject = JSON.stringify(messageObject)
+ const stringifyMessageObject = JSON.stringify(messageObject);
this.sendMessage(stringifyMessageObject, typeMessage, chatReference);
}
- else if(outSideMsg && outSideMsg.type === 'image'){
+ else if (outSideMsg && outSideMsg.type === 'image') {
-
- const userName = await getName(this.selectedAddress.address)
- if(!userName){
- parentEpml.request('showSnackBar', get("chatpage.cchange27"))
+ const userName = await getName(this.selectedAddress.address);
+ if (!userName) {
+ parentEpml.request('showSnackBar', get("chatpage.cchange27"));
this.isLoading = false;
this.chatEditor.enable();
- return
+ return;
}
const id = this.uid();
const identifier = `qchat_${id}`
@@ -1732,8 +1857,7 @@ class ChatPage extends LitElement {
for (let i = 0; i < events.length; i++) {
const event = events[i]
editor.content.body.addEventListener(event, async function (e) {
-
- editorConfig.getMessageSize(editorConfig.mirrorElement.value)
+ console.log("hello world12")
if (e.type === 'click') {
e.preventDefault();
e.stopPropagation();
@@ -1776,10 +1900,13 @@ class ChatPage extends LitElement {
}
if (e.type === 'keydown') {
- console.log(editorConfig.mirrorElement.scrollHeight);
+ console.log("key pressed");
+ console.log(editorConfig.getMessageConfig(), "this is the chat input value");
+ console.log(editorConfig.editableElement.contentDocument.body.scrollHeight, "scroll height")
+ console.log(editorConfig.mirrorElement.clientHeight, "client height")
editorConfig.calculateIFrameHeight(editorConfig.editableElement.contentDocument.body.scrollHeight);
-
- // Handle Enter
+ editorConfig.getMessageSize(editorConfig.editableElement.contentDocument.body.innerHTML);
+ // Handle Enter
if (e.keyCode === 13 && !e.shiftKey) {
// Update Mirror
@@ -1858,6 +1985,7 @@ class ChatPage extends LitElement {
};
const editorConfig = {
+ getMessageConfig: this.getMessageConfig,
getMessageSize: this.getMessageSize,
calculateIFrameHeight: this.calculateIFrameHeight,
mirrorElement: this.mirrorChatInput,
@@ -1869,7 +1997,8 @@ class ChatPage extends LitElement {
placeholder: this.chatEditorPlaceholder,
imageFile: this.imageFile,
requestUpdate: this.requestUpdate,
- insertImage: this.insertImage
+ insertImage: this.insertImage,
+ chatMessageSize: this.chatMessageSize
};
this.chatEditor = new ChatEditor(editorConfig);
}