From 6f03584ffe33a5cdfbddbd31d4bc477d9683e621 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 20 Sep 2022 17:24:10 +0100 Subject: [PATCH 1/3] Fix soft crash around unknown room pills --- src/editor/parts.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/editor/parts.ts b/src/editor/parts.ts index 8d98c398b54..74447e63fbd 100644 --- a/src/editor/parts.ts +++ b/src/editor/parts.ts @@ -411,7 +411,7 @@ export class EmojiPart extends BasePart implements IBasePart { } class RoomPillPart extends PillPart { - constructor(resourceId: string, label: string, private room: Room) { + constructor(resourceId: string, label: string, private room?: Room) { super(resourceId, label); } @@ -419,8 +419,8 @@ class RoomPillPart extends PillPart { let initialLetter = ""; let avatarUrl = Avatar.avatarUrlForRoom(this.room, 16, 16, "crop"); if (!avatarUrl) { - initialLetter = Avatar.getInitialLetter(this.room ? this.room.name : this.resourceId); - avatarUrl = Avatar.defaultAvatarUrlForString(this.room ? this.room.roomId : this.resourceId); + initialLetter = Avatar.getInitialLetter(this.room?.name || this.resourceId); + avatarUrl = Avatar.defaultAvatarUrlForString(this.room?.roomId ?? this.resourceId); } this.setAvatarVars(node, avatarUrl, initialLetter); } @@ -430,7 +430,7 @@ class RoomPillPart extends PillPart { } protected get className() { - return "mx_Pill " + (this.room.isSpaceRoom() ? "mx_SpacePill" : "mx_RoomPill"); + return "mx_Pill " + (this.room?.isSpaceRoom() ? "mx_SpacePill" : "mx_RoomPill"); } } @@ -610,7 +610,7 @@ export class PartCreator { } public roomPill(alias: string, roomId?: string): RoomPillPart { - let room; + let room: Room; if (roomId || alias[0] !== "#") { room = this.client.getRoom(roomId || alias); } else { From 7619b9a59fce69e20abf1b0c920ceeb11f91b3c9 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 20 Sep 2022 17:27:31 +0100 Subject: [PATCH 2/3] Add tests --- test/editor/parts-test.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/test/editor/parts-test.ts b/test/editor/parts-test.ts index b77971c2aa7..534221ece3a 100644 --- a/test/editor/parts-test.ts +++ b/test/editor/parts-test.ts @@ -15,6 +15,7 @@ limitations under the License. */ import { EmojiPart, PlainPart } from "../../src/editor/parts"; +import { createPartCreator } from "./mock"; describe("editor/parts", () => { describe("appendUntilRejected", () => { @@ -32,4 +33,10 @@ describe("editor/parts", () => { expect(part.text).toEqual(femaleFacepalmEmoji); }); }); + + it("should not explode on room pills for unknown rooms", () => { + const pc = createPartCreator(); + const part = pc.roomPill("#room:server"); + expect(() => part.toDOMNode()).not.toThrow(); + }); }); From 002e7b64d037a81864029977944bb0c8b21c1af0 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 20 Sep 2022 17:28:00 +0100 Subject: [PATCH 3/3] Fix types --- src/editor/parts.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/editor/parts.ts b/src/editor/parts.ts index 74447e63fbd..7dbdfcdda3a 100644 --- a/src/editor/parts.ts +++ b/src/editor/parts.ts @@ -610,7 +610,7 @@ export class PartCreator { } public roomPill(alias: string, roomId?: string): RoomPillPart { - let room: Room; + let room: Room | undefined; if (roomId || alias[0] !== "#") { room = this.client.getRoom(roomId || alias); } else {