From 03906ed8b1e25c7c9c1c20c11623d59ca680ace7 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 1 Mar 2022 12:54:44 +0000 Subject: [PATCH 1/3] Fix reply with files warning firing wrongly with threads --- src/ContentMessages.tsx | 5 ++--- src/stores/RoomViewStore.tsx | 3 +-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/ContentMessages.tsx b/src/ContentMessages.tsx index 364cd2040cd..ab79440dd35 100644 --- a/src/ContentMessages.tsx +++ b/src/ContentMessages.tsx @@ -31,7 +31,6 @@ import dis from './dispatcher/dispatcher'; import * as sdk from './index'; import { _t } from './languageHandler'; import Modal from './Modal'; -import RoomViewStore from './stores/RoomViewStore'; import Spinner from "./components/views/elements/Spinner"; import { Action } from "./dispatcher/actions"; import { @@ -46,6 +45,7 @@ import { BlurhashEncoder } from "./BlurhashEncoder"; import SettingsStore from "./settings/SettingsStore"; import { decorateStartSendingTime, sendRoundTripMetric } from "./sendTimePerformanceMetrics"; import { TimelineRenderingType } from "./contexts/RoomContext"; +import RoomViewStore from "./stores/RoomViewStore"; const MAX_WIDTH = 800; const MAX_HEIGHT = 600; @@ -456,8 +456,7 @@ export default class ContentMessages { return; } - const isQuoting = Boolean(RoomViewStore.getQuotingEvent()); - if (isQuoting) { + if (context === TimelineRenderingType.Room && RoomViewStore.getQuotingEvent()) { // FIXME: Using an import will result in Element crashing const QuestionDialog = sdk.getComponent("dialogs.QuestionDialog"); const { finished } = Modal.createTrackedDialog<[boolean]>('Upload Reply Warning', '', QuestionDialog, { diff --git a/src/stores/RoomViewStore.tsx b/src/stores/RoomViewStore.tsx index 66d045d11d0..a3d1a96deaf 100644 --- a/src/stores/RoomViewStore.tsx +++ b/src/stores/RoomViewStore.tsx @@ -200,8 +200,7 @@ class RoomViewStore extends Store { // If currently viewed room does not match the room in which we wish to reply then change rooms // this can happen when performing a search across all rooms if (payload.context === TimelineRenderingType.Room) { - if (payload.event - && payload.event.getRoomId() !== this.state.roomId) { + if (payload.event?.getRoomId() !== this.state.roomId) { dis.dispatch({ action: Action.ViewRoom, room_id: payload.event.getRoomId(), From e799a035e87523d716c7230100eb3a44121d188d Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 1 Mar 2022 13:04:00 +0000 Subject: [PATCH 2/3] Strip relations when forwarding --- .../views/dialogs/ForwardDialog.tsx | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/components/views/dialogs/ForwardDialog.tsx b/src/components/views/dialogs/ForwardDialog.tsx index 13cea20be3f..544ee71788a 100644 --- a/src/components/views/dialogs/ForwardDialog.tsx +++ b/src/components/views/dialogs/ForwardDialog.tsx @@ -16,10 +16,12 @@ limitations under the License. import React, { useEffect, useMemo, useState } from "react"; import classnames from "classnames"; -import { MatrixEvent } from "matrix-js-sdk/src/models/event"; +import { IContent, MatrixEvent } from "matrix-js-sdk/src/models/event"; import { Room } from "matrix-js-sdk/src/models/room"; import { MatrixClient } from "matrix-js-sdk/src/client"; import { RoomMember } from "matrix-js-sdk/src/models/room-member"; +import { EventType } from "matrix-js-sdk/src/@types/event"; +import { omit } from "lodash"; import { _t } from "../../../languageHandler"; import dis from "../../../dispatcher/dispatcher"; @@ -62,7 +64,8 @@ interface IProps extends IDialogProps { interface IEntryProps { room: Room; - event: MatrixEvent; + type: EventType | string; + content: IContent; matrixClient: MatrixClient; onFinished(success: boolean): void; } @@ -74,7 +77,7 @@ enum SendState { Failed, } -const Entry: React.FC = ({ room, event, matrixClient: cli, onFinished }) => { +const Entry: React.FC = ({ room, type, content, matrixClient: cli, onFinished }) => { const [sendState, setSendState] = useState(SendState.CanSend); const jumpToRoom = (ev: ButtonEvent) => { @@ -89,7 +92,7 @@ const Entry: React.FC = ({ room, event, matrixClient: cli, onFinish const send = async () => { setSendState(SendState.Sending); try { - await cli.sendEvent(room.roomId, event.getType(), event.getContent()); + await cli.sendEvent(room.roomId, type, content); setSendState(SendState.Sent); } catch (e) { setSendState(SendState.Failed); @@ -163,11 +166,14 @@ const ForwardDialog: React.FC = ({ matrixClient: cli, event, permalinkCr cli.getProfileInfo(userId).then(info => setProfileInfo(info)); }, [cli, userId]); + // strip relations - in future we will attach a relation pointing at the original event + const content = omit(event.getContent(), "m.relates_to"); + // For the message preview we fake the sender as ourselves const mockEvent = new MatrixEvent({ type: "m.room.message", sender: userId, - content: event.getContent(), + content, unsigned: { age: 97, }, @@ -264,7 +270,8 @@ const ForwardDialog: React.FC = ({ matrixClient: cli, event, permalinkCr , From 6061596133093634423301b532f14c8b746210ec Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 1 Mar 2022 13:36:55 +0000 Subject: [PATCH 3/3] Fix issue with forwarded events sharing object refs --- src/components/views/dialogs/ForwardDialog.tsx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/components/views/dialogs/ForwardDialog.tsx b/src/components/views/dialogs/ForwardDialog.tsx index 544ee71788a..6a50031f439 100644 --- a/src/components/views/dialogs/ForwardDialog.tsx +++ b/src/components/views/dialogs/ForwardDialog.tsx @@ -21,7 +21,6 @@ import { Room } from "matrix-js-sdk/src/models/room"; import { MatrixClient } from "matrix-js-sdk/src/client"; import { RoomMember } from "matrix-js-sdk/src/models/room-member"; import { EventType } from "matrix-js-sdk/src/@types/event"; -import { omit } from "lodash"; import { _t } from "../../../languageHandler"; import dis from "../../../dispatcher/dispatcher"; @@ -166,8 +165,12 @@ const ForwardDialog: React.FC = ({ matrixClient: cli, event, permalinkCr cli.getProfileInfo(userId).then(info => setProfileInfo(info)); }, [cli, userId]); - // strip relations - in future we will attach a relation pointing at the original event - const content = omit(event.getContent(), "m.relates_to"); + const { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + "m.relates_to": _, // strip relations - in future we will attach a relation pointing at the original event + // We're taking a shallow copy here to avoid https://github.com/vector-im/element-web/issues/10924 + ...content + } = event.getContent(); // For the message preview we fake the sender as ourselves const mockEvent = new MatrixEvent({