You've already forked matrix-react-sdk
mirror of
https://github.com/matrix-org/matrix-react-sdk.git
synced 2025-12-10 05:42:29 +03:00
Add new threads to the panel as they are discovered (#7688)
This commit is contained in:
@@ -25,7 +25,7 @@ import {
|
|||||||
UNSTABLE_FILTER_RELATION_SENDERS,
|
UNSTABLE_FILTER_RELATION_SENDERS,
|
||||||
UNSTABLE_FILTER_RELATION_TYPES,
|
UNSTABLE_FILTER_RELATION_TYPES,
|
||||||
} from 'matrix-js-sdk/src/filter';
|
} from 'matrix-js-sdk/src/filter';
|
||||||
import { ThreadEvent } from 'matrix-js-sdk/src/models/thread';
|
import { Thread, ThreadEvent } from 'matrix-js-sdk/src/models/thread';
|
||||||
|
|
||||||
import BaseCard from "../views/right_panel/BaseCard";
|
import BaseCard from "../views/right_panel/BaseCard";
|
||||||
import ResizeNotifier from '../../utils/ResizeNotifier';
|
import ResizeNotifier from '../../utils/ResizeNotifier';
|
||||||
@@ -231,6 +231,35 @@ const ThreadPanel: React.FC<IProps> = ({ roomId, onClose, permalinkCreator }) =>
|
|||||||
if (timelineSet) ref.current.refreshTimeline();
|
if (timelineSet) ref.current.refreshTimeline();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
useEventEmitter(room, ThreadEvent.New, async (thread: Thread) => {
|
||||||
|
if (timelineSet) {
|
||||||
|
const capabilities = await mxClient.getCapabilities();
|
||||||
|
const serverSupportsThreads = capabilities['io.element.thread']?.enabled;
|
||||||
|
|
||||||
|
const discoveredScrollingBack = room.lastThread.rootEvent.localTimestamp < thread.rootEvent.localTimestamp;
|
||||||
|
|
||||||
|
// When the server support threads we're only interested in adding
|
||||||
|
// the newly created threads to the list.
|
||||||
|
// The ones discovered when scrolling back should be discarded as
|
||||||
|
// they will be discovered by the `/messages` filter
|
||||||
|
if (serverSupportsThreads) {
|
||||||
|
if (!discoveredScrollingBack) {
|
||||||
|
timelineSet.addEventToTimeline(
|
||||||
|
thread.rootEvent,
|
||||||
|
timelineSet.getLiveTimeline(),
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
timelineSet.addEventToTimeline(
|
||||||
|
thread.rootEvent,
|
||||||
|
timelineSet.getLiveTimeline(),
|
||||||
|
!discoveredScrollingBack,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<RoomContext.Provider value={{
|
<RoomContext.Provider value={{
|
||||||
...roomContext,
|
...roomContext,
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ exports[`PollCreateDialog renders a blank poll 1`] = `
|
|||||||
"filteredTimelineSets": Object {},
|
"filteredTimelineSets": Object {},
|
||||||
"getTypeWarning": false,
|
"getTypeWarning": false,
|
||||||
"getVersionWarning": false,
|
"getVersionWarning": false,
|
||||||
|
"lastThread": undefined,
|
||||||
"membersPromise": Promise {},
|
"membersPromise": Promise {},
|
||||||
"myUserId": "@name:example.com",
|
"myUserId": "@name:example.com",
|
||||||
"name": "roomid",
|
"name": "roomid",
|
||||||
@@ -256,6 +257,7 @@ exports[`PollCreateDialog renders a blank poll 1`] = `
|
|||||||
"filteredTimelineSets": Object {},
|
"filteredTimelineSets": Object {},
|
||||||
"getTypeWarning": false,
|
"getTypeWarning": false,
|
||||||
"getVersionWarning": false,
|
"getVersionWarning": false,
|
||||||
|
"lastThread": undefined,
|
||||||
"membersPromise": Promise {},
|
"membersPromise": Promise {},
|
||||||
"myUserId": "@name:example.com",
|
"myUserId": "@name:example.com",
|
||||||
"name": "roomid",
|
"name": "roomid",
|
||||||
@@ -1157,6 +1159,7 @@ exports[`PollCreateDialog renders a question and some options 1`] = `
|
|||||||
"filteredTimelineSets": Object {},
|
"filteredTimelineSets": Object {},
|
||||||
"getTypeWarning": false,
|
"getTypeWarning": false,
|
||||||
"getVersionWarning": false,
|
"getVersionWarning": false,
|
||||||
|
"lastThread": undefined,
|
||||||
"membersPromise": Promise {},
|
"membersPromise": Promise {},
|
||||||
"myUserId": "@name:example.com",
|
"myUserId": "@name:example.com",
|
||||||
"name": "roomid",
|
"name": "roomid",
|
||||||
@@ -1377,6 +1380,7 @@ exports[`PollCreateDialog renders a question and some options 1`] = `
|
|||||||
"filteredTimelineSets": Object {},
|
"filteredTimelineSets": Object {},
|
||||||
"getTypeWarning": false,
|
"getTypeWarning": false,
|
||||||
"getVersionWarning": false,
|
"getVersionWarning": false,
|
||||||
|
"lastThread": undefined,
|
||||||
"membersPromise": Promise {},
|
"membersPromise": Promise {},
|
||||||
"myUserId": "@name:example.com",
|
"myUserId": "@name:example.com",
|
||||||
"name": "roomid",
|
"name": "roomid",
|
||||||
|
|||||||
Reference in New Issue
Block a user