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

Commit f416a97

Browse files
author
Germain
authored
Lazy load thread list timeline set (#8120)
1 parent ebbda28 commit f416a97

File tree

2 files changed

+21
-18
lines changed

2 files changed

+21
-18
lines changed

src/components/structures/RightPanel.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -279,8 +279,6 @@ export default class RightPanel extends React.Component<IProps, IState> {
279279
resizeNotifier={this.props.resizeNotifier}
280280
onClose={this.onClose}
281281
permalinkCreator={this.props.permalinkCreator}
282-
allThreadsTimelineSet={this.props.room.threadsTimelineSets[0]}
283-
myThreadsTimelineSet={this.props.room.threadsTimelineSets[1]}
284282
/>;
285283
break;
286284

src/components/structures/ThreadPanel.tsx

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ limitations under the License.
1717
import React, { useContext, useEffect, useRef, useState } from 'react';
1818
import { EventTimelineSet } from 'matrix-js-sdk/src/models/event-timeline-set';
1919
import { Thread, ThreadEvent } from 'matrix-js-sdk/src/models/thread';
20+
import { Room } from 'matrix-js-sdk/src/models/room';
2021

2122
import BaseCard from "../views/right_panel/BaseCard";
2223
import ResizeNotifier from '../../utils/ResizeNotifier';
@@ -37,8 +38,6 @@ interface IProps {
3738
onClose: () => void;
3839
resizeNotifier: ResizeNotifier;
3940
permalinkCreator: RoomPermalinkCreator;
40-
allThreadsTimelineSet: EventTimelineSet;
41-
myThreadsTimelineSet: EventTimelineSet;
4241
}
4342

4443
export enum ThreadFilterType {
@@ -156,22 +155,24 @@ const ThreadPanel: React.FC<IProps> = ({
156155
roomId,
157156
onClose,
158157
permalinkCreator,
159-
myThreadsTimelineSet,
160-
allThreadsTimelineSet,
161158
}) => {
162159
const mxClient = useContext(MatrixClientContext);
163160
const roomContext = useContext(RoomContext);
164161
const timelinePanel = useRef<TimelinePanel>();
165162
const card = useRef<HTMLDivElement>();
166163

167164
const [filterOption, setFilterOption] = useState<ThreadFilterType>(ThreadFilterType.All);
168-
const [room, setRoom] = useState(mxClient.getRoom(roomId));
165+
const [room, setRoom] = useState<Room | null>(null);
169166
const [threadCount, setThreadCount] = useState<number>(0);
170167
const [timelineSet, setTimelineSet] = useState<EventTimelineSet | null>(null);
171168
const [narrow, setNarrow] = useState<boolean>(false);
172169

173170
useEffect(() => {
174-
setRoom(mxClient.getRoom(roomId));
171+
const room = mxClient.getRoom(roomId);
172+
room.createThreadsTimelineSets().then(() => {
173+
setRoom(room);
174+
setFilterOption(ThreadFilterType.All);
175+
});
175176
}, [mxClient, roomId]);
176177

177178
useEffect(() => {
@@ -183,24 +184,28 @@ const ThreadPanel: React.FC<IProps> = ({
183184
if (timelineSet) timelinePanel.current.refreshTimeline();
184185
}
185186

186-
setThreadCount(room.threads.size);
187+
if (room) {
188+
setThreadCount(room.threads.size);
187189

188-
room.on(ThreadEvent.New, onNewThread);
189-
room.on(ThreadEvent.Update, refreshTimeline);
190+
room.on(ThreadEvent.New, onNewThread);
191+
room.on(ThreadEvent.Update, refreshTimeline);
192+
}
190193

191194
return () => {
192-
room.removeListener(ThreadEvent.New, onNewThread);
193-
room.removeListener(ThreadEvent.Update, refreshTimeline);
195+
room?.removeListener(ThreadEvent.New, onNewThread);
196+
room?.removeListener(ThreadEvent.Update, refreshTimeline);
194197
};
195198
}, [room, mxClient, timelineSet]);
196199

197200
useEffect(() => {
198-
if (filterOption === ThreadFilterType.My) {
199-
setTimelineSet(myThreadsTimelineSet);
200-
} else {
201-
setTimelineSet(allThreadsTimelineSet);
201+
if (room) {
202+
if (filterOption === ThreadFilterType.My) {
203+
setTimelineSet(room.threadsTimelineSets[1]);
204+
} else {
205+
setTimelineSet(room.threadsTimelineSets[0]);
206+
}
202207
}
203-
}, [filterOption, allThreadsTimelineSet, myThreadsTimelineSet]);
208+
}, [room, filterOption]);
204209

205210
useEffect(() => {
206211
if (timelineSet && !Thread.hasServerSideSupport) {

0 commit comments

Comments
 (0)