diff --git a/src/components/views/composer/HistoryVisibleBanner.tsx b/src/components/views/composer/HistoryVisibleBanner.tsx index cfc50ade6d..1d27696e9d 100644 --- a/src/components/views/composer/HistoryVisibleBanner.tsx +++ b/src/components/views/composer/HistoryVisibleBanner.tsx @@ -11,7 +11,7 @@ import { type Room } from "matrix-js-sdk/src/matrix"; import { HistoryVisibleBannerViewModel } from "../../../viewmodels/composer/HistoryVisibleBannerViewModel"; -export const HistoryVisibleBanner: React.FC<{ room: Room }> = ({ room }) => { - const vm = useCreateAutoDisposedViewModel(() => new HistoryVisibleBannerViewModel({ room })); +export const HistoryVisibleBanner: React.FC<{ room: Room; threadId?: string | null }> = (props) => { + const vm = useCreateAutoDisposedViewModel(() => new HistoryVisibleBannerViewModel(props)); return ; }; diff --git a/src/components/views/rooms/MessageComposer.tsx b/src/components/views/rooms/MessageComposer.tsx index 3c5dbf1891..b347656ce4 100644 --- a/src/components/views/rooms/MessageComposer.tsx +++ b/src/components/views/rooms/MessageComposer.tsx @@ -675,7 +675,7 @@ export class MessageComposer extends React.Component { return (
- +
{ + private static readonly computeSnapshot = ( + room: Room, + threadId?: string | null, + ): HistoryVisibleBannerViewSnapshot => { const featureEnabled = SettingsStore.getValue("feature_share_history_on_invite"); const acknowledged = SettingsStore.getValue("acknowledgedHistoryVisibility", room.roomId); return { visible: featureEnabled && + !threadId && room.hasEncryptionStateEvent() && room.getHistoryVisibility() !== HistoryVisibility.Joined && !acknowledged, @@ -47,7 +52,7 @@ export class HistoryVisibleBannerViewModel }; public constructor(props: Props) { - super(props, HistoryVisibleBannerViewModel.computeSnapshot(props.room)); + super(props, HistoryVisibleBannerViewModel.computeSnapshot(props.room, props.threadId)); this.disposables.trackListener(props.room, RoomStateEvent.Update, () => this.setSnapshot()); @@ -77,7 +82,7 @@ export class HistoryVisibleBannerViewModel ); } - this.snapshot.set(HistoryVisibleBannerViewModel.computeSnapshot(this.props.room)); + this.snapshot.set(HistoryVisibleBannerViewModel.computeSnapshot(this.props.room, this.props.threadId)); } /** diff --git a/test/unit-tests/components/viewmodels/composer/HistoryVisibleBannerViewModel-test.tsx b/test/unit-tests/components/viewmodels/composer/HistoryVisibleBannerViewModel-test.tsx index 12b7edc6f4..0c2670636a 100644 --- a/test/unit-tests/components/viewmodels/composer/HistoryVisibleBannerViewModel-test.tsx +++ b/test/unit-tests/components/viewmodels/composer/HistoryVisibleBannerViewModel-test.tsx @@ -104,6 +104,29 @@ describe("HistoryVisibleBannerViewModel", () => { vm.dispose(); }); + it("should not show the banner in threads", () => { + upsertRoomStateEvents(room, [ + mkEvent({ + event: true, + type: "m.room.encryption", + user: "@user1:server", + content: {}, + }), + mkEvent({ + event: true, + type: "m.room.history_visibility", + user: "@user1:server", + content: { + history_visibility: "shared", + }, + }), + ]); + + const vm = new HistoryVisibleBannerViewModel({ room, threadId: "some thread ID" }); + expect(vm.getSnapshot().visible).toBe(false); + vm.dispose(); + }); + it("should show the banner in encrypted rooms with non-joined history visibility", async () => { upsertRoomStateEvents(room, [ mkEvent({