Propagate room join errors to the UI
Dispatch so we can set the state in RoomViewStore. Show the error when the room join fails (unsure if it's better to do this from the component or the store). Remove unused joinError from roomview.
This commit is contained in:
parent
d81160d52f
commit
03f4f269ce
2 changed files with 40 additions and 8 deletions
|
@ -185,7 +185,6 @@ module.exports = React.createClass({
|
|||
roomLoading: RoomViewStore.isRoomLoading(),
|
||||
roomLoadError: RoomViewStore.getRoomLoadError(),
|
||||
joining: RoomViewStore.isJoining(),
|
||||
joinError: RoomViewStore.getJoinError(),
|
||||
}, () => {
|
||||
this._onHaveRoom();
|
||||
this.onRoom(MatrixClientPeg.get().getRoom(this.state.roomId));
|
||||
|
|
|
@ -16,6 +16,9 @@ limitations under the License.
|
|||
import dis from '../dispatcher';
|
||||
import {Store} from 'flux/utils';
|
||||
import MatrixClientPeg from '../MatrixClientPeg';
|
||||
import sdk from '../index';
|
||||
import Modal from '../Modal';
|
||||
import { _t } from '../languageHandler';
|
||||
|
||||
const INITIAL_STATE = {
|
||||
// Whether we're joining the currently viewed room
|
||||
|
@ -76,6 +79,12 @@ class RoomViewStore extends Store {
|
|||
case 'join_room':
|
||||
this._joinRoom(payload);
|
||||
break;
|
||||
case 'joined_room':
|
||||
this._joinedRoom(payload);
|
||||
break;
|
||||
case 'join_room_error':
|
||||
this._joinRoomError(payload);
|
||||
break;
|
||||
case 'on_logged_out':
|
||||
this.reset();
|
||||
break;
|
||||
|
@ -128,19 +137,43 @@ class RoomViewStore extends Store {
|
|||
this._setState({
|
||||
joining: true,
|
||||
});
|
||||
MatrixClientPeg.get().joinRoom(this._state.roomId, payload.opts).then(
|
||||
() => {
|
||||
this._setState({
|
||||
joining: false,
|
||||
MatrixClientPeg.get().joinRoom(this._state.roomId, payload.opts).done(() => {
|
||||
dis.dispatch({
|
||||
action: 'joined_room',
|
||||
room_id: this._state.roomId,
|
||||
});
|
||||
}, (err) => {
|
||||
this._setState({
|
||||
joining: false,
|
||||
joinError: err,
|
||||
dis.dispatch({
|
||||
action: 'join_room_error',
|
||||
room_id: this._state.roomId,
|
||||
err: err,
|
||||
});
|
||||
const msg = err.message ? err.message : JSON.stringify(err);
|
||||
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
title: _t("Failed to join room"),
|
||||
description: msg,
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
_joinedRoom(payload) {
|
||||
if (payload.room_id === this._state.roomId) {
|
||||
this._setState({
|
||||
joining: false,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
_joinRoomError(payload) {
|
||||
if (payload.room_id === this._state.roomId) {
|
||||
this._setState({
|
||||
joining: false,
|
||||
joinError: payload.err,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
reset() {
|
||||
this._state = Object.assign({}, INITIAL_STATE);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue