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

Commit

Permalink
Add at room avatar for RTE (#11106)
Browse files Browse the repository at this point in the history
* add at room avatar logic

* fix broken test

* fix TS error

* add param comment

* increase test coverage

* update code to solve conflict
  • Loading branch information
alunturner authored Jun 21, 2023
1 parent 985bde7 commit ac3d6ab
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ export function getMentionDisplayText(completion: ICompletion, client: MatrixCli
*
* @param completion - the item selected from the autocomplete
* @param client - the MatrixClient is required for us to look up the correct room mention text
* @param room - the room the composer is currently in
* @returns an object of attributes containing HTMLAnchor attributes or data-* attributes
*/
export function getMentionAttributes(
Expand Down Expand Up @@ -133,8 +134,18 @@ export function getMentionAttributes(
attributes.set("data-mention-type", completion.type);
attributes.set("style", `--avatar-background: url(${avatarUrl}); --avatar-letter: '${initialLetter}'`);
} else if (completion.type === "at-room") {
// TODO add avatar logic for at-room
// logic as used in RoomPillPart.setAvatar in parts.ts, but now we know the current room
// from the arguments passed
let initialLetter = defaultLetterContent;
let avatarUrl = Avatar.avatarUrlForRoom(room, 16, 16, "crop");

if (!avatarUrl) {
initialLetter = Avatar.getInitialLetter(room.name) ?? defaultLetterContent;
avatarUrl = Avatar.defaultAvatarUrlForString(room.roomId);
}

attributes.set("data-mention-type", completion.type);
attributes.set("style", `--avatar-background: url(${avatarUrl}); --avatar-letter: '${initialLetter}'`);
}

return attributes;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -242,12 +242,36 @@ describe("getMentionAttributes", () => {
});

describe("at-room mentions", () => {
it("returns expected attributes", () => {
it("returns expected attributes when avatar url for room is truthyf", () => {
const atRoomCompletion = createMockCompletion({ type: "at-room" });

const result = getMentionAttributes(atRoomCompletion, mockClient, mockRoom);

expect(result).toEqual(new Map([["data-mention-type", "at-room"]]));
expect(result).toEqual(
new Map([
["data-mention-type", "at-room"],
["style", `--avatar-background: url(${testAvatarUrlForRoom}); --avatar-letter: '\u200b'`],
]),
);
});

it("returns expected style attributes when avatar url for room is falsy", () => {
const atRoomCompletion = createMockCompletion({ type: "at-room" });

// mock a single implementation of avatarUrlForRoom to make it falsy
mockAvatar.avatarUrlForRoom.mockReturnValueOnce(null);

const result = getMentionAttributes(atRoomCompletion, mockClient, mockRoom);

expect(result).toEqual(
new Map([
["data-mention-type", "at-room"],
[
"style",
`--avatar-background: url(${testAvatarUrlForString}); --avatar-letter: '${testInitialLetter}'`,
],
]),
);
});
});
});

0 comments on commit ac3d6ab

Please sign in to comment.