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.
This commit is contained in:
@@ -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 <HistoryVisibleBannerView vm={vm} />;
|
||||
};
|
||||
|
||||
@@ -675,7 +675,7 @@ export class MessageComposer extends React.Component<IProps, IState> {
|
||||
|
||||
return (
|
||||
<div className={classes} ref={this.ref} role="region" aria-label={_t("a11y|message_composer")}>
|
||||
<HistoryVisibleBanner room={this.props.room} />
|
||||
<HistoryVisibleBanner room={this.props.room} threadId={threadId} />
|
||||
<div className="mx_MessageComposer_wrapper">
|
||||
<UserIdentityWarning room={this.props.room} key={this.props.room.roomId} />
|
||||
<ReplyPreview
|
||||
|
||||
@@ -17,6 +17,7 @@ import { SettingLevel } from "../../settings/SettingLevel";
|
||||
|
||||
interface Props {
|
||||
room: Room;
|
||||
threadId?: string | null;
|
||||
}
|
||||
|
||||
export class HistoryVisibleBannerViewModel
|
||||
@@ -33,13 +34,17 @@ export class HistoryVisibleBannerViewModel
|
||||
*/
|
||||
private readonly acknowledgedWatcher: string;
|
||||
|
||||
private static readonly computeSnapshot = (room: Room): HistoryVisibleBannerViewSnapshot => {
|
||||
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));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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({
|
||||
|
||||
Reference in New Issue
Block a user