From 38e29c51c498c3f900ea13f656944a9fdc97b51a Mon Sep 17 00:00:00 2001 From: Will Hunt <2072976+Half-Shot@users.noreply.github.com> Date: Tue, 7 Jul 2026 19:47:14 +0100 Subject: [PATCH] Fix composer preview getting stuck on a single module API preview (#34173) * Unset composer preview * add a test --- .../rooms/MessageComposerUrlPreview.test.tsx | 25 +++++++++++++++++++ .../views/rooms/MessageComposerUrlPreview.tsx | 4 +-- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/apps/web/src/components/views/rooms/MessageComposerUrlPreview.test.tsx b/apps/web/src/components/views/rooms/MessageComposerUrlPreview.test.tsx index 344836f994..d720f80be9 100644 --- a/apps/web/src/components/views/rooms/MessageComposerUrlPreview.test.tsx +++ b/apps/web/src/components/views/rooms/MessageComposerUrlPreview.test.tsx @@ -96,4 +96,29 @@ describe("MessageComposerUrlPreview", () => { { timeout: DEBOUNCE_REQUEST_TIMEOUT_MS }, ); }); + test("to reset module component override when filter function does not match ", async () => { + const modApi = { + customComponents: new CustomComponentsApi(), + } as ModuleApi; + modApi.customComponents.registerComposerPreview( + (text) => text === "show-fake-preview", + () => Fake preview, + ); + const { container, getByText, rerender } = wrapComponent( + , + ); + await waitFor( + () => { + expect(getByText("Fake preview")).toBeDefined(); + }, + { timeout: DEBOUNCE_REQUEST_TIMEOUT_MS }, + ); + rerender(); + await waitFor( + () => { + expect(container).toMatchInlineSnapshot(`
`); + }, + { timeout: DEBOUNCE_REQUEST_TIMEOUT_MS }, + ); + }); }); diff --git a/apps/web/src/components/views/rooms/MessageComposerUrlPreview.tsx b/apps/web/src/components/views/rooms/MessageComposerUrlPreview.tsx index 18030de994..a551e61549 100644 --- a/apps/web/src/components/views/rooms/MessageComposerUrlPreview.tsx +++ b/apps/web/src/components/views/rooms/MessageComposerUrlPreview.tsx @@ -52,9 +52,7 @@ export function MessageComposerUrlPreviewWrapper({ () => , ); - if (customComponent) { - setCustomComponent(customComponent); - } + setCustomComponent(customComponent); // We still update the VM even if the custom component is used since // the component may choose to render the original component. void vm.updateWithText(content);