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();
}, []);
const focusReply = () => {
+ if (reply?.event === null) return;
if (reply?.event.isRedacted()) return;
roomTimeline.loadEventTimeline(eventId);
};
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) {
users={reactions[key].users}
isActive={reactions[key].isActive}
onClick={() => {
- toggleEmoji(roomId, eventId, key, roomTimeline);
+ toggleEmoji(roomId, mEvent.getId(), key, roomTimeline);
}}
/>
))
{canSendReaction && (
<IconButton
onClick={(e) => {
- pickEmoji(e, roomId, eventId, roomTimeline);
+ pickEmoji(e, roomId, mEvent.getId(), roomTimeline);
}}
src={EmojiAddIC}
size="extra-small"
}) => {
const { roomId, room } = roomTimeline;
const mx = initMatrix.matrixClient;
- const eventId = mEvent.getId();
const senderId = mEvent.getSender();
const myPowerlevel = room.getMember(mx.getUserId())?.powerLevel;
<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"
iconSrc={BinIC}
onClick={() => {
if (window.confirm('Are you sure you want to delete this event')) {
- redactEvent(roomId, eventId);
+ redactEvent(roomId, mEvent.getId());
}
}}
>
setIsEditing(true);
}, []);
const reply = useCallback(() => {
- replyTo(senderId, eventId, body);
+ replyTo(senderId, mEvent.getId(), body);
}, [body]);
if (body === undefined) return null;