From 16d2a7f2c523566b92d1b89f6c2cefc46d95bf17 Mon Sep 17 00:00:00 2001 From: Bob <160986752+bob2402@users.noreply.github.com> Date: Fri, 22 Mar 2024 12:01:41 +0800 Subject: [PATCH] render marked "e" tags (#434) --- app/UI/message-list.tsx | 54 ++++++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 25 deletions(-) diff --git a/app/UI/message-list.tsx b/app/UI/message-list.tsx index 9a95ec9..dfbebf3 100644 --- a/app/UI/message-list.tsx +++ b/app/UI/message-list.tsx @@ -81,8 +81,7 @@ export class MessageList extends Component { const sameAuthor = pre.event.pubkey == cur.event.pubkey; const _66sec = Math.abs(cur.created_at.getTime() - pre.created_at.getTime()) < 1000 * 60; - const is_not_reply = cur.event.parsedTags.e.length === 0; // todo: make a isReply(event) function - return sameAuthor && _66sec && is_not_reply; + return sameAuthor && _66sec && !isReply(cur.event); }); const messageBoxGroups = []; for (const messages of groups) { @@ -285,28 +284,6 @@ function MessageBoxGroup(props: { const first_message = props.messages[0]; const rows = []; - // check if the first message is a reply message - function isReply(event: Parsed_Event) { - if (event.parsedTags.e.length == 0) { - return; - } - const reply_to_event = props.getters.getEventByID(event.parsedTags.e[0]); - if (!reply_to_event) { - return ; - } - let author = reply_to_event.publicKey.bech32(); - let picture = robohash(reply_to_event.publicKey.hex); - if (reply_to_event.pubkey) { - const profile = props.getters.profileGetter.getProfilesByPublicKey(reply_to_event.publicKey); - if (profile) { - author = profile.profile.name || profile.profile.display_name || - reply_to_event?.publicKey.bech32(); - picture = profile.profile.picture || robohash(reply_to_event.publicKey.hex); - } - } - return ; - } - rows.push(
  • {MessageActions(first_message, props.emit)} - {isReply(first_message.event)} + {renderRelply(first_message.event, props.getters)}
    (array: Array): T | undefined { } } +function isReply(event: Parsed_Event) { + return event.parsedTags.reply || event.parsedTags.root || event.parsedTags.e.length != 0; +} + +function renderRelply(event: Parsed_Event, getters: { + getEventByID: func_GetEventByID; + profileGetter: ProfileGetter; +}) { + if (!isReply(event)) return; + const replyEventId = event.parsedTags.reply?.[0] || event.parsedTags.root?.[0] || event.parsedTags.e[0]; + const reply_to_event = getters.getEventByID(replyEventId); + if (!reply_to_event) { + return ; + } + let author = reply_to_event.publicKey.bech32(); + let picture = robohash(reply_to_event.publicKey.hex); + if (reply_to_event.pubkey) { + const profile = getters.profileGetter.getProfilesByPublicKey(reply_to_event.publicKey); + if (profile) { + author = profile.profile.name || profile.profile.display_name || + reply_to_event?.publicKey.bech32(); + picture = profile.profile.picture || robohash(reply_to_event.publicKey.hex); + } + } + return ; +} + function ReplyTo( props: { unknown?: false; content: string; replyName: string; replayPic: string } | { unknown: true;