Skip to content
This repository was archived by the owner on Sep 11, 2024. It is now read-only.

Commit b0737b6

Browse files
authored
Throttle RoomState.members handlers (#7876)
1 parent 61b6825 commit b0737b6

File tree

2 files changed

+16
-5
lines changed

2 files changed

+16
-5
lines changed

src/components/structures/MessagePanel.tsx

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import { MatrixEvent } from 'matrix-js-sdk/src/models/event';
2222
import { Relations } from "matrix-js-sdk/src/models/relations";
2323
import { logger } from 'matrix-js-sdk/src/logger';
2424
import { RoomStateEvent } from "matrix-js-sdk/src/models/room-state";
25+
import { throttle } from "lodash";
2526

2627
import shouldHideEvent from '../../shouldHideEvent';
2728
import { wantsDateSeparator } from '../../DateUtils';
@@ -275,13 +276,13 @@ export default class MessagePanel extends React.Component<IProps, IState> {
275276

276277
componentDidMount() {
277278
this.calculateRoomMembersCount();
278-
this.props.room?.currentState.on(RoomStateEvent.Members, this.calculateRoomMembersCount);
279+
this.props.room?.currentState.on(RoomStateEvent.Members, this.onRoomMembers);
279280
this.isMounted = true;
280281
}
281282

282283
componentWillUnmount() {
283284
this.isMounted = false;
284-
this.props.room?.currentState.off(RoomStateEvent.Members, this.calculateRoomMembersCount);
285+
this.props.room?.currentState.off(RoomStateEvent.Members, this.onRoomMembers);
285286
SettingsStore.unwatchSetting(this.showTypingNotificationsWatcherRef);
286287
}
287288

@@ -312,11 +313,16 @@ export default class MessagePanel extends React.Component<IProps, IState> {
312313
return this.props.room?.getInvitedAndJoinedMemberCount() <= 2 && this.props.layout === Layout.Bubble;
313314
}
314315

315-
private calculateRoomMembersCount = (): void => {
316+
private onRoomMembers = (event: MatrixEvent): void => {
317+
if (this.props.room && event.getRoomId() !== this.props.room.roomId) return; // different room
318+
this.calculateRoomMembersCount();
319+
};
320+
321+
private calculateRoomMembersCount = throttle((): void => {
316322
this.setState({
317323
hideSender: this.shouldHideSender(),
318324
});
319-
};
325+
}, 200, { leading: true, trailing: true });
320326

321327
private onShowTypingNotificationsChange = (): void => {
322328
this.setState({

src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import { RoomMember } from "matrix-js-sdk/src/models/room-member";
2020
import { MatrixEvent } from "matrix-js-sdk/src/models/event";
2121
import { RoomState, RoomStateEvent } from "matrix-js-sdk/src/models/room-state";
2222
import { logger } from "matrix-js-sdk/src/logger";
23+
import { throttle } from "lodash";
2324

2425
import { _t, _td } from "../../../../../languageHandler";
2526
import { MatrixClientPeg } from "../../../../../MatrixClientPeg";
@@ -134,9 +135,13 @@ export default class RolesRoomSettingsTab extends React.Component<IProps> {
134135

135136
private onRoomMembership = (event: MatrixEvent, state: RoomState, member: RoomMember) => {
136137
if (state.roomId !== this.props.roomId) return;
137-
this.forceUpdate();
138+
this.onThisRoomMembership();
138139
};
139140

141+
private onThisRoomMembership = throttle(() => {
142+
this.forceUpdate();
143+
}, 200, { leading: true, trailing: true });
144+
140145
private populateDefaultPlEvents(eventsSection: Record<string, number>, stateLevel: number, eventsLevel: number) {
141146
for (const desiredEvent of Object.keys(plEventsToShow)) {
142147
if (!(desiredEvent in eventsSection)) {

0 commit comments

Comments
 (0)