diff --git a/src/components/structures/MatrixChat.js b/src/components/structures/MatrixChat.js index 25f25e919e..04a567d18f 100644 --- a/src/components/structures/MatrixChat.js +++ b/src/components/structures/MatrixChat.js @@ -29,6 +29,7 @@ var Login = require("./login/Login"); var Registration = require("./login/Registration"); var PostRegistration = require("./login/PostRegistration"); +var Modal = require("../../Modal"); var sdk = require('../../index'); var MatrixTools = require('../../MatrixTools'); var linkifyMatrix = require("../../linkify-matrix"); @@ -200,6 +201,36 @@ module.exports = React.createClass({ self.setState({errorText: 'Login failed.'}); }); + break; + case 'leave_room': + var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog"); + var QuestionDialog = sdk.getComponent("dialogs.QuestionDialog"); + + var roomId = payload.room_id; + Modal.createDialog(QuestionDialog, { + title: "Leave room", + description: "Are you sure you want to leave the room?", + onFinished: function(should_leave) { + if (should_leave) { + var d = MatrixClientPeg.get().leave(roomId); + + // FIXME: controller shouldn't be loading a view :( + var Loader = sdk.getComponent("elements.Spinner"); + var modal = Modal.createDialog(Loader); + + d.then(function() { + modal.close(); + dis.dispatch({action: 'view_next_room'}); + }, function(err) { + modal.close(); + Modal.createDialog(ErrorDialog, { + title: "Failed to leave room", + description: err.toString() + }); + }); + } + } + }); break; case 'view_room': this.focusComposer = true; diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js index 5bad92bf3a..5a87508d68 100644 --- a/src/components/structures/RoomView.js +++ b/src/components/structures/RoomView.js @@ -793,6 +793,14 @@ module.exports = React.createClass({ this.setState(this.getInitialState()); }, + onLeaveClick: function() { + dis.dispatch({ + action: 'leave_room', + room_id: this.props.roomId, + }); + this.props.onFinished(); + }, + onRejectButtonClicked: function(ev) { var self = this; this.setState({ @@ -853,7 +861,7 @@ module.exports = React.createClass({ // XXX: this is a bit of a hack and might possibly cause the video to push out the page anyway // but it's better than the video going missing entirely if (auxPanelMaxHeight < 50) auxPanelMaxHeight = 50; - + video.style.maxHeight = auxPanelMaxHeight + "px"; } }, @@ -1039,7 +1047,7 @@ module.exports = React.createClass({ return (
+ onSettingsClick={this.onSettingsClick} onSaveClick={this.onSaveClick} onCancelClick={this.onCancelClick} onLeaveClick={this.onLeaveClick} /> { fileDropTarget }
diff --git a/src/components/views/rooms/MemberInfo.js b/src/components/views/rooms/MemberInfo.js index 1478ce97a0..bf17195664 100644 --- a/src/components/views/rooms/MemberInfo.js +++ b/src/components/views/rooms/MemberInfo.js @@ -226,36 +226,10 @@ module.exports = React.createClass({ } }, - // FIXME: this is horribly duplicated with MemberTile's onLeaveClick. - // Not sure what the right solution to this is. onLeaveClick: function() { - var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog"); - var QuestionDialog = sdk.getComponent("dialogs.QuestionDialog"); - - var roomId = this.props.member.roomId; - Modal.createDialog(QuestionDialog, { - title: "Leave room", - description: "Are you sure you want to leave the room?", - onFinished: function(should_leave) { - if (should_leave) { - var d = MatrixClientPeg.get().leave(roomId); - - // FIXME: controller shouldn't be loading a view :( - var Loader = sdk.getComponent("elements.Spinner"); - var modal = Modal.createDialog(Loader); - - d.then(function() { - modal.close(); - dis.dispatch({action: 'view_next_room'}); - }, function(err) { - modal.close(); - Modal.createDialog(ErrorDialog, { - title: "Failed to leave room", - description: err.toString() - }); - }); - } - } + dis.dispatch({ + action: 'leave_room', + room_id: this.props.member.roomId, }); this.props.onFinished(); }, diff --git a/src/components/views/rooms/MemberTile.js b/src/components/views/rooms/MemberTile.js index 4d99529d98..38d9285c0c 100644 --- a/src/components/views/rooms/MemberTile.js +++ b/src/components/views/rooms/MemberTile.js @@ -31,33 +31,11 @@ module.exports = React.createClass({ }, onLeaveClick: function() { - var QuestionDialog = sdk.getComponent("dialogs.QuestionDialog"); - - var roomId = this.props.member.roomId; - Modal.createDialog(QuestionDialog, { - title: "Leave room", - description: "Are you sure you want to leave the room?", - onFinished: function(should_leave) { - if (should_leave) { - var d = MatrixClientPeg.get().leave(roomId); - - // FIXME: controller shouldn't be loading a view :( - var Loader = sdk.getComponent("elements.Spinner"); - var modal = Modal.createDialog(Loader); - - d.then(function() { - modal.close(); - dis.dispatch({action: 'view_next_room'}); - }, function(err) { - modal.close(); - Modal.createDialog(ErrorDialog, { - title: "Failed to leave room", - description: err.toString() - }); - }); - } - } + dis.dispatch({ + action: 'leave_room', + room_id: this.props.member.roomId, }); + this.props.onFinished(); }, shouldComponentUpdate: function(nextProps, nextState) { diff --git a/src/components/views/rooms/RoomHeader.js b/src/components/views/rooms/RoomHeader.js index f5c7016bf5..07b2521b27 100644 --- a/src/components/views/rooms/RoomHeader.js +++ b/src/components/views/rooms/RoomHeader.js @@ -35,6 +35,8 @@ module.exports = React.createClass({ editing: React.PropTypes.bool, onSettingsClick: React.PropTypes.func, onSaveClick: React.PropTypes.func, + onSearchClick: React.PropTypes.func, + onLeaveClick: React.PropTypes.func, }, getDefaultProps: function() { @@ -251,6 +253,14 @@ module.exports = React.createClass({
; } + var exit_button; + if (this.props.onLeaveClick) { + exit_button = +
+ Leave room +
; + } + header =
@@ -269,6 +279,7 @@ module.exports = React.createClass({ { video_button } { voice_button } { zoom_button } + { exit_button }
Search