{
+ findElement.classList.remove('blink-bg')
+ }, 2000)
+ }
+
+ return
+ }
+ if((message.timestamp - this.messagesRendered[0].timestamp) > 86400000){
+ let errorMsg = get("chatpage.cchange66")
+ parentEpml.request('showSnackBar', `${errorMsg}`)
+ return
+ }
+
+ if((message.timestamp - this.messagesRendered[0].timestamp) < 86400000){
+ await this.getOldMessageDynamic(0, this.messagesRendered[0].timestamp, message.timestamp - 7200000)
+ const findMessage = this.shadowRoot.querySelector('chat-scroller').shadowRoot.getElementById(message.reference)
+ if(findMessage){
+ findMessage.scrollIntoView({ behavior: 'smooth', block: 'center' })
+ const findElement = findMessage.shadowRoot.querySelector('.message-parent')
+ if(findElement){
+ findElement.classList.add('blink-bg')
+ setTimeout(()=> {
+ findElement.classList.remove('blink-bg')
+ }, 2000)
+ }
+
+ return
+ }
+
+ let errorMsg = get("chatpage.cchange66")
+ parentEpml.request('showSnackBar', `${errorMsg}`)
+
+ }
+
+ }
+
async userSearch() {
const nameValue = this.shadowRoot.getElementById('sendTo').value;
if (!nameValue) {
@@ -1616,7 +1658,6 @@ class ChatPage extends LitElement {
this.groupAdmin = membersAdminsWithName
this.groupMembers = membersWithName
this.groupInfo = getGroupInfo
- console.log({membersAdminsWithName})
} catch (error) {
console.error(error)
}
@@ -1749,6 +1790,8 @@ class ChatPage extends LitElement {
.setSelectedHead=${(val) => this.setSelectedHead(val)}
?openTipUser=${this.openTipUser}
.selectedHead=${this.selectedHead}
+ .goToRepliedMessage=${(val)=> this.goToRepliedMessage(val)}
+ .getOldMessageAfter=${(val)=> this.getOldMessageAfter(val)}
>
`
@@ -1782,6 +1825,81 @@ class ChatPage extends LitElement {
})
}
+ async getOldMessageDynamic(limit, before, after) {
+
+ if (this.isReceipient) {
+ const getInitialMessages = await parentEpml.request('apiCall', {
+ type: 'api',
+ url: `/chat/messages?involving=${window.parent.reduxStore.getState().app.selectedAddress.address}&involving=${this._chatId}&limit=${limit}&reverse=true&before=${before}&after=${after}&haschatreference=false`,
+ });
+
+ const decodeMsgs = getInitialMessages.map((eachMessage) => {
+ return this.decodeMessage(eachMessage)
+ })
+
+
+ const replacedMessages = await replaceMessagesEdited({
+ decodedMessages: decodeMsgs,
+ parentEpml,
+ isReceipient: this.isReceipient,
+ decodeMessageFunc: this.decodeMessage,
+ _publicKey: this._publicKey
+ })
+ this.messagesRendered = [...replacedMessages, ...this.messagesRendered].sort(function (a, b) {
+ return a.timestamp
+ - b.timestamp
+ })
+ this.isLoadingOldMessages = false
+ await this.getUpdateComplete();
+ const viewElement = this.shadowRoot.querySelector('chat-scroller').shadowRoot.getElementById('viewElement');
+
+ if(viewElement){
+ viewElement.scrollTop = 200
+ }
+
+
+
+
+
+ } else {
+ const getInitialMessages = await parentEpml.request('apiCall', {
+ type: 'api',
+ url: `/chat/messages?txGroupId=${Number(this._chatId)}&limit=${limit}&reverse=true&before=${before}&after=${after}&haschatreference=false`,
+ });
+
+
+ const decodeMsgs = getInitialMessages.map((eachMessage) => {
+ return this.decodeMessage(eachMessage)
+ })
+
+ const replacedMessages = await replaceMessagesEdited({
+ decodedMessages: decodeMsgs,
+ parentEpml,
+ isReceipient: this.isReceipient,
+ decodeMessageFunc: this.decodeMessage,
+ _publicKey: this._publicKey
+ })
+
+ this.messagesRendered = [...replacedMessages, ...this.messagesRendered].sort(function (a, b) {
+ return a.timestamp
+ - b.timestamp
+ })
+ this.isLoadingOldMessages = false
+ await this.getUpdateComplete();
+ const viewElement = this.shadowRoot.querySelector('chat-scroller').shadowRoot.getElementById('viewElement');
+
+ if(viewElement){
+ viewElement.scrollTop = 200
+ }
+
+
+
+
+
+ }
+ }
+
+
async getOldMessage(scrollElement) {
if (this.isReceipient) {
@@ -1853,6 +1971,77 @@ class ChatPage extends LitElement {
}
}
+ async getOldMessageAfter(scrollElement) {
+
+ if (this.isReceipient) {
+ const getInitialMessages = await parentEpml.request('apiCall', {
+ type: 'api',
+ url: `/chat/messages?involving=${window.parent.reduxStore.getState().app.selectedAddress.address}&involving=${this._chatId}&limit=20&reverse=true&afer=${scrollElement.messageObj.timestamp}&haschatreference=false`,
+ });
+
+ const decodeMsgs = getInitialMessages.map((eachMessage) => {
+ return this.decodeMessage(eachMessage)
+ })
+
+
+ const replacedMessages = await replaceMessagesEdited({
+ decodedMessages: decodeMsgs,
+ parentEpml,
+ isReceipient: this.isReceipient,
+ decodeMessageFunc: this.decodeMessage,
+ _publicKey: this._publicKey
+ })
+ this.messagesRendered = [...this.messagesRendered, ...replacedMessages].sort(function (a, b) {
+ return a.timestamp
+ - b.timestamp
+ })
+ this.isLoadingOldMessages = false
+ await this.getUpdateComplete();
+ const marginElements = Array.from(this.shadowRoot.querySelector('chat-scroller').shadowRoot.querySelectorAll('message-template'));
+
+ const findElement = marginElements.find((item)=> item.messageObj.reference === scrollElement.messageObj.reference)
+
+ if(findElement){
+ findElement.scrollIntoView({ behavior: 'auto', block: 'center' });
+ }
+
+
+ } else {
+ const getInitialMessages = await parentEpml.request('apiCall', {
+ type: 'api',
+ url: `/chat/messages?txGroupId=${Number(this._chatId)}&limit=20&reverse=true&after=${scrollElement.messageObj.timestamp}&haschatreference=false`,
+ });
+
+
+ const decodeMsgs = getInitialMessages.map((eachMessage) => {
+ return this.decodeMessage(eachMessage)
+ })
+
+ const replacedMessages = await replaceMessagesEdited({
+ decodedMessages: decodeMsgs,
+ parentEpml,
+ isReceipient: this.isReceipient,
+ decodeMessageFunc: this.decodeMessage,
+ _publicKey: this._publicKey
+ })
+
+ this.messagesRendered = [ ...this.messagesRendered, ...replacedMessages].sort(function (a, b) {
+ return a.timestamp
+ - b.timestamp
+ })
+ this.isLoadingOldMessages = false
+ await this.getUpdateComplete();
+ const marginElements = Array.from(this.shadowRoot.querySelector('chat-scroller').shadowRoot.querySelectorAll('message-template'));
+ const findElement = marginElements.find((item)=> item.messageObj.reference === scrollElement.messageObj.reference)
+
+ if(findElement){
+ findElement.scrollIntoView({ behavior: 'auto', block: 'center' });
+ }
+
+
+ }
+ }
+
async processMessages(messages, isInitial) {
const isReceipient = this.chatId.includes('direct')
const decodedMessages = messages.map((eachMessage) => {
@@ -2002,7 +2191,6 @@ class ChatPage extends LitElement {
let decodedMessageObj = {};
if (isReceipientVar === true) {
- console.log('encoded', encodedMessageObj.isEncrypted, _publicKeyVar.hasPubKey,encodedMessageObj.data)
// direct chat
if (encodedMessageObj.isEncrypted === true && _publicKeyVar.hasPubKey === true && encodedMessageObj.data) {
let decodedMessage = window.parent.decryptChatMessage(encodedMessageObj.data, window.parent.reduxStore.getState().app.selectedAddress.keyPair.privateKey, _publicKeyVar.key, encodedMessageObj.reference);
@@ -2653,7 +2841,6 @@ class ChatPage extends LitElement {
type: 'api',
url: `/names/${userInput}`
});
- console.log({validatedAddress, validatedUsername })
if (validatedAddress && validatedUsername.name) {
userPubkey = await parentEpml.request('apiCall', {
diff --git a/qortal-ui-plugins/plugins/core/components/ChatScroller-css.js b/qortal-ui-plugins/plugins/core/components/ChatScroller-css.js
index 06f2607a..27c4a6fe 100644
--- a/qortal-ui-plugins/plugins/core/components/ChatScroller-css.js
+++ b/qortal-ui-plugins/plugins/core/components/ChatScroller-css.js
@@ -172,6 +172,7 @@ export const chatStyles = css`
border-radius: 5px;
padding: 8px 5px 8px 25px;
margin-bottom: 10px;
+ cursor: pointer;
}
.original-message:before {
@@ -187,6 +188,7 @@ export const chatStyles = css`
.original-message-sender {
margin: 0 0 5px 0;
color: var(--mdc-theme-primary);
+ cursor: pointer;
}
.replied-message {
@@ -640,4 +642,14 @@ export const chatStyles = css`
border-top: 2px solid rgba(#0D0D0D, 0.1);
margin: 2rem 0;
}
+
+ .blink-bg{
+ border-radius: 8px;
+ animation: blinkingBackground 3s;
+ }
+ @keyframes blinkingBackground{
+ 0% { background-color: rgba(var(--menuactivergb), 1)}
+
+ 100% { background-color:rgba(var(--menuactivergb), 0)}
+ }
`
diff --git a/qortal-ui-plugins/plugins/core/components/ChatScroller.js b/qortal-ui-plugins/plugins/core/components/ChatScroller.js
index e9db4e5e..cf021483 100644
--- a/qortal-ui-plugins/plugins/core/components/ChatScroller.js
+++ b/qortal-ui-plugins/plugins/core/components/ChatScroller.js
@@ -50,7 +50,9 @@ class ChatScroller extends LitElement {
openTipUser: { type: Boolean },
openUserInfo: { type: Boolean },
userName: { type: String },
- selectedHead: { type: Object }
+ selectedHead: { type: Object },
+ goToRepliedMessage: { attribute: false },
+ getOldMessageAfter: {attribute: false}
}
}
@@ -101,6 +103,7 @@ class ChatScroller extends LitElement {
}
return messageArray;
}, [])
+
return html`
${this.isLoadingMessages ? html`
@@ -132,7 +135,10 @@ class ChatScroller extends LitElement {
.setOpenPrivateMessage=${(val) => this.setOpenPrivateMessage(val)}
.setOpenTipUser=${(val) => this.setOpenTipUser(val)}
.setOpenUserInfo=${(val) => this.setOpenUserInfo(val)}
- .setUserName=${(val) => this.setUserName(val)}>
+ .setUserName=${(val) => this.setUserName(val)}
+ id=${message.reference}
+ .goToRepliedMessage=${this.goToRepliedMessage}
+ >
`
)
})}
@@ -195,6 +201,10 @@ class ChatScroller extends LitElement {
this.getOldMessage(_scrollElement)
}
+ _getOldMessageAfter(_scrollElement) {
+ this.getOldMessageAfter(_scrollElement)
+ }
+
_upObserverhandler(entries) {
if (entries[0].isIntersecting) {
if(this.messages.length < 20){
@@ -208,6 +218,8 @@ class ChatScroller extends LitElement {
_downObserverHandler(entries) {
if (!entries[0].isIntersecting) {
+ let _scrollElement = entries[0].target.previousElementSibling;
+ // this._getOldMessageAfter(_scrollElement);
this.showLastMessageRefScroller(true);
} else {
this.showLastMessageRefScroller(false);
@@ -270,7 +282,8 @@ class MessageTemplate extends LitElement {
setOpenTipUser: { attribute: false },
setOpenUserInfo: { attribute: false },
setUserName: { attribute: false },
- openTipUser:{ type: Boolean }
+ openTipUser:{ type: Boolean },
+ goToRepliedMessage: { attribute: false },
}
}
@@ -511,14 +524,13 @@ class MessageTemplate extends LitElement {
) : null}
${repliedToData && html`
-
+
{
+ this.goToRepliedMessage(repliedToData)
+ }}>
{
- if (this.myAddress === repliedToData.sender) return;
- this.setOpenUserInfo(true);
- this.setUserName(repliedToData)
- }}
+
+
class="original-message-sender">
${repliedToData.senderName ?? cropAddress(repliedToData.sender)}
From c747468ebfdf14de098b1ffa077b739bebca6434 Mon Sep 17 00:00:00 2001
From: Phillip
Date: Fri, 20 Jan 2023 15:14:31 +0200
Subject: [PATCH 13/76] increase chat msg size to 4000
---
qortal-ui-plugins/plugins/core/components/ChatTextEditor.js | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/qortal-ui-plugins/plugins/core/components/ChatTextEditor.js b/qortal-ui-plugins/plugins/core/components/ChatTextEditor.js
index cc371fa4..9d1efcdc 100644
--- a/qortal-ui-plugins/plugins/core/components/ChatTextEditor.js
+++ b/qortal-ui-plugins/plugins/core/components/ChatTextEditor.js
@@ -507,8 +507,8 @@ class ChatTextEditor extends LitElement {
${this.chatMessageSize >= 750 ?
html`
-
- ${`Your message size is of ${this.chatMessageSize} bytes out of a maximum of 1000`}
+
+ ${`Your message size is of ${this.chatMessageSize} bytes out of a maximum of 4000`}
` :
@@ -605,7 +605,7 @@ class ChatTextEditor extends LitElement {
sendMessageFunc(props) {
if(this.editor.isEmpty) return
this.getMessageSize(this.editor.getJSON())
- if (this.chatMessageSize > 1000 ) {
+ if (this.chatMessageSize > 4000 ) {
parentEpml.request('showSnackBar', get("chatpage.cchange29"));
return;
}
From 7ef380678c9d20167fa7b8faa84114711ca6792c Mon Sep 17 00:00:00 2001
From: Phillip
Date: Fri, 20 Jan 2023 15:47:12 +0200
Subject: [PATCH 14/76] send image without caption
---
qortal-ui-plugins/plugins/core/components/ChatTextEditor.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/qortal-ui-plugins/plugins/core/components/ChatTextEditor.js b/qortal-ui-plugins/plugins/core/components/ChatTextEditor.js
index 9d1efcdc..2315d609 100644
--- a/qortal-ui-plugins/plugins/core/components/ChatTextEditor.js
+++ b/qortal-ui-plugins/plugins/core/components/ChatTextEditor.js
@@ -603,7 +603,7 @@ class ChatTextEditor extends LitElement {
}
sendMessageFunc(props) {
- if(this.editor.isEmpty) return
+ if(this.editor.isEmpty && this.iframeId !== 'newChat') return
this.getMessageSize(this.editor.getJSON())
if (this.chatMessageSize > 4000 ) {
parentEpml.request('showSnackBar', get("chatpage.cchange29"));
From f35dcf34bf79f2845760b3f4855567e4bae664c8 Mon Sep 17 00:00:00 2001
From: Justin Ferrari <‘justinwesleyferrari@gmail.com’>
Date: Sat, 21 Jan 2023 10:54:08 -0500
Subject: [PATCH 15/76] Added Edit Message Word + Fixed Reply Bug
---
qortal-ui-core/font/switch-theme.css | 2 +-
qortal-ui-core/language/us.json | 4 +-
qortal-ui-core/src/styles/switch-theme.css | 2 +-
qortal-ui-crypto/api/constants.js | 2 +-
.../plugins/core/components/ChatPage.js | 45 ++++++++++---------
.../core/components/ChatScroller-css.js | 22 ++++++---
.../plugins/core/components/ChatScroller.js | 25 ++++++++++-
.../core/messaging/q-chat/q-chat.src.js | 2 -
8 files changed, 67 insertions(+), 37 deletions(-)
diff --git a/qortal-ui-core/font/switch-theme.css b/qortal-ui-core/font/switch-theme.css
index 3d164a7c..6c78e322 100644
--- a/qortal-ui-core/font/switch-theme.css
+++ b/qortal-ui-core/font/switch-theme.css
@@ -9,7 +9,7 @@ html {
--copybutton: #707584;
--chat-group: #080808;
--chat-bubble: #9f9f9f0a;
- --chat-bubble-bg: #f3f3f3;
+ --chat-bubble-bg: #e6e6e6;
--chat-bubble-msg-color: #080808;
--reaction-bubble-outline: #6b6969;
--chat-menu-bg: #ffffff;
diff --git a/qortal-ui-core/language/us.json b/qortal-ui-core/language/us.json
index 43efa61b..1e47f84e 100644
--- a/qortal-ui-core/language/us.json
+++ b/qortal-ui-core/language/us.json
@@ -572,8 +572,8 @@
"cchange63": "Enter Enabled",
"cchange64": "Enter Disabled",
"cchange65": "Please enter a recipient",
- "cchange66": "Cannot fetch replied-to message. Message is too old."
-
+ "cchange66": "Cannot fetch replied-to message. Message is too old.",
+ "cchange68": "edited"
},
"welcomepage": {
"wcchange1": "Welcome to Q-Chat",
diff --git a/qortal-ui-core/src/styles/switch-theme.css b/qortal-ui-core/src/styles/switch-theme.css
index 72dfa151..fe928e12 100644
--- a/qortal-ui-core/src/styles/switch-theme.css
+++ b/qortal-ui-core/src/styles/switch-theme.css
@@ -9,7 +9,7 @@ html {
--copybutton: #707584;
--chat-group: #080808;
--chat-bubble: #9f9f9f0a;
- --chat-bubble-bg: #f3f3f3;
+ --chat-bubble-bg: #e6e6e6;
--chat-bubble-msg-color: #080808;
--reaction-bubble-outline: #6b6969;
--chat-menu-bg: #ffffff;
diff --git a/qortal-ui-crypto/api/constants.js b/qortal-ui-crypto/api/constants.js
index ae139416..11c0cbbf 100644
--- a/qortal-ui-crypto/api/constants.js
+++ b/qortal-ui-crypto/api/constants.js
@@ -159,7 +159,7 @@ const ADDRESS_VERSION = 58
const PROXY_URL = "/proxy/"
// Chat reference timestamp
-const CHAT_REFERENCE_FEATURE_TRIGGER_TIMESTAMP = 0
+const CHAT_REFERENCE_FEATURE_TRIGGER_TIMESTAMP = 1674316800000
// Used as a salt for all qora addresses. Salts used for storing your private keys in local storage will be randomly generated
const STATIC_SALT = new Uint8Array([54, 190, 201, 206, 65, 29, 123, 129, 147, 231, 180, 166, 171, 45, 95, 165, 78, 200, 208, 194, 44, 207, 221, 146, 45, 238, 68, 68, 69, 102, 62, 6])
diff --git a/qortal-ui-plugins/plugins/core/components/ChatPage.js b/qortal-ui-plugins/plugins/core/components/ChatPage.js
index 1274da7e..441f5457 100644
--- a/qortal-ui-plugins/plugins/core/components/ChatPage.js
+++ b/qortal-ui-plugins/plugins/core/components/ChatPage.js
@@ -147,7 +147,6 @@ class ChatPage extends LitElement {
width: 800px;
}
-
.close-icon {
color: #676b71;
width: 18px;
@@ -375,9 +374,9 @@ class ChatPage extends LitElement {
.repliedTo-message p mark {
background-color: #ffe066;
- border-radius: 0.25em;
- box-decoration-break: clone;
- padding: 0.125em 0;
+ border-radius: 0.25em;
+ box-decoration-break: clone;
+ padding: 0.125em 0;
}
.reply-icon {
@@ -979,17 +978,20 @@ class ChatPage extends LitElement {
${this.repliedToMessageObj.senderName ? this.repliedToMessageObj.senderName : this.repliedToMessageObj.sender}
- ${this.repliedToMessageObj.toString() === '1' ? html`
- ${this.repliedToMessageObj.message}
- ` : ''}
- ${this.repliedToMessageObj.toString() === '2' ? html`
- ${unsafeHTML(generateHTML(this.repliedToMessageObj.message, [
- StarterKit,
- Underline,
- Highlight
- // other extensions …
- ]))} ` : ''}
-
+ ${this.repliedToMessageObj.version.toString() === '1' ? html`
+ ${this.repliedToMessageObj.message}
+ ` : ''}
+ ${this.repliedToMessageObj.version.toString() === '2'
+ ? html`
+ ${unsafeHTML(generateHTML(this.repliedToMessageObj.message,
+ [
+ StarterKit,
+ Underline,
+ Highlight
+ // other extensions …
+ ]))}
+ `
+ : ''}
${translate("chatpage.cchange25")}
- ${unsafeHTML(generateHTML(this.editedMessageObj.message, [
- StarterKit,
- Underline,
- Highlight
- // other extensions …
- ]))}
+ ${unsafeHTML(generateHTML(this.editedMessageObj.message,
+ [
+ StarterKit,
+ Underline,
+ Highlight
+ // other extensions …
+ ]))}
0) {
image = parsedMessageObj.images[0];
}
@@ -372,6 +374,7 @@ class MessageTemplate extends LitElement {
let levelFounder = '';
let hideit = hidemsg.includes(this.messageObj.sender);
let forwarded = ''
+ let edited = ''
levelFounder = html``;
if (this.messageObj.senderName) {
@@ -435,6 +438,12 @@ class MessageTemplate extends LitElement {
`;
+ edited = html`
+
+ ${translate("chatpage.cchange68")}
+
+ `;
+
if (repliedToData) {
try {
const parsedMsg = JSON.parse(repliedToData.decodedMessage);
@@ -590,7 +599,11 @@ class MessageTemplate extends LitElement {
${version.toString() === '1' ? html`
${unsafeHTML(this.emojiPicker.parse(replacedMessage))}
` : ''}
-
+ ${isEdited ?
+ html`
+
+ ${edited}
+
+ `
+ : null
+ }
@@ -858,7 +879,7 @@ class ChatMenu extends LitElement {
this.versionErrorSnack()
return
}
- this.setRepliedToMessageObj(this.originalMessage);
+ this.setRepliedToMessageObj({...this.originalMessage, version: this.version});
}}">
diff --git a/qortal-ui-plugins/plugins/core/messaging/q-chat/q-chat.src.js b/qortal-ui-plugins/plugins/core/messaging/q-chat/q-chat.src.js
index 4e6ad21f..11458bd6 100644
--- a/qortal-ui-plugins/plugins/core/messaging/q-chat/q-chat.src.js
+++ b/qortal-ui-plugins/plugins/core/messaging/q-chat/q-chat.src.js
@@ -163,8 +163,6 @@ class Chat extends LitElement {
}
render() {
- console.log(12, "q-chat here");
- console.log(window.location.href);
return html`
From cad6429159647160b85c9885223de2b668184e20 Mon Sep 17 00:00:00 2001
From: Phillip
Date: Sat, 21 Jan 2023 23:09:53 +0200
Subject: [PATCH 16/76] fix old messages, avatar, 404 imgs
---
qortal-ui-core/package.json | 20 +++++------
qortal-ui-plugins/package.json | 20 +++++------
.../plugins/core/components/ChatPage.js | 2 +-
.../core/components/ChatScroller-css.js | 4 +--
.../plugins/core/components/ChatScroller.js | 33 +++++++++++++++----
.../plugins/core/components/LevelFounder.js | 4 +--
.../core/components/UserInfo/UserInfo.js | 2 +-
.../name-registration.src.js | 2 +-
.../plugins/core/qdn/websites.src.js | 4 +--
.../sponsorship-list/sponsorship-list.src.js | 2 +-
10 files changed, 56 insertions(+), 37 deletions(-)
diff --git a/qortal-ui-core/package.json b/qortal-ui-core/package.json
index e98948c6..5515942d 100644
--- a/qortal-ui-core/package.json
+++ b/qortal-ui-core/package.json
@@ -1,6 +1,6 @@
{
"name": "qortal-ui-core",
- "version": "2.2.5",
+ "version": "3.0.0",
"description": "Qortal Project - decentralize the world - Data storage, communications, web hosting, decentralized trading, complete infrastructure for the future blockchain-based Internet",
"keywords": [
"QORT",
@@ -17,7 +17,7 @@
"author": "QORTAL ",
"license": "GPL-3.0",
"dependencies": {
- "@hapi/hapi": "21.1.0",
+ "@hapi/hapi": "21.2.0",
"@hapi/inert": "7.0.0",
"sass": "1.57.1"
},
@@ -53,17 +53,17 @@
"@polymer/paper-spinner": "3.0.2",
"@polymer/paper-toast": "3.0.1",
"@polymer/paper-tooltip": "3.0.1",
- "@rollup/plugin-alias": "4.0.2",
+ "@rollup/plugin-alias": "4.0.3",
"@rollup/plugin-babel": "6.0.3",
- "@rollup/plugin-commonjs": "24.0.0",
+ "@rollup/plugin-commonjs": "24.0.1",
"@rollup/plugin-node-resolve": "15.0.1",
"@rollup/plugin-replace": "5.0.2",
"@rollup/plugin-terser": "0.3.0",
- "@vaadin/button": "23.3.3",
- "@vaadin/grid": "23.3.3",
- "@vaadin/icons": "23.3.3",
- "@vaadin/password-field": "23.3.3",
- "@vaadin/tooltip": "23.3.3",
+ "@vaadin/button": "23.3.5",
+ "@vaadin/grid": "23.3.5",
+ "@vaadin/icons": "23.3.5",
+ "@vaadin/password-field": "23.3.5",
+ "@vaadin/tooltip": "23.3.5",
"asmcrypto.js": "2.3.2",
"bcryptjs": "2.4.3",
"epml": "0.3.3",
@@ -73,7 +73,7 @@
"pwa-helpers": "0.9.1",
"redux": "4.2.0",
"redux-thunk": "2.4.2",
- "rollup": "3.10.0",
+ "rollup": "3.10.1",
"rollup-plugin-node-globals": "1.4.0",
"rollup-plugin-progress": "1.1.2",
"rollup-plugin-scss": "3.0.0",
diff --git a/qortal-ui-plugins/package.json b/qortal-ui-plugins/package.json
index 7e6583d1..4ca2e7d1 100644
--- a/qortal-ui-plugins/package.json
+++ b/qortal-ui-plugins/package.json
@@ -1,6 +1,6 @@
{
"name": "qortal-ui-plugins",
- "version": "2.2.5",
+ "version": "3.0.0",
"description": "Qortal Project - decentralize the world - Data storage, communications, web hosting, decentralized trading, complete infrastructure for the future blockchain-based Internet",
"keywords": [
"QORT",
@@ -63,24 +63,24 @@
"@polymer/paper-slider": "3.0.1",
"@polymer/paper-spinner": "3.0.2",
"@polymer/paper-tooltip": "3.0.1",
- "@rollup/plugin-alias": "4.0.2",
+ "@rollup/plugin-alias": "4.0.3",
"@rollup/plugin-babel": "6.0.3",
- "@rollup/plugin-commonjs": "24.0.0",
+ "@rollup/plugin-commonjs": "24.0.1",
"@rollup/plugin-node-resolve": "15.0.1",
"@rollup/plugin-replace": "5.0.2",
"@rollup/plugin-terser": "0.3.0",
- "@vaadin/avatar": "23.3.3",
- "@vaadin/button": "23.3.3",
- "@vaadin/grid": "23.3.3",
- "@vaadin/icons": "23.3.3",
- "@vaadin/tooltip": "23.3.3",
+ "@vaadin/avatar": "23.3.5",
+ "@vaadin/button": "23.3.5",
+ "@vaadin/grid": "23.3.5",
+ "@vaadin/icons": "23.3.5",
+ "@vaadin/tooltip": "23.3.5",
"epml": "0.3.3",
"file-saver": "2.0.5",
- "highcharts": "10.3.2",
+ "highcharts": "10.3.3",
"html-escaper": "3.0.3",
"lit": "2.6.1",
"lit-translate": "2.0.1",
- "rollup": "3.10.0",
+ "rollup": "3.10.1",
"rollup-plugin-node-globals": "1.4.0",
"rollup-plugin-progress": "1.1.2",
"rollup-plugin-web-worker-loader": "1.6.1"
diff --git a/qortal-ui-plugins/plugins/core/components/ChatPage.js b/qortal-ui-plugins/plugins/core/components/ChatPage.js
index 441f5457..8cfd943c 100644
--- a/qortal-ui-plugins/plugins/core/components/ChatPage.js
+++ b/qortal-ui-plugins/plugins/core/components/ChatPage.js
@@ -1613,7 +1613,7 @@ class ChatPage extends LitElement {
const isRecipient = this.chatId.includes('direct') === true ? true : false;
const groupId = this.chatId.split('/')[1];
- if(!isRecipient && groupId !== 0){
+ if(!isRecipient && groupId.toString() !== '0'){
try {
const getMembers = await parentEpml.request("apiCall", {
diff --git a/qortal-ui-plugins/plugins/core/components/ChatScroller-css.js b/qortal-ui-plugins/plugins/core/components/ChatScroller-css.js
index b88600c8..af39f5d3 100644
--- a/qortal-ui-plugins/plugins/core/components/ChatScroller-css.js
+++ b/qortal-ui-plugins/plugins/core/components/ChatScroller-css.js
@@ -77,8 +77,8 @@ export const chatStyles = css`
}
.message-data-my-name {
- color: #cf21e8;
- text-shadow: 0 0 3px #cf21e8;
+ color: var(--mdc-theme-primary);
+ text-shadow: 0 0 3px var(--mdc-theme-primary);
}
.message-data-time {
diff --git a/qortal-ui-plugins/plugins/core/components/ChatScroller.js b/qortal-ui-plugins/plugins/core/components/ChatScroller.js
index fc80c6c8..d8b06852 100644
--- a/qortal-ui-plugins/plugins/core/components/ChatScroller.js
+++ b/qortal-ui-plugins/plugins/core/components/ChatScroller.js
@@ -52,7 +52,8 @@ class ChatScroller extends LitElement {
userName: { type: String },
selectedHead: { type: Object },
goToRepliedMessage: { attribute: false },
- getOldMessageAfter: {attribute: false}
+ getOldMessageAfter: {attribute: false},
+ listSeenMessages: {type: Array}
}
}
@@ -67,6 +68,11 @@ class ChatScroller extends LitElement {
this.hideMessages = JSON.parse(localStorage.getItem("MessageBlockedAddresses") || "[]")
this.openTipUser = false;
this.openUserInfo = false;
+ this.listSeenMessages= []
+ }
+
+ addSeenMessage(val){
+ this.listSeenMessages.push(val)
}
render() {
@@ -138,6 +144,8 @@ class ChatScroller extends LitElement {
.setUserName=${(val) => this.setUserName(val)}
id=${message.reference}
.goToRepliedMessage=${this.goToRepliedMessage}
+ .addSeenMessage=${(val)=> this.addSeenMessage(val)}
+ .listSeenMessages=${this.listSeenMessages}
>
`
)
@@ -284,6 +292,9 @@ class MessageTemplate extends LitElement {
setUserName: { attribute: false },
openTipUser:{ type: Boolean },
goToRepliedMessage: { attribute: false },
+ listSeenMessages: {type: Array},
+ addSeenMessage: {attribute: false},
+
}
}
@@ -300,7 +311,7 @@ class MessageTemplate extends LitElement {
this.isFirstMessage = false
this.isSingleMessageInGroup = false
this.isLastMessageInGroup = false
- this.viewImage = false
+ this.viewImage = false
}
static styles = [chatStyles]
@@ -331,6 +342,12 @@ class MessageTemplate extends LitElement {
}
}
+ firstUpdated(){
+ if(this.listSeenMessages.includes(this.messageObj.reference)){
+ this.viewImage = true
+ }
+ }
+
render() {
const hidemsg = this.hideMessages;
let message = "";
@@ -381,9 +398,9 @@ class MessageTemplate extends LitElement {
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node];
const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port;
const avatarUrl = `${nodeUrl}/arbitrary/THUMBNAIL/${this.messageObj.senderName}/qortal_avatar?async=true&apiKey=${myNode.apiKey}`;
- avatarImg = html`
`;
+ avatarImg = html`
`;
} else {
- avatarImg = html`
`
+ avatarImg = html`
`
}
const createImage = (imageUrl) => {
@@ -455,7 +472,6 @@ class MessageTemplate extends LitElement {
}
const escapedMessage = this.escapeHTML(message)
const replacedMessage = escapedMessage.replace(new RegExp('\r?\n','g'), '
');
-
return hideit ? html`` : html`
-
+
`}
${image && !isImageDeleted && !this.viewImage && this.myAddress !== this.messageObj.sender ? html`
{
this.viewImage = true
+ this.addSeenMessage(this.messageObj.reference)
}}
class=${[`image-container`, !this.isImageLoaded ? 'defaultSize' : ''].join(' ')}
style=${this.isFirstMessage && "margin-top: 10px;"}>
@@ -599,6 +615,9 @@ class MessageTemplate extends LitElement {
${version.toString() === '1' ? html`
${unsafeHTML(this.emojiPicker.parse(replacedMessage))}
` : ''}
+ ${version.toString() === '0' ? html`
+ ${unsafeHTML(this.emojiPicker.parse(replacedMessage))}
+ ` : ''}
${translate("mintingpage.mchange27")} ${adresslevel}
- `
+ ` : ''
}
_textMenu(event) {
diff --git a/qortal-ui-plugins/plugins/core/components/UserInfo/UserInfo.js b/qortal-ui-plugins/plugins/core/components/UserInfo/UserInfo.js
index ff0290cc..ea8fe4de 100644
--- a/qortal-ui-plugins/plugins/core/components/UserInfo/UserInfo.js
+++ b/qortal-ui-plugins/plugins/core/components/UserInfo/UserInfo.js
@@ -85,7 +85,7 @@ export class UserInfo extends LitElement {
${!this.isImageLoaded && this.selectedHead && !this.selectedHead.name ?
html`
-
![avatar](/img/qortal-chat-logo.png)
+
`
: ""}