From 810cbb5fe5c75dc7ed4e8bf439f8a1fa2f48082a Mon Sep 17 00:00:00 2001 From: Alvaro <110414366+alvaro-signal@users.noreply.github.com> Date: Thu, 10 Nov 2022 13:59:48 -0700 Subject: [PATCH] Implemented group story reaction delete/DOE --- ts/components/StoryViewsNRepliesModal.tsx | 149 ++++++++++------------ 1 file changed, 67 insertions(+), 82 deletions(-) diff --git a/ts/components/StoryViewsNRepliesModal.tsx b/ts/components/StoryViewsNRepliesModal.tsx index bbc050382..e1cc1e376 100644 --- a/ts/components/StoryViewsNRepliesModal.tsx +++ b/ts/components/StoryViewsNRepliesModal.tsx @@ -306,6 +306,14 @@ export const StoryViewsNRepliesModal = ({ let repliesElement: JSX.Element | undefined; + function shouldCollapse(reply: ReplyType, otherReply?: ReplyType) { + // deleted reactions get rendered the same as deleted replies + return ( + reply.conversationId === otherReply?.conversationId && + (!otherReply?.reactionEmoji || Boolean(otherReply.deletedForEveryone)) + ); + } + if (replies.length) { repliesElement = (
{replies.map((reply, index) => { - return reply.reactionEmoji ? ( - - ) : ( - setDeleteReplyId(reply.id)} deleteGroupStoryReplyForEveryone={() => setDeleteForEveryoneReplyId(reply.id) } getPreferredBadge={getPreferredBadge} - shouldCollapseAbove={ - reply.conversationId === replies[index - 1]?.conversationId && - !replies[index - 1]?.reactionEmoji - } - shouldCollapseBelow={ - reply.conversationId === replies[index + 1]?.conversationId && - !replies[index + 1]?.reactionEmoji - } + shouldCollapseAbove={shouldCollapse(reply, replies[index - 1])} + shouldCollapseBelow={shouldCollapse(reply, replies[index + 1])} + containerElementRef={containerElementRef} /> ); })} @@ -505,59 +499,7 @@ export const StoryViewsNRepliesModal = ({ ); }; -type ReactionProps = { - i18n: LocalizerType; - reply: ReplyType; - reactionEmoji: string; - getPreferredBadge: PreferredBadgeSelectorType; -}; - -const Reaction = ({ - i18n, - reply, - reactionEmoji, - getPreferredBadge, -}: ReactionProps): JSX.Element => { - // TODO: DESKTOP-4503 - reactions delete/doe - return ( -
-
- -
-
- -
- {i18n('StoryViewsNRepliesModal__reacted')} - -
-
- -
- ); -}; - -type ReplyProps = { +type ReplyOrReactionMessageProps = { i18n: LocalizerType; reply: ReplyType; deleteGroupStoryReply: (replyId: string) => void; @@ -566,20 +508,63 @@ type ReplyProps = { shouldCollapseAbove: boolean; shouldCollapseBelow: boolean; containerElementRef: React.RefObject; + onContextMenu?: (ev: React.MouseEvent) => void; }; -const Reply = ({ +const ReplyOrReactionMessage = ({ i18n, reply, deleteGroupStoryReply, deleteGroupStoryReplyForEveryone, + containerElementRef, getPreferredBadge, shouldCollapseAbove, shouldCollapseBelow, - containerElementRef, -}: ReplyProps): JSX.Element => { - const renderMessage = (onContextMenu?: (ev: React.MouseEvent) => void) => ( -
+}: ReplyOrReactionMessageProps) => { + const renderContent = (onContextMenu?: (ev: React.MouseEvent) => void) => { + if (reply.reactionEmoji && !reply.deletedForEveryone) { + return ( +
+
+ +
+
+ +
+ {i18n('StoryViewsNRepliesModal__reacted')} + +
+
+ +
+ ); + } + + return ( -
- ); + ); + }; - return reply.author.isMe ? ( + return reply.author.isMe && !reply.deletedForEveryone ? ( {({ openMenu, menuNode }) => ( <> - {renderMessage(openMenu)} + {renderContent(openMenu)} {menuNode} )} ) : ( - renderMessage() + renderContent() ); };