From d24dc657a43562c30024a0798e82eb884eb20711 Mon Sep 17 00:00:00 2001 From: Eduard Kuzmenko Date: Sun, 7 Feb 2021 09:03:38 +0200 Subject: [PATCH] Replies footer: Fix handling first comment Handle comments after message is sent --- src/components/chat/bubbles.ts | 7 ++ src/components/chat/replies.ts | 4 +- src/layer.d.ts | 70 +++++------- src/lib/richtextprocessor.ts | 2 - src/scripts/in/schema_additional_params.json | 108 +------------------ 5 files changed, 38 insertions(+), 153 deletions(-) diff --git a/src/components/chat/bubbles.ts b/src/components/chat/bubbles.ts index eb0325cd..cb7b1b11 100644 --- a/src/components/chat/bubbles.ts +++ b/src/components/chat/bubbles.ts @@ -43,6 +43,7 @@ import { FocusDirection } from "../../helpers/fastSmoothScroll"; import useHeavyAnimationCheck, { getHeavyAnimationPromise, dispatchHeavyAnimationEvent } from "../../hooks/useHeavyAnimationCheck"; import { fastRaf } from "../../helpers/schedulers"; import { deferredPromise } from "../../helpers/cancellablePromise"; +import RepliesElement from "./replies"; const USE_MEDIA_TAILS = false; const IGNORE_ACTIONS = ['messageActionHistoryClear']; @@ -191,6 +192,12 @@ export default class ChatBubbles { /////this.log('message_sent', bubble); + if(message.replies) { + const repliesElement = bubble.querySelector('replies-element') as RepliesElement; + repliesElement.message = message; + repliesElement.init(); + } + if(message.media?.document && !message.media.document.type) { const div = bubble.querySelector(`.document-container[data-mid="${tempId}"] .document`); if(div) { diff --git a/src/components/chat/replies.ts b/src/components/chat/replies.ts index b97aa0df..44f4d726 100644 --- a/src/components/chat/replies.ts +++ b/src/components/chat/replies.ts @@ -48,7 +48,7 @@ export default class RepliesElement extends HTMLElement { if(replies?.recent_repliers) { if(leftPart && !leftPart.classList.contains('replies-footer-avatars')) { - leftPart.remove(); + this.innerHTML = ''; leftPart = null; } @@ -130,7 +130,7 @@ export default class RepliesElement extends HTMLElement { this.innerHTML = `${replies?.replies ? formatNumber(replies.replies, 0) : ''}`; } - if(replies && !this.updated) { + if(replies && !this.updated && !this.message.pFlags.is_outgoing) { appMessagesManager.subscribeRepliesThread(this.message.peerId, this.message.mid); appMessagesManager.updateMessage(this.message.peerId, this.message.mid, 'replies_updated'); this.updated = true; diff --git a/src/layer.d.ts b/src/layer.d.ts index c25e4722..c493823e 100644 --- a/src/layer.d.ts +++ b/src/layer.d.ts @@ -808,6 +808,7 @@ export namespace Message { edit_hide?: true, pinned?: true, unread?: true, + is_outgoing?: true, }>, id: number, from_id?: Peer, @@ -831,7 +832,6 @@ export namespace Message { deleted?: boolean, peerId?: number, fromId?: number, - canBeEdited?: boolean, rReply?: string }; @@ -846,6 +846,7 @@ export namespace Message { post?: true, legacy?: true, unread?: true, + is_outgoing?: true, }>, id: number, from_id?: Peer, @@ -857,7 +858,6 @@ export namespace Message { deleted?: boolean, peerId?: number, fromId?: number, - canBeEdited?: boolean, rReply?: string }; } @@ -3847,160 +3847,138 @@ export namespace MessageEntity { export type messageEntityUnknown = { _: 'messageEntityUnknown', offset: number, - length: number, - nested?: Array + length: number }; export type messageEntityMention = { _: 'messageEntityMention', offset: number, - length: number, - nested?: Array + length: number }; export type messageEntityHashtag = { _: 'messageEntityHashtag', offset: number, - length: number, - nested?: Array + length: number }; export type messageEntityBotCommand = { _: 'messageEntityBotCommand', offset: number, - length: number, - nested?: Array + length: number }; export type messageEntityUrl = { _: 'messageEntityUrl', offset: number, - length: number, - nested?: Array + length: number }; export type messageEntityEmail = { _: 'messageEntityEmail', offset: number, - length: number, - nested?: Array + length: number }; export type messageEntityBold = { _: 'messageEntityBold', offset: number, - length: number, - nested?: Array + length: number }; export type messageEntityItalic = { _: 'messageEntityItalic', offset: number, - length: number, - nested?: Array + length: number }; export type messageEntityCode = { _: 'messageEntityCode', offset: number, - length: number, - nested?: Array + length: number }; export type messageEntityPre = { _: 'messageEntityPre', offset: number, length: number, - language: string, - nested?: Array + language: string }; export type messageEntityTextUrl = { _: 'messageEntityTextUrl', offset: number, length: number, - url: string, - nested?: Array + url: string }; export type messageEntityMentionName = { _: 'messageEntityMentionName', offset: number, length: number, - user_id: number, - nested?: Array + user_id: number }; export type inputMessageEntityMentionName = { _: 'inputMessageEntityMentionName', offset: number, length: number, - user_id: InputUser, - nested?: Array + user_id: InputUser }; export type messageEntityPhone = { _: 'messageEntityPhone', offset: number, - length: number, - nested?: Array + length: number }; export type messageEntityCashtag = { _: 'messageEntityCashtag', offset: number, - length: number, - nested?: Array + length: number }; export type messageEntityUnderline = { _: 'messageEntityUnderline', offset: number, - length: number, - nested?: Array + length: number }; export type messageEntityStrike = { _: 'messageEntityStrike', offset: number, - length: number, - nested?: Array + length: number }; export type messageEntityBlockquote = { _: 'messageEntityBlockquote', offset: number, - length: number, - nested?: Array + length: number }; export type messageEntityBankCard = { _: 'messageEntityBankCard', offset: number, - length: number, - nested?: Array + length: number }; export type messageEntityEmoji = { _: 'messageEntityEmoji', offset?: number, length?: number, - unicode?: string, - nested?: Array + unicode?: string }; export type messageEntityHighlight = { _: 'messageEntityHighlight', offset?: number, - length?: number, - nested?: Array + length?: number }; export type messageEntityLinebreak = { _: 'messageEntityLinebreak', offset?: number, - length?: number, - nested?: Array + length?: number }; } diff --git a/src/lib/richtextprocessor.ts b/src/lib/richtextprocessor.ts index 24951ad9..c7ed7f63 100644 --- a/src/lib/richtextprocessor.ts +++ b/src/lib/richtextprocessor.ts @@ -349,7 +349,6 @@ namespace RichTextProcessor { [_ in MessageEntity['_']]: true }>, - nested?: true, contextHashtag?: string }> = {}) { if(!text || !text.length) { @@ -499,7 +498,6 @@ namespace RichTextProcessor { if(entity._ === 'messageEntityTextUrl') { url = (entity as MessageEntity.messageEntityTextUrl).url; url = wrapUrl(url, true); - //inner = wrapRichNestedText(entityText, entity.nested, options); } else { url = wrapUrl(entityText, false); //inner = encodeEntities(replaceUrlEncodings(entityText)); diff --git a/src/scripts/in/schema_additional_params.json b/src/scripts/in/schema_additional_params.json index d7c7979d..5d0b35e8 100644 --- a/src/scripts/in/schema_additional_params.json +++ b/src/scripts/in/schema_additional_params.json @@ -69,8 +69,8 @@ {"name": "peerId", "type": "number"}, {"name": "fromId", "type": "number"}, {"name": "grouped_id", "type": "string"}, - {"name": "canBeEdited", "type": "boolean"}, {"name": "unread", "type": "true"}, + {"name": "is_outgoing", "type": "true"}, {"name": "rReply", "type": "string"} ] }, { @@ -80,8 +80,8 @@ {"name": "deleted", "type": "boolean"}, {"name": "peerId", "type": "number"}, {"name": "fromId", "type": "number"}, - {"name": "canBeEdited", "type": "boolean"}, {"name": "unread", "type": "true"}, + {"name": "is_outgoing", "type": "true"}, {"name": "rReply", "type": "string"} ] }, { @@ -99,121 +99,23 @@ "params": [ {"name": "offset", "type": "number"}, {"name": "length", "type": "number"}, - {"name": "unicode", "type": "string"}, - {"name": "nested", "type": "Array"} + {"name": "unicode", "type": "string"} ], "type": "MessageEntity" }, { "predicate": "messageEntityHighlight", "params": [ {"name": "offset", "type": "number"}, - {"name": "length", "type": "number"}, - {"name": "nested", "type": "Array"} + {"name": "length", "type": "number"} ], "type": "MessageEntity" }, { "predicate": "messageEntityLinebreak", "params": [ {"name": "offset", "type": "number"}, - {"name": "length", "type": "number"}, - {"name": "nested", "type": "Array"} + {"name": "length", "type": "number"} ], "type": "MessageEntity" -}, { - "predicate": "messageEntityUnknown", - "params": [ - {"name": "nested", "type": "Array"} - ] -}, { - "predicate": "messageEntityMention", - "params": [ - {"name": "nested", "type": "Array"} - ] -}, { - "predicate": "messageEntityHashtag", - "params": [ - {"name": "nested", "type": "Array"} - ] -}, { - "predicate": "messageEntityBotCommand", - "params": [ - {"name": "nested", "type": "Array"} - ] -}, { - "predicate": "messageEntityUrl", - "params": [ - {"name": "nested", "type": "Array"} - ] -}, { - "predicate": "messageEntityEmail", - "params": [ - {"name": "nested", "type": "Array"} - ] -}, { - "predicate": "messageEntityBold", - "params": [ - {"name": "nested", "type": "Array"} - ] -}, { - "predicate": "messageEntityItalic", - "params": [ - {"name": "nested", "type": "Array"} - ] -}, { - "predicate": "messageEntityCode", - "params": [ - {"name": "nested", "type": "Array"} - ] -}, { - "predicate": "messageEntityPre", - "params": [ - {"name": "nested", "type": "Array"} - ] -}, { - "predicate": "messageEntityTextUrl", - "params": [ - {"name": "nested", "type": "Array"} - ] -}, { - "predicate": "messageEntityMentionName", - "params": [ - {"name": "nested", "type": "Array"} - ] -}, { - "predicate": "messageEntityPhone", - "params": [ - {"name": "nested", "type": "Array"} - ] -}, { - "predicate": "messageEntityCashtag", - "params": [ - {"name": "nested", "type": "Array"} - ] -}, { - "predicate": "messageEntityUnderline", - "params": [ - {"name": "nested", "type": "Array"} - ] -}, { - "predicate": "messageEntityStrike", - "params": [ - {"name": "nested", "type": "Array"} - ] -}, { - "predicate": "messageEntityBlockquote", - "params": [ - {"name": "nested", "type": "Array"} - ] -}, { - "predicate": "messageEntityBankCard", - "params": [ - {"name": "nested", "type": "Array"} - ] -}, { - "predicate": "inputMessageEntityMentionName", - "params": [ - {"name": "nested", "type": "Array"} - ] }, { "predicate": "user", "params": [