diff --git a/src/components/structures/MatrixChat.js b/src/components/structures/MatrixChat.js index df74cf5de1..debfca3388 100644 --- a/src/components/structures/MatrixChat.js +++ b/src/components/structures/MatrixChat.js @@ -64,7 +64,7 @@ module.exports = React.createClass({ collapse_lhs: false, collapse_rhs: false, ready: false, - width: 10000 + width: 10000, }; if (s.logged_in) { if (MatrixClientPeg.get().getRooms().length) { @@ -304,7 +304,7 @@ module.exports = React.createClass({ }); break; case 'view_room': - this._viewRoom(payload.room_id); + this._viewRoom(payload.room_id, payload.show_settings); break; case 'view_prev_room': roomIndexDelta = -1; @@ -357,8 +357,29 @@ module.exports = React.createClass({ this.notifyNewScreen('settings'); break; case 'view_create_room': - this._setPage(this.PageTypes.CreateRoom); - this.notifyNewScreen('new'); + //this._setPage(this.PageTypes.CreateRoom); + //this.notifyNewScreen('new'); + + var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog"); + var Loader = sdk.getComponent("elements.Spinner"); + var modal = Modal.createDialog(Loader); + + MatrixClientPeg.get().createRoom({ + preset: "private_chat" + }).done(function(res) { + modal.close(); + dis.dispatch({ + action: 'view_room', + room_id: res.room_id, + show_settings: true, + }); + }, function(err) { + modal.close(); + Modal.createDialog(ErrorDialog, { + title: "Failed to create room", + description: err.toString() + }); + }); break; case 'view_room_directory': this._setPage(this.PageTypes.RoomDirectory); @@ -399,7 +420,7 @@ module.exports = React.createClass({ }); }, - _viewRoom: function(roomId) { + _viewRoom: function(roomId, showSettings) { // before we switch room, record the scroll state of the current room this._updateScrollMap(); @@ -437,6 +458,9 @@ module.exports = React.createClass({ var scrollState = this.scrollStateMap[roomId]; this.refs.roomView.restoreScrollState(scrollState); } + if (this.refs.roomView && showSettings) { + this.refs.roomView.showSettings(true); + } }, // update scrollStateMap according to the current scroll state of the diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js index 0688b98ca5..c65a94ecfe 100644 --- a/src/components/structures/RoomView.js +++ b/src/components/structures/RoomView.js @@ -79,7 +79,7 @@ module.exports = React.createClass({ hasUnsentMessages: this._hasUnsentMessages(room), callState: null, guestsCanJoin: false, - readMarkerEventId: room.getEventReadUpTo(MatrixClientPeg.get().credentials.userId), + readMarkerEventId: room ? room.getEventReadUpTo(MatrixClientPeg.get().credentials.userId) : undefined, readMarkerGhostEventId: undefined } }, @@ -894,7 +894,7 @@ module.exports = React.createClass({ old_guest_join = (old_guest_join.getContent().guest_access === "can_join"); } else { - old_guest_join = (old_guest_join.getContent().guest_access === "forbidden"); + old_guest_join = false; } var old_canonical_alias = this.state.room.currentState.getStateEvents('m.room.canonical_alias', ''); @@ -1337,6 +1337,13 @@ module.exports = React.createClass({ } }, + showSettings: function(show) { + // XXX: this is a bit naughty; we should be doing this via props + if (show) { + this.setState({editingRoomSettings: true}); + } + }, + render: function() { var RoomHeader = sdk.getComponent('rooms.RoomHeader'); var MessageComposer = sdk.getComponent('rooms.MessageComposer'); @@ -1487,7 +1494,7 @@ module.exports = React.createClass({ var aux = null; if (this.state.editingRoomSettings) { - aux = ; + aux = ; } else if (this.state.uploadingRoomSettings) { var Loader = sdk.getComponent("elements.Spinner"); diff --git a/src/components/views/elements/EditableText.js b/src/components/views/elements/EditableText.js index 32a90de7c7..2db4bec556 100644 --- a/src/components/views/elements/EditableText.js +++ b/src/components/views/elements/EditableText.js @@ -61,7 +61,12 @@ module.exports = React.createClass({ }, componentWillReceiveProps: function(nextProps) { - this.value = nextProps.initialValue; + if (nextProps.initialValue !== this.props.initialValue) { + this.value = nextProps.initialValue; + if (this.refs.editable_div) { + this.showPlaceholder(!this.value); + } + } }, componentDidMount: function() { @@ -71,11 +76,7 @@ module.exports = React.createClass({ } }, - componentDidUpdate: function(newProps) { - this.value = this.props.initialValue; - if (this.refs.editable_div) { - this.showPlaceholder(!this.value); - } + componentDidUpdate: function() { }, showPlaceholder: function(show) { diff --git a/src/components/views/rooms/MemberList.js b/src/components/views/rooms/MemberList.js index eac5466e88..535c194ea1 100644 --- a/src/components/views/rooms/MemberList.js +++ b/src/components/views/rooms/MemberList.js @@ -281,7 +281,7 @@ module.exports = React.createClass({ } else { return (
- +
); } diff --git a/src/components/views/rooms/RoomHeader.js b/src/components/views/rooms/RoomHeader.js index 21a030e7f2..8d419f7be6 100644 --- a/src/components/views/rooms/RoomHeader.js +++ b/src/components/views/rooms/RoomHeader.js @@ -155,7 +155,7 @@ module.exports = React.createClass({ // calculate permissions. XXX: this should be done on mount or something, and factored out with RoomSettings var power_levels = this.props.room.currentState.getStateEvents('m.room.power_levels', ''); - var events_levels = power_levels.events || {}; + var events_levels = (power_levels ? power_levels.events : {}) || {}; var user_id = MatrixClientPeg.get().credentials.userId; if (power_levels) { @@ -169,20 +169,21 @@ module.exports = React.createClass({ var user_levels = []; var current_user_level = 0; } + var state_default = parseInt((power_levels ? power_levels.state_default : 0) || 0); - var room_avatar_level = parseInt(power_levels.state_default || 0); + var room_avatar_level = state_default; if (events_levels['m.room.avatar'] !== undefined) { room_avatar_level = events_levels['m.room.avatar']; } var can_set_room_avatar = current_user_level >= room_avatar_level; - var room_name_level = parseInt(power_levels.state_default || 0); + var room_name_level = state_default; if (events_levels['m.room.name'] !== undefined) { room_name_level = events_levels['m.room.name']; } var can_set_room_name = current_user_level >= room_name_level; - var room_topic_level = parseInt(power_levels.state_default || 0); + var room_topic_level = state_default; if (events_levels['m.room.topic'] !== undefined) { room_topic_level = events_levels['m.room.topic']; } diff --git a/src/components/views/rooms/RoomSettings.js b/src/components/views/rooms/RoomSettings.js index b14c103efd..25184387c8 100644 --- a/src/components/views/rooms/RoomSettings.js +++ b/src/components/views/rooms/RoomSettings.js @@ -39,9 +39,16 @@ module.exports = React.createClass({ propTypes: { room: React.PropTypes.object.isRequired, + onSaveClick: React.PropTypes.func, + onCancelClick: React.PropTypes.func, }, componentDidMount: function() { + // XXX: dirty hack to gutwrench to focus on the invite box + if (this.props.room.getJoinedMembers().length == 1) { + var inviteBox = document.getElementById("mx_MemberList_invite"); + if (inviteBox) setTimeout(function() { inviteBox.focus(); }, 0); + } }, getInitialState: function() { @@ -310,7 +317,7 @@ module.exports = React.createClass({ guest_access = guest_access.getContent().guest_access; } - var events_levels = power_levels.events || {}; + var events_levels = (power_levels ? power_levels.events : {}) || {}; var user_id = MatrixClientPeg.get().credentials.userId; @@ -359,13 +366,15 @@ module.exports = React.createClass({ var can_change_levels = false; } - var room_aliases_level = parseInt(power_levels.state_default || 0); + var state_default = (parseInt(power_levels ? power_levels.state_default : 0) || 0); + + var room_aliases_level = state_default; if (events_levels['m.room.aliases'] !== undefined) { room_avatar_level = events_levels['m.room.aliases']; } var can_set_room_aliases = current_user_level >= room_aliases_level; - var canonical_alias_level = parseInt(power_levels.state_default || 0); + var canonical_alias_level = state_default; if (events_levels['m.room.canonical_alias'] !== undefined) { room_avatar_level = events_levels['m.room.canonical_alias']; }