diff --git a/src/component-index.js b/src/component-index.js index 329e46b0fe..359c314717 100644 --- a/src/component-index.js +++ b/src/component-index.js @@ -67,6 +67,7 @@ module.exports.components['views.rooms.MemberTile'] = require('./components/view module.exports.components['views.rooms.MessageComposer'] = require('./components/views/rooms/MessageComposer'); module.exports.components['views.rooms.RoomHeader'] = require('./components/views/rooms/RoomHeader'); module.exports.components['views.rooms.RoomList'] = require('./components/views/rooms/RoomList'); +module.exports.components['views.rooms.RoomPreviewBar'] = require('./components/views/rooms/RoomPreviewBar'); module.exports.components['views.rooms.RoomSettings'] = require('./components/views/rooms/RoomSettings'); module.exports.components['views.rooms.RoomTile'] = require('./components/views/rooms/RoomTile'); module.exports.components['views.rooms.SearchResultTile'] = require('./components/views/rooms/SearchResultTile'); diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js index f3083bc717..9d79dd1a4a 100644 --- a/src/components/structures/RoomView.js +++ b/src/components/structures/RoomView.js @@ -76,8 +76,9 @@ module.exports = React.createClass({ syncState: MatrixClientPeg.get().getSyncState(), hasUnsentMessages: this._hasUnsentMessages(room), callState: null, + guestsCanJoin: false, readMarkerEventId: room.getEventReadUpTo(MatrixClientPeg.get().credentials.userId), - readMarkerGhostEventId: undefined, + readMarkerGhostEventId: undefined } }, @@ -111,15 +112,27 @@ module.exports = React.createClass({ // succeeds then great, show the preview (but we still may be able to /join!). if (!this.state.room) { console.log("Attempting to peek into room %s", this.props.roomId); - MatrixClientPeg.get().peekInRoom(this.props.roomId).done(function() { + MatrixClientPeg.get().peekInRoom(this.props.roomId).done(() => { // we don't need to do anything - JS SDK will emit Room events - // which will update the UI. + // which will update the UI. We *do* however need to know if we + // can join the room so we can fiddle with the UI appropriately. + var peekedRoom = MatrixClientPeg.get().getRoom(this.props.roomId); + if (!peekedRoom) { + return; + } + var guestAccessEvent = peekedRoom.currentState.getStateEvents("m.room.guest_access", ""); + if (!guestAccessEvent) { + return; + } + if (guestAccessEvent.getContent().guest_access === "can_join") { + this.setState({ + guestsCanJoin: true + }); + } }, function(err) { console.error("Failed to peek into room: %s", err); }); } - - }, componentWillUnmount: function() { @@ -826,7 +839,7 @@ module.exports = React.createClass({ // is the last element or not, because we only decide as we're going along. if (readMarkerIndex === undefined && ghostIndex && ghostIndex <= ret.length) { var hr; - hr = (