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

Commit 5973d72

Browse files
author
Germain
authored
Add new threads to the panel as they are discovered (#7688)
1 parent afe6021 commit 5973d72

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

src/components/structures/ThreadPanel.tsx

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import {
2525
UNSTABLE_FILTER_RELATION_SENDERS,
2626
UNSTABLE_FILTER_RELATION_TYPES,
2727
} from 'matrix-js-sdk/src/filter';
28-
import { ThreadEvent } from 'matrix-js-sdk/src/models/thread';
28+
import { Thread, ThreadEvent } from 'matrix-js-sdk/src/models/thread';
2929

3030
import BaseCard from "../views/right_panel/BaseCard";
3131
import ResizeNotifier from '../../utils/ResizeNotifier';
@@ -231,6 +231,35 @@ const ThreadPanel: React.FC<IProps> = ({ roomId, onClose, permalinkCreator }) =>
231231
if (timelineSet) ref.current.refreshTimeline();
232232
});
233233

234+
useEventEmitter(room, ThreadEvent.New, async (thread: Thread) => {
235+
if (timelineSet) {
236+
const capabilities = await mxClient.getCapabilities();
237+
const serverSupportsThreads = capabilities['io.element.thread']?.enabled;
238+
239+
const discoveredScrollingBack = room.lastThread.rootEvent.localTimestamp < thread.rootEvent.localTimestamp;
240+
241+
// When the server support threads we're only interested in adding
242+
// the newly created threads to the list.
243+
// The ones discovered when scrolling back should be discarded as
244+
// they will be discovered by the `/messages` filter
245+
if (serverSupportsThreads) {
246+
if (!discoveredScrollingBack) {
247+
timelineSet.addEventToTimeline(
248+
thread.rootEvent,
249+
timelineSet.getLiveTimeline(),
250+
false,
251+
);
252+
}
253+
} else {
254+
timelineSet.addEventToTimeline(
255+
thread.rootEvent,
256+
timelineSet.getLiveTimeline(),
257+
!discoveredScrollingBack,
258+
);
259+
}
260+
}
261+
});
262+
234263
return (
235264
<RoomContext.Provider value={{
236265
...roomContext,

test/components/views/elements/__snapshots__/PollCreateDialog-test.tsx.snap

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ exports[`PollCreateDialog renders a blank poll 1`] = `
3636
"filteredTimelineSets": Object {},
3737
"getTypeWarning": false,
3838
"getVersionWarning": false,
39+
"lastThread": undefined,
3940
"membersPromise": Promise {},
4041
"myUserId": "@name:example.com",
4142
"name": "roomid",
@@ -256,6 +257,7 @@ exports[`PollCreateDialog renders a blank poll 1`] = `
256257
"filteredTimelineSets": Object {},
257258
"getTypeWarning": false,
258259
"getVersionWarning": false,
260+
"lastThread": undefined,
259261
"membersPromise": Promise {},
260262
"myUserId": "@name:example.com",
261263
"name": "roomid",
@@ -1157,6 +1159,7 @@ exports[`PollCreateDialog renders a question and some options 1`] = `
11571159
"filteredTimelineSets": Object {},
11581160
"getTypeWarning": false,
11591161
"getVersionWarning": false,
1162+
"lastThread": undefined,
11601163
"membersPromise": Promise {},
11611164
"myUserId": "@name:example.com",
11621165
"name": "roomid",
@@ -1377,6 +1380,7 @@ exports[`PollCreateDialog renders a question and some options 1`] = `
13771380
"filteredTimelineSets": Object {},
13781381
"getTypeWarning": false,
13791382
"getVersionWarning": false,
1383+
"lastThread": undefined,
13801384
"membersPromise": Promise {},
13811385
"myUserId": "@name:example.com",
13821386
"name": "roomid",

0 commit comments

Comments
 (0)