/* Copyright 2024 New Vector Ltd. Copyright 2018-2021 The Matrix.org Foundation C.I.C. SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ import React from "react"; import { MatrixEvent, Room, RoomStateEvent } from "matrix-js-sdk/src/matrix"; import Modal from "../../../Modal"; import { _t } from "../../../languageHandler"; import RoomUpgradeDialog from "../dialogs/RoomUpgradeDialog"; import AccessibleButton from "../elements/AccessibleButton"; import MatrixClientContext from "../../../contexts/MatrixClientContext"; interface IProps { room: Room; } interface IState { upgraded?: boolean; } export default class RoomUpgradeWarningBar extends React.PureComponent { public static contextType = MatrixClientContext; public declare context: React.ContextType; public constructor(props: IProps, context: React.ContextType) { super(props, context); const tombstone = this.props.room.currentState.getStateEvents("m.room.tombstone", ""); this.state = { upgraded: tombstone?.getContent().replacement_room, }; } public componentDidMount(): void { this.context.on(RoomStateEvent.Events, this.onStateEvents); } public componentWillUnmount(): void { this.context.removeListener(RoomStateEvent.Events, this.onStateEvents); } private onStateEvents = (event: MatrixEvent): void => { if (!this.props.room || event.getRoomId() !== this.props.room.roomId) { return; } if (event.getType() !== "m.room.tombstone") return; const tombstone = this.props.room.currentState.getStateEvents("m.room.tombstone", ""); this.setState({ upgraded: tombstone && tombstone.getContent().replacement_room }); }; private onUpgradeClick = (): void => { Modal.createDialog(RoomUpgradeDialog, { room: this.props.room }); }; public render(): React.ReactNode { let doUpgradeWarnings = (

{_t("room|upgrade_warning_bar")}

{_t( "room_settings|advanced|room_upgrade_warning", {}, { b: (sub) => {sub}, i: (sub) => {sub}, }, )}

{_t("room_settings|advanced|room_upgrade_button")}

); if (this.state.upgraded) { doUpgradeWarnings = (

{_t("room|upgrade_warning_bar_upgraded")}

); } return (
{_t( "room|upgrade_warning_bar_unstable", {}, { roomVersion: () => {this.props.room.getVersion()}, i: (sub) => {sub}, }, )}
{doUpgradeWarnings}
{_t("room|upgrade_warning_bar_admins")}
); } }