You've already forked matrix-react-sdk
mirror of
https://github.com/matrix-org/matrix-react-sdk.git
synced 2025-07-18 09:22:18 +03:00
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:
@ -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);
|
||||
}
|
||||
|
Reference in New Issue
Block a user