Merge pull request #1099 from matrix-org/luke/fix-spinner-until-room-available
Display a spinner until new room object after join success
This commit is contained in:
commit
c32b717723
1 changed files with 23 additions and 14 deletions
|
@ -179,6 +179,10 @@ module.exports = React.createClass({
|
||||||
'joining?', newState.joining,
|
'joining?', newState.joining,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// finished joining, start waiting for a room and show a spinner. See onRoom.
|
||||||
|
newState.waitingForRoom = this.state.joining && !newState.joining &&
|
||||||
|
!RoomViewStore.getJoinError();
|
||||||
|
|
||||||
// NB: This does assume that the roomID will not change for the lifetime of
|
// NB: This does assume that the roomID will not change for the lifetime of
|
||||||
// the RoomView instance
|
// the RoomView instance
|
||||||
if (initial) {
|
if (initial) {
|
||||||
|
@ -218,23 +222,19 @@ module.exports = React.createClass({
|
||||||
// which must be by alias or invite wherever possible (peeking currently does
|
// which must be by alias or invite wherever possible (peeking currently does
|
||||||
// not work over federation).
|
// not work over federation).
|
||||||
|
|
||||||
// NB. We peek if we are not in the room, although if we try to peek into
|
// NB. We peek if we have never seen the room before (i.e. js-sdk does not know
|
||||||
// a room in which we have a member event (ie. we've left) synapse will just
|
// about it). We don't peek in the historical case where we were joined but are
|
||||||
// send us the same data as we get in the sync (ie. the last events we saw).
|
// now not joined because the js-sdk peeking API will clobber our historical room,
|
||||||
|
// making it impossible to indicate a newly joined room.
|
||||||
const room = this.state.room;
|
const room = this.state.room;
|
||||||
let isUserJoined = null;
|
|
||||||
if (room) {
|
if (room) {
|
||||||
isUserJoined = room.hasMembershipState(
|
|
||||||
MatrixClientPeg.get().credentials.userId, 'join',
|
|
||||||
);
|
|
||||||
|
|
||||||
this._updateAutoComplete(room);
|
this._updateAutoComplete(room);
|
||||||
this.tabComplete.loadEntries(room);
|
this.tabComplete.loadEntries(room);
|
||||||
}
|
}
|
||||||
if (!isUserJoined && !this.state.joining && this.state.roomId) {
|
if (!this.state.joining && this.state.roomId) {
|
||||||
if (this.props.autoJoin) {
|
if (this.props.autoJoin) {
|
||||||
this.onJoinButtonClicked();
|
this.onJoinButtonClicked();
|
||||||
} else if (this.state.roomId) {
|
} else if (!room) {
|
||||||
console.log("Attempting to peek into room %s", this.state.roomId);
|
console.log("Attempting to peek into room %s", this.state.roomId);
|
||||||
this.setState({
|
this.setState({
|
||||||
peekLoading: true,
|
peekLoading: true,
|
||||||
|
@ -259,7 +259,8 @@ module.exports = React.createClass({
|
||||||
}
|
}
|
||||||
}).done();
|
}).done();
|
||||||
}
|
}
|
||||||
} else if (isUserJoined) {
|
} else if (room) {
|
||||||
|
// Stop peeking because we have joined this room previously
|
||||||
MatrixClientPeg.get().stopPeeking();
|
MatrixClientPeg.get().stopPeeking();
|
||||||
this.setState({
|
this.setState({
|
||||||
unsentMessageError: this._getUnsentMessageError(room),
|
unsentMessageError: this._getUnsentMessageError(room),
|
||||||
|
@ -622,6 +623,7 @@ module.exports = React.createClass({
|
||||||
}
|
}
|
||||||
this.setState({
|
this.setState({
|
||||||
room: room,
|
room: room,
|
||||||
|
waitingForRoom: false,
|
||||||
}, () => {
|
}, () => {
|
||||||
this._onRoomLoaded(room);
|
this._onRoomLoaded(room);
|
||||||
});
|
});
|
||||||
|
@ -677,7 +679,14 @@ module.exports = React.createClass({
|
||||||
|
|
||||||
onRoomMemberMembership: function(ev, member, oldMembership) {
|
onRoomMemberMembership: function(ev, member, oldMembership) {
|
||||||
if (member.userId == MatrixClientPeg.get().credentials.userId) {
|
if (member.userId == MatrixClientPeg.get().credentials.userId) {
|
||||||
this.forceUpdate();
|
|
||||||
|
if (member.membership === 'join') {
|
||||||
|
this.setState({
|
||||||
|
waitingForRoom: false,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
this.forceUpdate();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -1464,7 +1473,7 @@ module.exports = React.createClass({
|
||||||
onRejectClick={ this.onRejectThreepidInviteButtonClicked }
|
onRejectClick={ this.onRejectThreepidInviteButtonClicked }
|
||||||
canPreview={ false } error={ this.state.roomLoadError }
|
canPreview={ false } error={ this.state.roomLoadError }
|
||||||
roomAlias={room_alias}
|
roomAlias={room_alias}
|
||||||
spinner={this.state.joining}
|
spinner={this.state.joining || this.state.waitingForRoom}
|
||||||
inviterName={inviterName}
|
inviterName={inviterName}
|
||||||
invitedEmail={invitedEmail}
|
invitedEmail={invitedEmail}
|
||||||
room={this.state.room}
|
room={this.state.room}
|
||||||
|
@ -1583,7 +1592,7 @@ module.exports = React.createClass({
|
||||||
<RoomPreviewBar onJoinClick={this.onJoinButtonClicked}
|
<RoomPreviewBar onJoinClick={this.onJoinButtonClicked}
|
||||||
onForgetClick={ this.onForgetClick }
|
onForgetClick={ this.onForgetClick }
|
||||||
onRejectClick={this.onRejectThreepidInviteButtonClicked}
|
onRejectClick={this.onRejectThreepidInviteButtonClicked}
|
||||||
spinner={this.state.joining}
|
spinner={this.state.joining || this.state.waitingForRoom}
|
||||||
inviterName={inviterName}
|
inviterName={inviterName}
|
||||||
invitedEmail={invitedEmail}
|
invitedEmail={invitedEmail}
|
||||||
canPreview={this.state.canPeek}
|
canPreview={this.state.canPeek}
|
||||||
|
|
Loading…
Reference in a new issue