diff --git a/res/css/views/settings/tabs/_SettingsTab.scss b/res/css/views/settings/tabs/_SettingsTab.scss index 88735f99b2..def28bfbd2 100644 --- a/res/css/views/settings/tabs/_SettingsTab.scss +++ b/res/css/views/settings/tabs/_SettingsTab.scss @@ -72,3 +72,7 @@ limitations under the License. // give them more visual distinction between the sections. margin-top: 30px; } + +.mx_SettingsTab a { + color: $accent-color-alt; +} \ No newline at end of file diff --git a/src/components/views/dialogs/RoomSettingsDialog.js b/src/components/views/dialogs/RoomSettingsDialog.js index 22b7857264..05ed262078 100644 --- a/src/components/views/dialogs/RoomSettingsDialog.js +++ b/src/components/views/dialogs/RoomSettingsDialog.js @@ -52,7 +52,7 @@ export default class RoomSettingsDialog extends React.Component { tabs.push(new Tab( _td("Advanced"), "mx_RoomSettingsDialog_warningIcon", - , + , )); return tabs; diff --git a/src/components/views/settings/tabs/room/AdvancedRoomSettingsTab.js b/src/components/views/settings/tabs/room/AdvancedRoomSettingsTab.js index 20c270fe29..101cd036e5 100644 --- a/src/components/views/settings/tabs/room/AdvancedRoomSettingsTab.js +++ b/src/components/views/settings/tabs/room/AdvancedRoomSettingsTab.js @@ -21,10 +21,12 @@ import MatrixClientPeg from "../../../../../MatrixClientPeg"; import sdk from "../../../../.."; import AccessibleButton from "../../../elements/AccessibleButton"; import Modal from "../../../../../Modal"; +import dis from "../../../../../dispatcher"; export default class AdvancedRoomSettingsTab extends React.Component { static propTypes = { roomId: PropTypes.string.isRequired, + closeSettingsFn: PropTypes.func.isRequired, }; constructor() { @@ -41,9 +43,21 @@ export default class AdvancedRoomSettingsTab extends React.Component { const room = MatrixClientPeg.get().getRoom(this.props.roomId); room.getRecommendedVersion().then((v) => { const tombstone = room.currentState.getStateEvents("m.room.tombstone", ""); + + const additionalStateChanges = {}; + const createEvent = room.currentState.getStateEvents("m.room.create", ""); + const predecessor = createEvent ? createEvent.getContent().predecessor : null; + if (predecessor && predecessor.room_id) { + additionalStateChanges['oldRoomId'] = predecessor.room_id; + additionalStateChanges['oldEventId'] = predecessor.event_id; + additionalStateChanges['hasPreviousRoom'] = true; + } + + this.setState({ upgraded: tombstone && tombstone.getContent().replacement_room, upgradeRecommendation: v, + ...additionalStateChanges, }); }); } @@ -59,6 +73,18 @@ export default class AdvancedRoomSettingsTab extends React.Component { Modal.createDialog(DevtoolsDialog, {roomId: this.props.roomId}); }; + _onOldRoomClicked = (e) => { + e.preventDefault(); + e.stopPropagation(); + + dis.dispatch({ + action: 'view_room', + room_id: this.state.oldRoomId, + event_id: this.state.oldEventId, + }); + this.props.closeSettingsFn(); + }; + render() { const client = MatrixClientPeg.get(); const room = client.getRoom(this.props.roomId); @@ -91,6 +117,18 @@ export default class AdvancedRoomSettingsTab extends React.Component { ); } + let oldRoomLink; + if (this.state.hasPreviousRoom) { + let name = _t("this room"); + const room = MatrixClientPeg.get().getRoom(this.props.roomId); + if (room && room.name) name = room.name; + oldRoomLink = ( + + {_t("View older messages in %(roomName)s.", {roomName: name})} + + ); + } + return (
{_t("Advanced")}
@@ -108,6 +146,7 @@ export default class AdvancedRoomSettingsTab extends React.Component { {_t("Room version:")}  {room.getVersion()}
+ {oldRoomLink} {roomUpgradeButton}
diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index f049911570..e4d1d3ea80 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -599,6 +599,8 @@ "Voice & Video": "Voice & Video", "This room is not accessible by remote Matrix servers": "This room is not accessible by remote Matrix servers", "Upgrade this room to the recommended room version": "Upgrade this room to the recommended room version", + "this room": "this room", + "View older messages in %(roomName)s": "View older messages in %(roomName)s", "Room information": "Room information", "Internal room ID:": "Internal room ID:", "Room version": "Room version",