From 4e71765cbbed25c19da4efc5216a0050264a1ebc Mon Sep 17 00:00:00 2001 From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com> Date: Tue, 7 Jun 2022 20:42:28 +0200 Subject: [PATCH] WIP --- .../plugins/core/components/ChatPage.js | 64 +++++---- .../plugins/core/components/ChatScroller.js | 124 +++++++++++------- 2 files changed, 119 insertions(+), 69 deletions(-) diff --git a/qortal-ui-plugins/plugins/core/components/ChatPage.js b/qortal-ui-plugins/plugins/core/components/ChatPage.js index 15bd28a1..6ccf4753 100644 --- a/qortal-ui-plugins/plugins/core/components/ChatPage.js +++ b/qortal-ui-plugins/plugins/core/components/ChatPage.js @@ -30,6 +30,7 @@ class ChatPage extends LitElement { messages: { type: Array }, _messages: { type: Array }, newMessages: { type: Array }, + hideMessages: { type: Array }, chatId: { type: String }, myAddress: { type: String }, isReceipient: { type: Boolean }, @@ -121,6 +122,7 @@ class ChatPage extends LitElement { this.messages = [] this._messages = [] this.newMessages = [] + this.hideMessages = [] this._publicKey = { key: '', hasPubKey: false } this.messageSignature = '' this._initialMessages = [] @@ -246,11 +248,16 @@ class ChatPage extends LitElement { }).then(res => { this.balance = res }) - parentEpml.subscribe('frame_paste_menu_switch', async res => { + parentEpml.request('apiCall', { + url: `/lists/blockedAddresses?apiKey=${this.getApiKey()}` + }).then(response => { + this.hideMessages = response + console.log(response) + }) + parentEpml.subscribe('frame_paste_menu_switch', async res => { res = JSON.parse(res) if (res.isOpen === false && this.isPasteMenuOpen === true) { - this.pasteToTextBox(textarea) this.isPasteMenuOpen = false } @@ -320,7 +327,7 @@ class ChatPage extends LitElement { } // TODO: Determine number of initial messages by screen height... - this._messages.length <= 15 ? adjustMessages() : this._initialMessages = this._messages.splice(this._messages.length - 15); + this._messages.length <= 2 ? adjustMessages() : this._initialMessages = this._messages.splice(this._messages.length - 2); this.isLoadingMessages = false setTimeout(() => this.downElementObserver(), 500) @@ -367,25 +374,35 @@ class ChatPage extends LitElement { } if (messageObj.sender === this.myAddress) { - nameMenu = `${messageObj.senderName ? messageObj.senderName : messageObj.sender}` + nameMenu = `more_horiz` } else { - nameMenu = `` + nameMenu = `` } levelFounder = `` - return ` -
  • -
    - ${nameMenu} - ${levelFounder} - - add_reactionreplymore_horiz -
    -
    ${avatarImg}
    -
    ${this.emojiPicker.parse(escape(messageObj.decodedMessage))}
    -
  • - ` + const hidmes = this.hideMessages + let hideit = hidmes.includes(messageObj.sender) + + if ( hideit === true ) { + return ` +
  • + ` + } else { + return ` +
  • +
    + ${messageObj.senderName ? messageObj.senderName : messageObj.sender} + ${levelFounder} + + ${nameMenu} +
    +
    ${avatarImg}
    +
    ${this.emojiPicker.parse(this.escapeHTML(messageObj.decodedMessage))}
    +
    +
  • + ` + } } renderNewMessage(newMessage) { @@ -422,29 +439,22 @@ class ChatPage extends LitElement { if (this.isReceipient === true) { // direct chat - if (encodedMessageObj.isEncrypted === true && this._publicKey.hasPubKey === true) { - let decodedMessage = window.parent.decryptChatMessage(encodedMessageObj.data, window.parent.reduxStore.getState().app.selectedAddress.keyPair.privateKey, this._publicKey.key, encodedMessageObj.reference) decodedMessageObj = { ...encodedMessageObj, decodedMessage } } else if (encodedMessageObj.isEncrypted === false) { - let bytesArray = window.parent.Base58.decode(encodedMessageObj.data) let decodedMessage = new TextDecoder('utf-8').decode(bytesArray) decodedMessageObj = { ...encodedMessageObj, decodedMessage } } else { - decodedMessageObj = { ...encodedMessageObj, decodedMessage: "Cannot Decrypt Message!" } } - } else { // group chat - let bytesArray = window.parent.Base58.decode(encodedMessageObj.data) let decodedMessage = new TextDecoder('utf-8').decode(bytesArray) decodedMessageObj = { ...encodedMessageObj, decodedMessage } } - return decodedMessageObj } @@ -1027,6 +1037,12 @@ class ChatPage extends LitElement { }; this.chatEditor = new ChatEditor(editorConfig); } + + getApiKey() { + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + let apiKey = myNode.apiKey + return apiKey + } } window.customElements.define('chat-page', ChatPage) diff --git a/qortal-ui-plugins/plugins/core/components/ChatScroller.js b/qortal-ui-plugins/plugins/core/components/ChatScroller.js index 71871114..62984562 100644 --- a/qortal-ui-plugins/plugins/core/components/ChatScroller.js +++ b/qortal-ui-plugins/plugins/core/components/ChatScroller.js @@ -18,8 +18,9 @@ class ChatScroller extends LitElement { getOldMessage: { attribute: false }, emojiPicker: { attribute: false }, escapeHTML: { attribute: false }, - initialMessages: { type: Array }, // First set of messages to load.. 15 messages max ( props ) - messages: { type: Array } + initialMessages: { type: Array }, + messages: { type: Array }, + hideMessages: { type: Array } } } @@ -69,9 +70,9 @@ class ChatScroller extends LitElement { } .message-data { - width: 90%; - background: transparent; + width: 92%; margin-bottom: 15px; + margin-left: 50px; } .message-data:hover .hide { @@ -80,7 +81,6 @@ class ChatScroller extends LitElement { } .message-data-name { - color: var(--black); cursor: pointer; } @@ -98,6 +98,14 @@ class ChatScroller extends LitElement { padding-bottom: 4px; } + .message-data-react { + margin-left: 50px; + } + + .message-data-react-item { + padding-left: 6px; + } + .message { color: black; padding: 12px 10px; @@ -140,8 +148,13 @@ class ChatScroller extends LitElement { } .my-message { - background: #ddd; - border: 2px #ccc solid; + background: #d1d1d1; + border: 2px solid #cecece; + } + + .my-message:after { + border-bottom-color: #d1d1d1; + left: 7%; } .other-message { @@ -201,6 +214,7 @@ class ChatScroller extends LitElement { constructor() { super() this.messages = [] + this.hideMessages = [] this._upObserverhandler = this._upObserverhandler.bind(this) this.isLoading = false this.myAddress = window.parent.reduxStore.getState().app.selectedAddress.address @@ -217,6 +231,7 @@ class ChatScroller extends LitElement { } firstUpdated() { + this.getHideMessages() this.viewElement = this.shadowRoot.getElementById('viewElement') this.upObserverElement = this.shadowRoot.getElementById('upObserver') this.downObserverElement = this.shadowRoot.getElementById('downObserver') @@ -228,65 +243,80 @@ class ChatScroller extends LitElement { this.viewElement.scrollTop = this.viewElement.scrollHeight + 50 } + async getHideMessages() { + const hideMessages = await parentEpml.request('apiCall', { + url: `/lists/blockedAddresses?apiKey=${this.getApiKey()}` + }) + this.hideMessages = hideMessages + } + chatMessageTemplate(messageObj) { - let avatarImg = ''; - let nameMenu = ''; - let levelFounder = ''; + const hidmes = this.hideMessages + + let avatarImg = '' + let nameMenu = '' + let levelFounder = '' + let hideit = hidmes.includes(messageObj.sender) if (messageObj.senderName) { - 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/${messageObj.senderName}/qortal_avatar?async=true&apiKey=${myNode.apiKey}`; - avatarImg = ``; + 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/${messageObj.senderName}/qortal_avatar?async=true&apiKey=${myNode.apiKey}` + avatarImg = `` } if (messageObj.sender === this.myAddress) { - nameMenu = `${messageObj.senderName ? messageObj.senderName : messageObj.sender}` + nameMenu = `more_horiz` } else { - nameMenu = `` + nameMenu = `` } levelFounder = `` - return ` -
  • -
    - ${nameMenu} - ${levelFounder} - - add_reactionreplymore_horiz -
    -
    ${avatarImg}
    -
    ${this.emojiPicker.parse(this.escapeHTML(messageObj.decodedMessage))}
    -
  • - ` + if ( hideit === true ) { + return ` +
  • + ` + } else { + return ` +
  • +
    + ${messageObj.senderName ? messageObj.senderName : messageObj.sender} + ${levelFounder} + + ${nameMenu} +
    +
    ${avatarImg}
    +
    ${this.emojiPicker.parse(this.escapeHTML(messageObj.decodedMessage))}
    +
    +
  • + ` + } } renderChatMessages(messages) { messages.forEach(message => { - const li = document.createElement('li'); - li.innerHTML = this.chatMessageTemplate(message); + const li = document.createElement('li') + li.innerHTML = this.chatMessageTemplate(message) li.id = message.signature; - this.downObserverElement.before(li); - }); + this.downObserverElement.before(li) + }) } renderOldMessages(listOfOldMessages) { - let { oldMessages, scrollElement } = listOfOldMessages; - - let _oldMessages = oldMessages.reverse(); + let { oldMessages, scrollElement } = listOfOldMessages + let _oldMessages = oldMessages.reverse() _oldMessages.forEach(oldMessage => { - const li = document.createElement('li'); - li.innerHTML = this.chatMessageTemplate(oldMessage); - li.id = oldMessage.signature; - this.upObserverElement.after(li); - scrollElement.scrollIntoView({ behavior: 'auto', block: 'center' }); - }); + const li = document.createElement('li') + li.innerHTML = this.chatMessageTemplate(oldMessage) + li.id = oldMessage.signature + this.upObserverElement.after(li) + scrollElement.scrollIntoView({ behavior: 'auto', block: 'center' }) + }) } _getOldMessage(_scrollElement) { let listOfOldMessages = this.getOldMessage(_scrollElement) - if (listOfOldMessages) { this.renderOldMessages(listOfOldMessages) } @@ -295,7 +325,6 @@ class ChatScroller extends LitElement { _upObserverhandler(entries) { if (entries[0].isIntersecting) { let _scrollElement = entries[0].target.nextElementSibling - this._getOldMessage(_scrollElement) } } @@ -305,11 +334,16 @@ class ChatScroller extends LitElement { root: this.viewElement, rootMargin: '0px', threshold: 1 - }; - + } const observer = new IntersectionObserver(this._upObserverhandler, options) observer.observe(this.upObserverElement) } + + getApiKey() { + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + let apiKey = myNode.apiKey + return apiKey + } } window.customElements.define('chat-scroller', ChatScroller)