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

Commit 8b088da

Browse files
author
Germain
authored
Use server capabilities to determine how to build thread list (#7470)
1 parent df6edb0 commit 8b088da

File tree

1 file changed

+22
-22
lines changed

1 file changed

+22
-22
lines changed

src/components/structures/ThreadPanel.tsx

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -43,32 +43,32 @@ async function getThreadTimelineSet(
4343
room: Room,
4444
filterType = ThreadFilterType.All,
4545
): Promise<EventTimelineSet> {
46-
const myUserId = client.getUserId();
47-
const filter = new Filter(myUserId);
46+
const capabilities = await client.getCapabilities();
47+
const serverSupportsThreads = capabilities['io.element.thread']?.enabled;
4848

49-
const definition: IFilterDefinition = {
50-
"room": {
51-
"timeline": {
52-
[UNSTABLE_FILTER_RELATION_TYPES.name]: [RelationType.Thread],
53-
},
54-
},
55-
};
56-
57-
if (filterType === ThreadFilterType.My) {
58-
definition.room.timeline[UNSTABLE_FILTER_RELATION_SENDERS.name] = [myUserId];
59-
}
49+
if (serverSupportsThreads) {
50+
const myUserId = client.getUserId();
51+
const filter = new Filter(myUserId);
6052

61-
filter.setDefinition(definition);
53+
const definition: IFilterDefinition = {
54+
"room": {
55+
"timeline": {
56+
[UNSTABLE_FILTER_RELATION_TYPES.name]: [RelationType.Thread],
57+
},
58+
},
59+
};
6260

63-
let timelineSet;
61+
if (filterType === ThreadFilterType.My) {
62+
definition.room.timeline[UNSTABLE_FILTER_RELATION_SENDERS.name] = [myUserId];
63+
}
6464

65-
try {
65+
filter.setDefinition(definition);
6666
const filterId = await client.getOrCreateFilter(
6767
`THREAD_PANEL_${room.roomId}_${filterType}`,
6868
filter,
6969
);
7070
filter.filterId = filterId;
71-
timelineSet = room.getOrCreateFilteredTimelineSet(
71+
const timelineSet = room.getOrCreateFilteredTimelineSet(
7272
filter,
7373
{ prepopulateTimeline: false },
7474
);
@@ -78,20 +78,20 @@ async function getThreadTimelineSet(
7878
timelineSet.getLiveTimeline(),
7979
{ backwards: true, limit: 20 },
8080
);
81-
} catch (e) {
81+
return timelineSet;
82+
} else {
8283
// Filter creation fails if HomeServer does not support the new relation
8384
// filter fields. We fallback to the threads that have been discovered in
8485
// the main timeline
85-
timelineSet = new EventTimelineSet(room, {});
86+
const timelineSet = new EventTimelineSet(room, {});
8687
for (const [, thread] of room.threads) {
8788
const isOwnEvent = thread.rootEvent.getSender() === client.getUserId();
8889
if (filterType !== ThreadFilterType.My || isOwnEvent) {
89-
timelineSet.getLiveTimeline().addEvent(thread.rootEvent);
90+
timelineSet.getLiveTimeline().addEvent(thread.rootEvent, false);
9091
}
9192
}
93+
return timelineSet;
9294
}
93-
94-
return timelineSet;
9595
}
9696

9797
interface IProps {

0 commit comments

Comments
 (0)