diff --git a/src/components/structures/AutoHideScrollbar.tsx b/src/components/structures/AutoHideScrollbar.tsx index 8b923b84af..4f42a79645 100644 --- a/src/components/structures/AutoHideScrollbar.tsx +++ b/src/components/structures/AutoHideScrollbar.tsx @@ -54,6 +54,8 @@ export default class AutoHideScrollbar ex if (this.containerRef.current && this.props.onScroll) { this.containerRef.current.removeEventListener("scroll", this.props.onScroll); } + + this.props.wrappedRef?.(null); } public render(): React.ReactNode { diff --git a/src/components/structures/MessagePanel.tsx b/src/components/structures/MessagePanel.tsx index 56d0db128b..9bb8ced78b 100644 --- a/src/components/structures/MessagePanel.tsx +++ b/src/components/structures/MessagePanel.tsx @@ -220,7 +220,7 @@ export default class MessagePanel extends React.Component { // opaque readreceipt info for each userId; used by ReadReceiptMarker // to manage its animations - private readonly readReceiptMap: { [userId: string]: IReadReceiptInfo } = {}; + private readReceiptMap: { [userId: string]: IReadReceiptInfo } = {}; // Track read receipts by event ID. For each _shown_ event ID, we store // the list of read receipts to display: @@ -301,6 +301,7 @@ export default class MessagePanel extends React.Component { this.isMounted = false; this.props.room?.currentState.off(RoomStateEvent.Update, this.calculateRoomMembersCount); SettingsStore.unwatchSetting(this.showTypingNotificationsWatcherRef); + this.readReceiptMap = {}; } public componentDidUpdate(prevProps: IProps, prevState: IState): void { diff --git a/src/components/structures/ScrollPanel.tsx b/src/components/structures/ScrollPanel.tsx index 5c2edef0ea..8fc232774e 100644 --- a/src/components/structures/ScrollPanel.tsx +++ b/src/components/structures/ScrollPanel.tsx @@ -194,7 +194,7 @@ export default class ScrollPanel extends React.Component { private bottomGrowth: number; private minListHeight: number; private heightUpdateInProgress: boolean; - private divScroll: HTMLDivElement; + private divScroll: HTMLDivElement | null = null; public constructor(props: IProps) { super(props); @@ -226,6 +226,8 @@ export default class ScrollPanel extends React.Component { this.unmounted = true; this.props.resizeNotifier?.removeListener("middlePanelResizedNoisy", this.onResize); + + this.divScroll = null; } private onScroll = (ev: Event): void => { diff --git a/src/components/views/rooms/EventTile.tsx b/src/components/views/rooms/EventTile.tsx index df30602351..38a9f29e84 100644 --- a/src/components/views/rooms/EventTile.tsx +++ b/src/components/views/rooms/EventTile.tsx @@ -250,8 +250,8 @@ interface IState { export class UnwrappedEventTile extends React.Component { private suppressReadReceiptAnimation: boolean; private isListeningForReceipts: boolean; - private tile = React.createRef(); - private replyChain = React.createRef(); + private tile = createRef(); + private replyChain = createRef(); public readonly ref = createRef();