Don't form continuations on either side of a thread root (#8408)

This commit is contained in:
Michael Telatynski 2022-04-26 09:30:36 +01:00 committed by GitHub
parent f85e178fc1
commit a70f11704f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 7 deletions

View file

@ -92,9 +92,13 @@ export function shouldFormContinuation(
mxEvent.sender.name !== prevEvent.sender.name ||
mxEvent.sender.getMxcAvatarUrl() !== prevEvent.sender.getMxcAvatarUrl()) return false;
// Thread summaries in the main timeline should break up a continuation
if (threadsEnabled && prevEvent.isThreadRoot &&
timelineRenderingType !== TimelineRenderingType.Thread) return false;
// Thread summaries in the main timeline should break up a continuation on both sides
if (threadsEnabled &&
(mxEvent.isThreadRoot || prevEvent.isThreadRoot) &&
timelineRenderingType !== TimelineRenderingType.Thread
) {
return false;
}
// if we don't have tile for previous event then it was shown by showHiddenEvents and has no SenderProfile
if (!haveRendererForEvent(prevEvent, showHiddenEvents)) return false;

View file

@ -674,6 +674,20 @@ describe('MessagePanel', function() {
describe("shouldFormContinuation", () => {
it("does not form continuations from thread roots", () => {
const message1 = TestUtilsMatrix.mkMessage({
event: true,
room: "!room:id",
user: "@user:id",
msg: "Here is a message in the main timeline",
});
const message2 = TestUtilsMatrix.mkMessage({
event: true,
room: "!room:id",
user: "@user:id",
msg: "And here's another message in the main timeline",
});
const threadRoot = TestUtilsMatrix.mkMessage({
event: true,
room: "!room:id",
@ -682,14 +696,15 @@ describe("shouldFormContinuation", () => {
});
jest.spyOn(threadRoot, "isThreadRoot", "get").mockReturnValue(true);
const message = TestUtilsMatrix.mkMessage({
const message3 = TestUtilsMatrix.mkMessage({
event: true,
room: "!room:id",
user: "@user:id",
msg: "And here's another message in the main timeline",
msg: "And here's another message in the main timeline after the thread root",
});
expect(shouldFormContinuation(threadRoot, message, false, true)).toEqual(false);
expect(shouldFormContinuation(message, threadRoot, false, true)).toEqual(true);
expect(shouldFormContinuation(message1, message2, false, true)).toEqual(true);
expect(shouldFormContinuation(message2, threadRoot, false, true)).toEqual(false);
expect(shouldFormContinuation(threadRoot, message3, false, true)).toEqual(false);
});
});