diff --git a/src/components/structures/MatrixChat.js b/src/components/structures/MatrixChat.js index b8be3e017a..0f34e02161 100644 --- a/src/components/structures/MatrixChat.js +++ b/src/components/structures/MatrixChat.js @@ -1054,6 +1054,7 @@ export default React.createClass({ modal.close(); if (this.state.currentRoomId === roomId) { dis.dispatch({action: 'view_next_room'}); + dis.dispatch({action: 'close_room_settings'}); } }, (err) => { modal.close(); diff --git a/src/components/views/dialogs/RoomSettingsDialog.js b/src/components/views/dialogs/RoomSettingsDialog.js index 7336373e32..94625a028d 100644 --- a/src/components/views/dialogs/RoomSettingsDialog.js +++ b/src/components/views/dialogs/RoomSettingsDialog.js @@ -44,6 +44,19 @@ export default class RoomSettingsDialog extends React.Component { onFinished: PropTypes.func.isRequired, }; + componentWillMount(): void { + this.dispatcherRef = dis.register(this._onAction); + } + + componentWillUnmount(): void { + dis.unregister(this.dispatcherRef); + } + + _onAction = (payload) => { + if (payload.action !== 'close_room_settings') return; + this.props.onFinished(); + }; + _getTabs() { const tabs = []; diff --git a/src/components/views/room_settings/UrlPreviewSettings.js b/src/components/views/room_settings/UrlPreviewSettings.js index fe2a2bacf4..1662692164 100644 --- a/src/components/views/room_settings/UrlPreviewSettings.js +++ b/src/components/views/room_settings/UrlPreviewSettings.js @@ -1,7 +1,7 @@ /* Copyright 2016 OpenMarket Ltd Copyright 2017 Travis Ralston -Copyright 2018 New Vector Ltd +Copyright 2018-2019 New Vector Ltd Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -16,12 +16,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -import {MatrixClient} from "matrix-js-sdk"; const React = require('react'); import PropTypes from 'prop-types'; const sdk = require("../../../index"); import { _t, _td } from '../../../languageHandler'; import SettingsStore, {SettingLevel} from "../../../settings/SettingsStore"; +import dis from "../../../dispatcher"; +import MatrixClientPeg from "../../../MatrixClientPeg"; module.exports = React.createClass({ @@ -31,21 +32,16 @@ module.exports = React.createClass({ room: PropTypes.object, }, - contextTypes: { - matrixClient: PropTypes.instanceOf(MatrixClient).isRequired, - }, - - saveSettings: function() { - const promises = []; - if (this.refs.urlPreviewsRoom) promises.push(this.refs.urlPreviewsRoom.save()); - if (this.refs.urlPreviewsSelf) promises.push(this.refs.urlPreviewsSelf.save()); - return promises; + _onClickUserSettings: (e) => { + e.preventDefault(); + e.stopPropagation(); + dis.dispatch({action: 'view_user_settings'}); }, render: function() { const SettingsFlag = sdk.getComponent("elements.SettingsFlag"); const roomId = this.props.room.roomId; - const isEncrypted = this.context.matrixClient.isRoomEncrypted(roomId); + const isEncrypted = MatrixClientPeg.get().isRoomEncrypted(roomId); let previewsForAccount = null; let previewsForRoom = null; @@ -56,13 +52,13 @@ module.exports = React.createClass({ if (accountEnabled) { previewsForAccount = ( _t("You have enabled URL previews by default.", {}, { - 'a': (sub)=>{ sub }, + 'a': (sub)=>{ sub }, }) ); } else if (accountEnabled) { previewsForAccount = ( _t("You have disabled URL previews by default.", {}, { - 'a': (sub)=>{ sub }, + 'a': (sub)=>{ sub }, }) ); } @@ -73,9 +69,7 @@ module.exports = React.createClass({ + isExplicit={true} /> ); } else { @@ -96,20 +90,16 @@ module.exports = React.createClass({ const previewsForRoomAccount = ( // in an e2ee room we use a special key to enforce per-room opt-in + roomId={roomId} /> ); return ( -
-

{ _t("URL Previews") }

-
+
+
{ _t('When someone puts a URL in their message, a URL preview can be shown to give more ' + 'information about that link such as the title, description, and an image from the website.') }
-
+
{ previewsForAccount }
{ previewsForRoom } diff --git a/src/components/views/settings/tabs/GeneralRoomSettingsTab.js b/src/components/views/settings/tabs/GeneralRoomSettingsTab.js index 5679b1cc04..385b72c967 100644 --- a/src/components/views/settings/tabs/GeneralRoomSettingsTab.js +++ b/src/components/views/settings/tabs/GeneralRoomSettingsTab.js @@ -22,6 +22,8 @@ import MatrixClientPeg from "../../../../MatrixClientPeg"; import sdk from "../../../../index"; import AccessibleButton from "../../elements/AccessibleButton"; import {MatrixClient} from "matrix-js-sdk"; +import dis from "../../../../dispatcher"; +import Modal from "../../../../Modal"; export default class GeneralRoomSettingsTab extends React.Component { static childContextTypes = { @@ -39,20 +41,28 @@ export default class GeneralRoomSettingsTab extends React.Component { } _saveAliases = (e) => { - // TODO: Live modification of aliases? + // TODO: Live modification? if (!this.refs.aliasSettings) return; this.refs.aliasSettings.saveSettings(); }; _saveGroups = (e) => { - // TODO: Live modification of aliases? + // TODO: Live modification? if (!this.refs.flairSettings) return; this.refs.flairSettings.saveSettings(); }; + _onLeaveClick = () => { + dis.dispatch({ + action: 'leave_room', + room_id: this.props.roomId, + }); + }; + render() { const AliasSettings = sdk.getComponent("room_settings.AliasSettings"); const RelatedGroupSettings = sdk.getComponent("room_settings.RelatedGroupSettings"); + const UrlPreviewSettings = sdk.getComponent("room_settings.UrlPreviewSettings"); const client = MatrixClientPeg.get(); const room = client.getRoom(this.props.roomId); @@ -91,6 +101,18 @@ export default class GeneralRoomSettingsTab extends React.Component { {_t("Save")}
+ + {_t("URL Previews")} +
+ +
+ + {_t("Leave room")} +
+ + { _t('Leave room') } + +
); }