Skip to content

Commit 3fbc9e6

Browse files
Fix url preview display (element-hq#28765) (element-hq#28766)
(cherry picked from commit 117bee7) Co-authored-by: Florian Duros <[email protected]>
1 parent e7d9df2 commit 3fbc9e6

File tree

2 files changed

+59
-40
lines changed

2 files changed

+59
-40
lines changed

Diff for: src/components/views/messages/TextualBody.tsx

+2-1
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,8 @@ export default class TextualBody extends React.Component<IBodyProps, IState> {
128128
if (!this.props.editState) {
129129
const stoppedEditing = prevProps.editState && !this.props.editState;
130130
const messageWasEdited = prevProps.replacingEventId !== this.props.replacingEventId;
131-
if (messageWasEdited || stoppedEditing) {
131+
const urlPreviewChanged = prevProps.showUrlPreview !== this.props.showUrlPreview;
132+
if (messageWasEdited || stoppedEditing || urlPreviewChanged) {
132133
this.applyFormatting();
133134
}
134135
}

Diff for: test/unit-tests/components/views/messages/TextualBody-test.tsx

+57-39
Original file line numberDiff line numberDiff line change
@@ -375,55 +375,73 @@ describe("<TextualBody />", () => {
375375
});
376376
});
377377

378-
it("renders url previews correctly", () => {
379-
languageHandler.setMissingEntryGenerator((key) => key.split("|", 2)[1]);
378+
describe("url preview", () => {
379+
let matrixClient: MatrixClient;
380380

381-
const matrixClient = getMockClientWithEventEmitter({
382-
getRoom: () => mkStubRoom("room_id", "room name", undefined),
383-
getAccountData: (): MatrixClient | undefined => undefined,
384-
getUrlPreview: (url: string) => new Promise(() => {}),
385-
isGuest: () => false,
386-
mxcUrlToHttp: (s: string) => s,
381+
beforeEach(() => {
382+
languageHandler.setMissingEntryGenerator((key) => key.split("|", 2)[1]);
383+
matrixClient = getMockClientWithEventEmitter({
384+
getRoom: () => mkStubRoom("room_id", "room name", undefined),
385+
getAccountData: (): MatrixClient | undefined => undefined,
386+
getUrlPreview: (url: string) => new Promise(() => {}),
387+
isGuest: () => false,
388+
mxcUrlToHttp: (s: string) => s,
389+
});
390+
DMRoomMap.makeShared(defaultMatrixClient);
387391
});
388-
DMRoomMap.makeShared(defaultMatrixClient);
389392

390-
const ev = mkRoomTextMessage("Visit https://matrix.org/");
391-
const { container, rerender } = getComponent(
392-
{ mxEvent: ev, showUrlPreview: true, onHeightChanged: jest.fn() },
393-
matrixClient,
394-
);
393+
it("renders url previews correctly", () => {
394+
const ev = mkRoomTextMessage("Visit https://matrix.org/");
395+
const { container, rerender } = getComponent(
396+
{ mxEvent: ev, showUrlPreview: true, onHeightChanged: jest.fn() },
397+
matrixClient,
398+
);
395399

396-
expect(container).toHaveTextContent(ev.getContent().body);
397-
expect(container.querySelector("a")).toHaveAttribute("href", "https://matrix.org/");
400+
expect(container).toHaveTextContent(ev.getContent().body);
401+
expect(container.querySelector("a")).toHaveAttribute("href", "https://matrix.org/");
398402

399-
// simulate an event edit and check the transition from the old URL preview to the new one
400-
const ev2 = mkEvent({
401-
type: "m.room.message",
402-
room: "room_id",
403-
user: "sender",
404-
content: {
405-
"m.new_content": {
406-
body: "Visit https://vector.im/ and https://riot.im/",
407-
msgtype: "m.text",
403+
// simulate an event edit and check the transition from the old URL preview to the new one
404+
const ev2 = mkEvent({
405+
type: "m.room.message",
406+
room: "room_id",
407+
user: "sender",
408+
content: {
409+
"m.new_content": {
410+
body: "Visit https://vector.im/ and https://riot.im/",
411+
msgtype: "m.text",
412+
},
408413
},
409-
},
410-
event: true,
414+
event: true,
415+
});
416+
jest.spyOn(ev, "replacingEventDate").mockReturnValue(new Date(1993, 7, 3));
417+
ev.makeReplaced(ev2);
418+
419+
getComponent(
420+
{ mxEvent: ev, showUrlPreview: true, onHeightChanged: jest.fn(), replacingEventId: ev.getId() },
421+
matrixClient,
422+
rerender,
423+
);
424+
425+
expect(container).toHaveTextContent(ev2.getContent()["m.new_content"].body + "(edited)");
426+
427+
const links = ["https://vector.im/", "https://riot.im/"];
428+
const anchorNodes = container.querySelectorAll("a");
429+
Array.from(anchorNodes).forEach((node, index) => {
430+
expect(node).toHaveAttribute("href", links[index]);
431+
});
411432
});
412-
jest.spyOn(ev, "replacingEventDate").mockReturnValue(new Date(1993, 7, 3));
413-
ev.makeReplaced(ev2);
414433

415-
getComponent(
416-
{ mxEvent: ev, showUrlPreview: true, onHeightChanged: jest.fn(), replacingEventId: ev.getId() },
417-
matrixClient,
418-
rerender,
419-
);
434+
it("should listen to showUrlPreview change", () => {
435+
const ev = mkRoomTextMessage("Visit https://matrix.org/");
420436

421-
expect(container).toHaveTextContent(ev2.getContent()["m.new_content"].body + "(edited)");
437+
const { container, rerender } = getComponent(
438+
{ mxEvent: ev, showUrlPreview: false, onHeightChanged: jest.fn() },
439+
matrixClient,
440+
);
441+
expect(container.querySelector(".mx_LinkPreviewGroup")).toBeNull();
422442

423-
const links = ["https://vector.im/", "https://riot.im/"];
424-
const anchorNodes = container.querySelectorAll("a");
425-
Array.from(anchorNodes).forEach((node, index) => {
426-
expect(node).toHaveAttribute("href", links[index]);
443+
getComponent({ mxEvent: ev, showUrlPreview: true, onHeightChanged: jest.fn() }, matrixClient, rerender);
444+
expect(container.querySelector(".mx_LinkPreviewGroup")).toBeTruthy();
427445
});
428446
});
429447
});

0 commit comments

Comments
 (0)