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()
);
};