diff --git a/src/components/structures/RoomSubList.js b/src/components/structures/RoomSubList.js
index 13330ec687..461c87fb0b 100644
--- a/src/components/structures/RoomSubList.js
+++ b/src/components/structures/RoomSubList.js
@@ -61,20 +61,34 @@ var RoomSubList = React.createClass({
tagName: React.PropTypes.string,
editable: React.PropTypes.bool,
order: React.PropTypes.string.isRequired,
- bottommost: React.PropTypes.bool,
selectedRoom: React.PropTypes.string.isRequired,
activityMap: React.PropTypes.object.isRequired,
+ startAsHidden: React.PropTypes.bool,
+ showSpinner: React.PropTypes.bool, // true to show a spinner if 0 elements when expanded
+
+ // TODO: Fix the name of this. This is too easily confused with the
+ // "hidden" state which is the expanded (or not) view of the list of rooms.
+ // What this prop *really* does is control whether the room name is displayed
+ // so it should be named as such.
collapsed: React.PropTypes.bool.isRequired,
- incomingCall: React.PropTypes.object,
+ onHeaderClick: React.PropTypes.func,
+ alwaysShowHeader: React.PropTypes.bool,
+ incomingCall: React.PropTypes.object
},
getInitialState: function() {
return {
- hidden: false,
+ hidden: this.props.startAsHidden || false,
sortedList: [],
};
},
+ getDefaultProps: function() {
+ return {
+ onHeaderClick: function() {} // NOP
+ };
+ },
+
componentWillMount: function() {
this.sortList(this.props.list, this.props.order);
},
@@ -86,7 +100,9 @@ var RoomSubList = React.createClass({
},
onClick: function(ev) {
- this.setState({ hidden : !this.state.hidden });
+ var isHidden = !this.state.hidden;
+ this.setState({ hidden : isHidden });
+ this.props.onHeaderClick(isHidden);
},
tsOfNewestEvent: function(room) {
@@ -247,6 +263,17 @@ var RoomSubList = React.createClass({
});
},
+ _getHeaderJsx: function() {
+ return (
+
+ { this.props.collapsed ? '' : this.props.label }
+
+
+ );
+ },
+
render: function() {
var connectDropTarget = this.props.connectDropTarget;
var RoomDropTarget = sdk.getComponent('rooms.RoomDropTarget');
@@ -262,8 +289,7 @@ var RoomSubList = React.createClass({
if (this.state.sortedList.length > 0 || this.props.editable) {
var subList;
- var classes = "mx_RoomSubList" +
- (this.props.bottommost ? " mx_RoomSubList_bottommost" : "");
+ var classes = "mx_RoomSubList";
if (!this.state.hidden) {
subList =
@@ -278,16 +304,17 @@ var RoomSubList = React.createClass({
return connectDropTarget(
-
{ this.props.collapsed ? '' : this.props.label }
-
-
+ { this._getHeaderJsx() }
{ subList }
);
}
else {
+ var Loader = sdk.getComponent("elements.Spinner");
return (
+ { this.props.alwaysShowHeader ? this._getHeaderJsx() : undefined }
+ { (this.props.showSpinner && !this.state.hidden) ? : undefined }
);
}
diff --git a/src/skins/vector/css/organisms/RoomList.css b/src/skins/vector/css/organisms/RoomList.css
index bb81686c38..6b8152e097 100644
--- a/src/skins/vector/css/organisms/RoomList.css
+++ b/src/skins/vector/css/organisms/RoomList.css
@@ -17,6 +17,7 @@ limitations under the License.
.mx_RoomList {
padding-top: 24px;
padding-bottom: 12px;
+ min-height: 400px;
}
.mx_RoomList_expandButton {
diff --git a/src/skins/vector/css/organisms/RoomSubList.css b/src/skins/vector/css/organisms/RoomSubList.css
index b143c998c0..46bcc64a1a 100644
--- a/src/skins/vector/css/organisms/RoomSubList.css
+++ b/src/skins/vector/css/organisms/RoomSubList.css
@@ -20,11 +20,6 @@ limitations under the License.
width: 100%;
}
-.mx_RoomSubList_bottommost {
- /* XXX: this should really be 100% of the RoomList height, but can't seem to get at it */
- min-height: 400px;
-}
-
.mx_RoomSubList_label {
text-transform: uppercase;
color: #3d3b39;