Fix sending localEvent id to redact and reply (#231)
authorajbura <ajbura@gmail.com>
Sat, 5 Feb 2022 12:23:02 +0000 (17:53 +0530)
committerajbura <ajbura@gmail.com>
Sat, 5 Feb 2022 12:23:02 +0000 (17:53 +0530)
Signed-off-by: ajbura <ajbura@gmail.com>
src/app/molecules/message/Message.jsx

index 319e9c86f3f85275235e4cd7fa1383b670077ea9..488ad4ba846cad697734b2d8dcf0f7c5af7dd8af 100644 (file)
@@ -114,22 +114,31 @@ const MessageReplyWrapper = React.memo(({ roomTimeline, eventId }) => {
     const mx = initMatrix.matrixClient;
     const timelineSet = roomTimeline.getUnfilteredTimelineSet();
     const loadReply = async () => {
-      const eTimeline = await mx.getEventTimeline(timelineSet, eventId);
-      await roomTimeline.decryptAllEventsOfTimeline(eTimeline);
-
-      const mEvent = eTimeline.getTimelineSet().findEventById(eventId);
-
-      const rawBody = mEvent.getContent().body;
-      const username = getUsernameOfRoomMember(mEvent.sender);
-
-      if (isMountedRef.current === false) return;
-      const fallbackBody = mEvent.isRedacted() ? '*** This message has been deleted ***' : '*** Unable to load reply content ***';
-      setReply({
-        to: username,
-        color: colorMXID(mEvent.getSender()),
-        body: parseReply(rawBody)?.body ?? rawBody ?? fallbackBody,
-        event: mEvent,
-      });
+      try {
+        const eTimeline = await mx.getEventTimeline(timelineSet, eventId);
+        await roomTimeline.decryptAllEventsOfTimeline(eTimeline);
+
+        const mEvent = eTimeline.getTimelineSet().findEventById(eventId);
+
+        const rawBody = mEvent.getContent().body;
+        const username = getUsernameOfRoomMember(mEvent.sender);
+
+        if (isMountedRef.current === false) return;
+        const fallbackBody = mEvent.isRedacted() ? '*** This message has been deleted ***' : '*** Unable to load reply ***';
+        setReply({
+          to: username,
+          color: colorMXID(mEvent.getSender()),
+          body: parseReply(rawBody)?.body ?? rawBody ?? fallbackBody,
+          event: mEvent,
+        });
+      } catch {
+        setReply({
+          to: '** Unknown user **',
+          color: 'var(--tc-danger-normal)',
+          body: '*** Unable to load reply ***',
+          event: null,
+        });
+      }
     };
     loadReply();
 
@@ -139,6 +148,7 @@ const MessageReplyWrapper = React.memo(({ roomTimeline, eventId }) => {
   }, []);
 
   const focusReply = () => {
+    if (reply?.event === null) return;
     if (reply?.event.isRedacted()) return;
     roomTimeline.loadEventTimeline(eventId);
   };
@@ -357,13 +367,12 @@ MessageReaction.propTypes = {
 
 function MessageReactionGroup({ roomTimeline, mEvent }) {
   const { roomId, room, reactionTimeline } = roomTimeline;
-  const eventId = mEvent.getId();
   const mx = initMatrix.matrixClient;
   const reactions = {};
   const shortcodeToEmoji = getShortcodeToCustomEmoji(room);
   const canSendReaction = room.currentState.maySendEvent('m.reaction', mx.getUserId());
 
-  const eventReactions = reactionTimeline.get(eventId);
+  const eventReactions = reactionTimeline.get(mEvent.getId());
   const addReaction = (key, count, senderId, isActive) => {
     let reaction = reactions[key];
     if (reaction === undefined) {
@@ -414,7 +423,7 @@ function MessageReactionGroup({ roomTimeline, mEvent }) {
             users={reactions[key].users}
             isActive={reactions[key].isActive}
             onClick={() => {
-              toggleEmoji(roomId, eventId, key, roomTimeline);
+              toggleEmoji(roomId, mEvent.getId(), key, roomTimeline);
             }}
           />
         ))
@@ -422,7 +431,7 @@ function MessageReactionGroup({ roomTimeline, mEvent }) {
       {canSendReaction && (
         <IconButton
           onClick={(e) => {
-            pickEmoji(e, roomId, eventId, roomTimeline);
+            pickEmoji(e, roomId, mEvent.getId(), roomTimeline);
           }}
           src={EmojiAddIC}
           size="extra-small"
@@ -452,7 +461,6 @@ const MessageOptions = React.memo(({
 }) => {
   const { roomId, room } = roomTimeline;
   const mx = initMatrix.matrixClient;
-  const eventId = mEvent.getId();
   const senderId = mEvent.getSender();
 
   const myPowerlevel = room.getMember(mx.getUserId())?.powerLevel;
@@ -463,7 +471,7 @@ const MessageOptions = React.memo(({
     <div className="message__options">
       {canSendReaction && (
         <IconButton
-          onClick={(e) => pickEmoji(e, roomId, eventId, roomTimeline)}
+          onClick={(e) => pickEmoji(e, roomId, mEvent.getId(), roomTimeline)}
           src={EmojiAddIC}
           size="extra-small"
           tooltip="Add reaction"
@@ -501,7 +509,7 @@ const MessageOptions = React.memo(({
                   iconSrc={BinIC}
                   onClick={() => {
                     if (window.confirm('Are you sure you want to delete this event')) {
-                      redactEvent(roomId, eventId);
+                      redactEvent(roomId, mEvent.getId());
                     }
                   }}
                 >
@@ -631,7 +639,7 @@ function Message({
     setIsEditing(true);
   }, []);
   const reply = useCallback(() => {
-    replyTo(senderId, eventId, body);
+    replyTo(senderId, mEvent.getId(), body);
   }, [body]);
 
   if (body === undefined) return null;