diff --git a/src/components/views/elements/ReplyThread.js b/src/components/views/elements/ReplyThread.js index ab7b1abb1c..d8955a9f28 100644 --- a/src/components/views/elements/ReplyThread.js +++ b/src/components/views/elements/ReplyThread.js @@ -176,6 +176,9 @@ export default class ReplyThread extends React.Component { componentWillMount() { this.unmounted = false; this.room = this.context.matrixClient.getRoom(this.props.parentEv.getRoomId()); + this.room.on("Room.redaction", this.onRoomRedaction); + // same event handler as Room.redaction as for both we just do forceUpdate + this.room.on("Room.redactionCancelled", this.onRoomRedaction); this.initialize(); } @@ -185,8 +188,20 @@ export default class ReplyThread extends React.Component { componentWillUnmount() { this.unmounted = true; + if (this.room) { + this.room.removeListener("Room.redaction", this.onRoomRedaction); + this.room.removeListener("Room.redactionCancelled", this.onRoomRedaction); + } } + onRoomRedaction = (ev, room) => { + if (this.unmounted) return; + + // we could skip an update if the event isn't in our timeline, + // but that's probably an early optimisation. + this.forceUpdate(); + }; + async initialize() { const {parentEv} = this.props; // at time of making this component we checked that props.parentEv has a parentEventId @@ -298,11 +313,13 @@ export default class ReplyThread extends React.Component { return
{ dateSep } - +
; });