From 8cd805ad231761c99f916f98686794809ed78e32 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Mon, 21 Mar 2022 14:01:06 +0000 Subject: [PATCH] Don't restore MemberInfo from RightPanel history when viewing a room (#8090) As bringing up a specific MemberInfo when you view a room is freaky, even if it happened to be the last thing you were doing in that room. Fixes https://github.com/vector-im/element-web/issues/21487 --- src/stores/right-panel/RightPanelStore.ts | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/stores/right-panel/RightPanelStore.ts b/src/stores/right-panel/RightPanelStore.ts index 3ea50ec0bb..ffac86139a 100644 --- a/src/stores/right-panel/RightPanelStore.ts +++ b/src/stores/right-panel/RightPanelStore.ts @@ -159,7 +159,7 @@ export default class RightPanelStore extends ReadyWatchingStore { if (!this.isPhaseValid(targetPhase)) return; if ((targetPhase === this.currentCardForRoom(rId)?.phase && !!cardState)) { - // Update state: set right panel with a new state but keep the phase (dont know it this is ever needed...) + // Update state: set right panel with a new state but keep the phase (don't know it this is ever needed...) const hist = this.byRoom[rId]?.history ?? []; hist[hist.length - 1].state = cardState; this.emitAndUpdateSettings(); @@ -367,6 +367,7 @@ export default class RightPanelStore extends ReadyWatchingStore { } private onVerificationRequestUpdate = () => { + if (!this.currentCard?.state) return; const { member } = this.currentCard.state; if (!member) return; const pendingRequest = pendingVerificationRequestForUser(member); @@ -378,9 +379,25 @@ export default class RightPanelStore extends ReadyWatchingStore { private onRoomViewStoreUpdate = () => { // TODO: only use this function instead of the onDispatch (the whole onDispatch can get removed!) as soon groups are removed + const oldRoomId = this.viewedRoomId; this.viewedRoomId = RoomViewStore.getRoomId(); // load values from byRoomCache with the viewedRoomId. this.loadCacheFromSettings(); + + // if we're switching to a room, clear out any stale MemberInfo cards + // in order to fix https://github.com/vector-im/element-web/issues/21487 + if (oldRoomId !== this.viewedRoomId) { + if (this.currentCard?.phase !== RightPanelPhases.EncryptionPanel) { + const panel = this.byRoom[this.viewedRoomId]; + if (panel?.history) { + panel.history = panel.history.filter( + (card) => card.phase != RightPanelPhases.RoomMemberInfo && + card.phase != RightPanelPhases.Room3pidMemberInfo, + ); + } + } + } + // If the right panel stays open mode is used, and the panel was either // closed or never shown for that room, then force it open and display // the room member list.