From 8f68a43ee301801e45d71b6578cb7d0586e1a09c Mon Sep 17 00:00:00 2001 From: Robin Date: Wed, 2 Mar 2022 12:21:23 -0500 Subject: [PATCH] Make pinned messages more reliably reflect edits (#7920) * Inject edits from /relations API into pinned messages Signed-off-by: Robin Townsend * Limit returned relations, because we only need one Signed-off-by: Robin Townsend * Fetch pinned message edits in parallel Signed-off-by: Robin Townsend --- .../views/right_panel/PinnedMessagesCard.tsx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/components/views/right_panel/PinnedMessagesCard.tsx b/src/components/views/right_panel/PinnedMessagesCard.tsx index 7e4bc3a7ae..d6a5139b5e 100644 --- a/src/components/views/right_panel/PinnedMessagesCard.tsx +++ b/src/components/views/right_panel/PinnedMessagesCard.tsx @@ -17,7 +17,7 @@ limitations under the License. import React, { useCallback, useContext, useEffect, useState } from "react"; import { Room, RoomEvent } from "matrix-js-sdk/src/models/room"; import { MatrixEvent } from "matrix-js-sdk/src/models/event"; -import { EventType } from 'matrix-js-sdk/src/@types/event'; +import { EventType, RelationType } from 'matrix-js-sdk/src/@types/event'; import { logger } from "matrix-js-sdk/src/logger"; import { RoomStateEvent } from "matrix-js-sdk/src/models/room-state"; @@ -102,14 +102,22 @@ const PinnedMessagesCard = ({ room, onClose }: IProps) => { if (localEvent) return localEvent; try { - const evJson = await cli.fetchRoomEvent(room.roomId, eventId); + // Fetch the event and latest edit in parallel + const [evJson, { events: [edit] }] = await Promise.all([ + cli.fetchRoomEvent(room.roomId, eventId), + cli.relations(room.roomId, eventId, RelationType.Replace, null, { limit: 1 }), + ]); const event = new MatrixEvent(evJson); if (event.isEncrypted()) { await cli.decryptEventIfNeeded(event); // TODO await? } + if (event && PinningUtils.isPinnable(event)) { // Inject sender information event.sender = room.getMember(event.getSender()); + // Also inject any edits we've found + if (edit) event.makeReplaced(edit); + return event; } } catch (err) {