Merge pull request #1290 from matrix-org/luke/fix-user-url-no-middle-panel

At /user, view member of current room
This commit is contained in:
David Baker 2017-08-11 10:49:22 +01:00 committed by GitHub
commit 02217c8bd2
2 changed files with 36 additions and 12 deletions

View file

@ -301,13 +301,13 @@ export default React.createClass({
case PageTypes.UserView: case PageTypes.UserView:
page_element = null; // deliberately null for now page_element = null; // deliberately null for now
right_panel = <RightPanel userId={this.props.viewUserId} opacity={this.props.rightOpacity} />; right_panel = <RightPanel opacity={this.props.rightOpacity} />;
break; break;
case PageTypes.GroupView: case PageTypes.GroupView:
page_element = <GroupView page_element = <GroupView
groupId={this.props.currentGroupId} groupId={this.props.currentGroupId}
/>; />;
//right_panel = <RightPanel userId={this.props.viewUserId} opacity={this.props.rightOpacity} />; //right_panel = <RightPanel opacity={this.props.rightOpacity} />;
break; break;
} }

View file

@ -448,6 +448,7 @@ module.exports = React.createClass({
}); });
}, 0); }, 0);
} }
this.notifyNewScreen('user/' + payload.member.userId);
break; break;
case 'view_room': case 'view_room':
// Takes either a room ID or room alias: if switching to a room the client is already // Takes either a room ID or room alias: if switching to a room the client is already
@ -1203,21 +1204,44 @@ module.exports = React.createClass({
} else if (screen.indexOf('user/') == 0) { } else if (screen.indexOf('user/') == 0) {
const userId = screen.substring(5); const userId = screen.substring(5);
if (params.action === 'chat') { // Wait for the first sync so that `getRoom` gives us a room object if it's
this._chatCreateOrReuse(userId); // in the sync response
return; const waitFor = this.firstSyncPromise ?
} this.firstSyncPromise.promise : Promise.resolve();
waitFor.then(() => {
if (params.action === 'chat') {
this._chatCreateOrReuse(userId);
return;
}
this.setState({ viewUserId: userId }); // Get the member object for the current room, if a current room is set or
this._setPage(PageTypes.UserView); // we have a last_room in localStorage. The user might not be a member of
this.notifyNewScreen('user/' + userId); // this room (in which case member will be falsey).
const member = new Matrix.RoomMember(null, userId); let member;
if (member) { const roomId = this.state.currentRoomId || localStorage.getItem('mx_last_room_id');
if (roomId) {
const room = MatrixClientPeg.get().getRoom(roomId);
if (room) {
member = room.getMember(userId);
}
}
if (member) {
// This user is a member of this room, so view the room
dis.dispatch({
action: 'view_room',
room_id: roomId,
});
} else {
// This user is not a member of this room, show the user view
member = new Matrix.RoomMember(null, userId);
this._setPage(PageTypes.UserView);
}
dis.dispatch({ dis.dispatch({
action: 'view_user', action: 'view_user',
member: member, member: member,
}); });
} });
} else if (screen.indexOf('group/') == 0) { } else if (screen.indexOf('group/') == 0) {
const groupId = screen.substring(6); const groupId = screen.substring(6);