From cebd65b60f64ddaeb980d5f4610eec232590c32d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Wed, 11 May 2022 16:51:36 +0200 Subject: [PATCH] Throttle `recheckFirstVisibleEventIndex()` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- src/components/structures/TimelinePanel.tsx | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/components/structures/TimelinePanel.tsx b/src/components/structures/TimelinePanel.tsx index 2273fdd6d8d..f53177bf5d7 100644 --- a/src/components/structures/TimelinePanel.tsx +++ b/src/components/structures/TimelinePanel.tsx @@ -24,7 +24,7 @@ import { TimelineWindow } from "matrix-js-sdk/src/timeline-window"; import { EventType, RelationType } from 'matrix-js-sdk/src/@types/event'; import { SyncState } from 'matrix-js-sdk/src/sync'; import { RoomMember, RoomMemberEvent } from 'matrix-js-sdk/src/models/room-member'; -import { debounce } from 'lodash'; +import { debounce, throttle } from 'lodash'; import { logger } from "matrix-js-sdk/src/logger"; import { ClientEvent } from "matrix-js-sdk/src/client"; import { Thread } from 'matrix-js-sdk/src/models/thread'; @@ -810,10 +810,13 @@ class TimelinePanel extends React.Component { if (!this.state.events.includes(ev)) return; - const firstVisibleEventIndex = this.checkForPreJoinUISI(this.state.events); - if (firstVisibleEventIndex !== this.state.firstVisibleEventIndex) { - this.setState({ firstVisibleEventIndex }); - } + const recheckFirstVisibleEventIndex = throttle(() => { + const firstVisibleEventIndex = this.checkForPreJoinUISI(this.state.events); + if (firstVisibleEventIndex !== this.state.firstVisibleEventIndex) { + this.setState({ firstVisibleEventIndex }); + } + }, 500, { leading: true, trailing: true }); + recheckFirstVisibleEventIndex(); // Need to update as we don't display event tiles for events that // haven't yet been decrypted. The event will have just been updated