diff --git a/src/components/views/rooms/RoomList.js b/src/components/views/rooms/RoomList.js index b55802746e..bbcef5286d 100644 --- a/src/components/views/rooms/RoomList.js +++ b/src/components/views/rooms/RoomList.js @@ -134,6 +134,11 @@ module.exports = React.createClass({ } }, + onSubListHeaderClick: function(isHidden) { + // The scroll area has expanded or contracted, so re-calculate sticky headers positions + this._updateStickyHeaders(undefined, true); + }, + onRoomTimeline: function(ev, room, toStartOfTimeline) { if (toStartOfTimeline) return; this._delayedRefreshRoomList(); @@ -311,21 +316,21 @@ module.exports = React.createClass({ } }, - _initAndPositionStickyHeaders: function(e, firstTime) { - // Do the sticky header stuf here, both the initilaisation (firstTime === true) - // and the updating when scrolling (firstTime === false) + _initAndPositionStickyHeaders: function(e, initialise) { + // Do the sticky header stuf here, both the initilaisation (initialise === true) + // and the updating when scrolling (initialise === false) // use direct DOM access as done in _repositionIncomingCallBox var self = this; - var stickies = document.getElementsByClassName("mx_RoomSubList_stickyContainer"); var scrollArea = self._getScrollNode(); var scrollAreaHeight = scrollArea.getBoundingClientRect().height; // console.log(scrollArea); // console.log("scrollAreaHeight: " + scrollAreaHeight); - if (firstTime) { + if (initialise) { + var stickies = document.getElementsByClassName("mx_RoomSubList_labelContainer"); if (typeof stickies === "object" && stickies.length > 0) { // Initialise the sticky headers self.stickyWrappers = Array.prototype.map.call(stickies, function(sticky, i) { @@ -379,24 +384,24 @@ module.exports = React.createClass({ _stickyWrappers: [], - _updateStickyHeaders: function(e, firstTime) { - // Do the sticky header stuff here, both the initilaisation (firstTime === true) - // and the updating when scrolling (firstTime === false) + _updateStickyHeaders: function(e, initialise) { + // Do the sticky header stuff here, both the initilaisation (initialise === true) + // and the updating when scrolling (initialise === false) // use direct DOM access as done in _repositionIncomingCallBox var self = this; - if (firstTime) { + if (initialise) { // Useing requestAnimationFrame to ensure that the code is run after the painting // of the newly rendered object window.requestAnimationFrame(function() { //console.log("### D E B U G requestAnimationFrame S T A R T ###"); - self._initAndPositionStickyHeaders(e, firstTime); + self._initAndPositionStickyHeaders(e, initialise); //console.log("### D E B U G requestAnimationFrame F I N I S H ###"); }); } else { //console.log("### D E B U G S T A R T ###"); - this._initAndPositionStickyHeaders(e, firstTime); + this._initAndPositionStickyHeaders(e, initialise); //console.log("### D E B U G F I N I S H ###"); } }, @@ -423,6 +428,7 @@ module.exports = React.createClass({ incomingCall={ self.state.incomingCall } collapsed={ self.props.collapsed } searchFilter={ self.props.searchFilter } + onHeaderClick={ self.onSubListHeaderClick } onShowMoreRooms={ self.onShowMoreRooms } /> { Object.keys(self.state.lists).map(function(tagName) { @@ -471,6 +480,7 @@ module.exports = React.createClass({ incomingCall={ self.state.incomingCall } collapsed={ self.props.collapsed } searchFilter={ self.props.searchFilter } + onHeaderClick={ self.onSubListHeaderClick } onShowMoreRooms={ self.onShowMoreRooms } /> } @@ -486,6 +496,7 @@ module.exports = React.createClass({ incomingCall={ self.state.incomingCall } collapsed={ self.props.collapsed } searchFilter={ self.props.searchFilter } + onHeaderClick={ self.onSubListHeaderClick } onShowMoreRooms={ self.onShowMoreRooms } />