Skip to content

Commit c7134e8

Browse files
authored
Prevent history visible banner from displaying in threads. (#31535)
* fix: Prevent history visible banner from displaying in threads. * tests: Verify banner is not visible in threads.
1 parent 1d34214 commit c7134e8

File tree

4 files changed

+34
-6
lines changed

4 files changed

+34
-6
lines changed

src/components/views/composer/HistoryVisibleBanner.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { type Room } from "matrix-js-sdk/src/matrix";
1111

1212
import { HistoryVisibleBannerViewModel } from "../../../viewmodels/composer/HistoryVisibleBannerViewModel";
1313

14-
export const HistoryVisibleBanner: React.FC<{ room: Room }> = ({ room }) => {
15-
const vm = useCreateAutoDisposedViewModel(() => new HistoryVisibleBannerViewModel({ room }));
14+
export const HistoryVisibleBanner: React.FC<{ room: Room; threadId?: string | null }> = (props) => {
15+
const vm = useCreateAutoDisposedViewModel(() => new HistoryVisibleBannerViewModel(props));
1616
return <HistoryVisibleBannerView vm={vm} />;
1717
};

src/components/views/rooms/MessageComposer.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -675,7 +675,7 @@ export class MessageComposer extends React.Component<IProps, IState> {
675675

676676
return (
677677
<div className={classes} ref={this.ref} role="region" aria-label={_t("a11y|message_composer")}>
678-
<HistoryVisibleBanner room={this.props.room} />
678+
<HistoryVisibleBanner room={this.props.room} threadId={threadId} />
679679
<div className="mx_MessageComposer_wrapper">
680680
<UserIdentityWarning room={this.props.room} key={this.props.room.roomId} />
681681
<ReplyPreview

src/viewmodels/composer/HistoryVisibleBannerViewModel.tsx

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import { SettingLevel } from "../../settings/SettingLevel";
1717

1818
interface Props {
1919
room: Room;
20+
threadId?: string | null;
2021
}
2122

2223
export class HistoryVisibleBannerViewModel
@@ -33,21 +34,25 @@ export class HistoryVisibleBannerViewModel
3334
*/
3435
private readonly acknowledgedWatcher: string;
3536

36-
private static readonly computeSnapshot = (room: Room): HistoryVisibleBannerViewSnapshot => {
37+
private static readonly computeSnapshot = (
38+
room: Room,
39+
threadId?: string | null,
40+
): HistoryVisibleBannerViewSnapshot => {
3741
const featureEnabled = SettingsStore.getValue("feature_share_history_on_invite");
3842
const acknowledged = SettingsStore.getValue("acknowledgedHistoryVisibility", room.roomId);
3943

4044
return {
4145
visible:
4246
featureEnabled &&
47+
!threadId &&
4348
room.hasEncryptionStateEvent() &&
4449
room.getHistoryVisibility() !== HistoryVisibility.Joined &&
4550
!acknowledged,
4651
};
4752
};
4853

4954
public constructor(props: Props) {
50-
super(props, HistoryVisibleBannerViewModel.computeSnapshot(props.room));
55+
super(props, HistoryVisibleBannerViewModel.computeSnapshot(props.room, props.threadId));
5156

5257
this.disposables.trackListener(props.room, RoomStateEvent.Update, () => this.setSnapshot());
5358

@@ -77,7 +82,7 @@ export class HistoryVisibleBannerViewModel
7782
);
7883
}
7984

80-
this.snapshot.set(HistoryVisibleBannerViewModel.computeSnapshot(this.props.room));
85+
this.snapshot.set(HistoryVisibleBannerViewModel.computeSnapshot(this.props.room, this.props.threadId));
8186
}
8287

8388
/**

test/unit-tests/components/viewmodels/composer/HistoryVisibleBannerViewModel-test.tsx

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,29 @@ describe("HistoryVisibleBannerViewModel", () => {
104104
vm.dispose();
105105
});
106106

107+
it("should not show the banner in threads", () => {
108+
upsertRoomStateEvents(room, [
109+
mkEvent({
110+
event: true,
111+
type: "m.room.encryption",
112+
user: "@user1:server",
113+
content: {},
114+
}),
115+
mkEvent({
116+
event: true,
117+
type: "m.room.history_visibility",
118+
user: "@user1:server",
119+
content: {
120+
history_visibility: "shared",
121+
},
122+
}),
123+
]);
124+
125+
const vm = new HistoryVisibleBannerViewModel({ room, threadId: "some thread ID" });
126+
expect(vm.getSnapshot().visible).toBe(false);
127+
vm.dispose();
128+
});
129+
107130
it("should show the banner in encrypted rooms with non-joined history visibility", async () => {
108131
upsertRoomStateEvents(room, [
109132
mkEvent({

0 commit comments

Comments
 (0)