Merge pull request #216 from matrix-org/matthew/fix-join-by-room-alias

hopefully fix https://github.com/vector-im/vector-web/issues/819
pull/21833/head
Matthew Hodgson 2016-03-15 13:16:51 +00:00
commit 1a74b0c487
2 changed files with 13 additions and 4 deletions

View File

@ -325,7 +325,7 @@ module.exports = React.createClass({
break;
case 'view_room':
this._viewRoom(
payload.room_id, payload.show_settings, payload.event_id,
payload.room_id, payload.room_alias, payload.show_settings, payload.event_id,
payload.invite_sign_url, payload.oob_data
);
break;
@ -371,6 +371,7 @@ module.exports = React.createClass({
dis.dispatch({
action: 'view_room',
room_id: foundRoom.roomId,
room_alias: payload.room_alias,
event_id: payload.event_id,
invite_sign_url: payload.invite_sign_url,
oob_data: payload.oob_data,
@ -383,6 +384,7 @@ module.exports = React.createClass({
dis.dispatch({
action: 'view_room',
room_id: result.room_id,
room_alias: payload.room_alias,
event_id: payload.event_id,
invite_sign_url: payload.invite_sign_url,
oob_data: payload.oob_data,
@ -476,7 +478,7 @@ module.exports = React.createClass({
// @param {Object} oob_data Object of additional data about the room
// that has been passed out-of-band (eg.
// room name and avatar from an invite email)
_viewRoom: function(roomId, showSettings, eventId, invite_sign_url, oob_data) {
_viewRoom: function(roomId, roomAlias, showSettings, eventId, invite_sign_url, oob_data) {
// before we switch room, record the scroll state of the current room
this._updateScrollMap();
@ -484,6 +486,7 @@ module.exports = React.createClass({
var newState = {
currentRoom: roomId,
currentRoomAlias: roomAlias,
initialEventId: eventId,
highlightedEventId: eventId,
initialEventPixelOffset: undefined,
@ -508,7 +511,7 @@ module.exports = React.createClass({
// the new screen yet (we won't be showing it yet)
// The normal case where this happens is navigating
// to the room in the URL bar on page load.
var presentedId = roomId;
var presentedId = roomAlias || roomId;
var room = MatrixClientPeg.get().getRoom(roomId);
if (room) {
var theAlias = MatrixTools.getCanonicalAliasForRoom(room);
@ -912,6 +915,7 @@ module.exports = React.createClass({
<RoomView
ref="roomView"
roomId={this.state.currentRoom}
roomAlias={this.state.currentRoomAlias}
eventId={this.state.initialEventId}
inviteSignUrl={this.state.inviteSignUrl}
oobData={this.state.roomOobData}

View File

@ -56,6 +56,10 @@ module.exports = React.createClass({
roomId: React.PropTypes.string.isRequired,
// if we are referring to this room by a given alias (e.g. in the URL), track it.
// useful for joining rooms by alias correctly (and fixing https://github.com/vector-im/vector-web/issues/819)
roomAlias: React.PropTypes.string,
// The URL used to join this room from an email invite
// (given as part of the link in the invite email)
inviteSignUrl: React.PropTypes.string,
@ -529,7 +533,8 @@ module.exports = React.createClass({
}
display_name_promise.then(() => {
return MatrixClientPeg.get().joinRoom(this.props.roomId, { inviteSignUrl: this.props.inviteSignUrl } )
return MatrixClientPeg.get().joinRoom(this.props.roomAlias || this.props.roomId,
{ inviteSignUrl: this.props.inviteSignUrl } )
}).done(function() {
// It is possible that there is no Room yet if state hasn't come down
// from /sync - joinRoom will resolve when the HTTP request to join succeeds,