{ auxPanel }
diff --git a/src/components/structures/ScrollPanel.js b/src/components/structures/ScrollPanel.js
index cdb79686ad..799c88140e 100644
--- a/src/components/structures/ScrollPanel.js
+++ b/src/components/structures/ScrollPanel.js
@@ -149,6 +149,8 @@ module.exports = React.createClass({
componentWillMount: function() {
this._pendingFillRequests = {b: null, f: null};
+ this.props.resizeNotifier.on("middlePanelResized", this.onResize);
+
this.resetScrollState();
},
@@ -171,6 +173,7 @@ module.exports = React.createClass({
//
// (We could use isMounted(), but facebook have deprecated that.)
this.unmounted = true;
+ this.props.resizeNotifier.removeListener("middlePanelResized", this.onResize);
},
onScroll: function(ev) {
diff --git a/src/components/structures/TimelinePanel.js b/src/components/structures/TimelinePanel.js
index 911499e314..537862ab1e 100644
--- a/src/components/structures/TimelinePanel.js
+++ b/src/components/structures/TimelinePanel.js
@@ -1227,6 +1227,7 @@ var TimelinePanel = React.createClass({
alwaysShowTimestamps={this.state.alwaysShowTimestamps}
className={this.props.className}
tileShape={this.props.tileShape}
+ resizeNotifier={this.props.resizeNotifier}
/>
);
},
diff --git a/src/utils/ResizeNotifier.js b/src/utils/ResizeNotifier.js
new file mode 100644
index 0000000000..43578ebcaa
--- /dev/null
+++ b/src/utils/ResizeNotifier.js
@@ -0,0 +1,52 @@
+/*
+Copyright 2019 New Vector Ltd
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+/**
+ * Fires when the middle panel has been resized.
+ * @event module:utils~ResizeNotifier#"middlePanelResized"
+ */
+import { EventEmitter } from "events";
+import { throttle } from "lodash";
+
+export default class ResizeNotifier extends EventEmitter {
+
+ constructor() {
+ super();
+ // with default options, will call fn once at first call, and then every x ms
+ // if there was another call in that timespan
+ this._throttledMiddlePanel = throttle(() => this.emit("middlePanelResized"), 200);
+ }
+
+ notifyBannersChanged() {
+ this.emit("middlePanelResized");
+ }
+
+ // can be called in quick succession
+ notifyLeftHandleResized() {
+ this._throttledMiddlePanel();
+ }
+
+ // can be called in quick succession
+ notifyRightHandleResized() {
+ this._throttledMiddlePanel();
+ }
+
+ // can be called in quick succession
+ notifyWindowResized() {
+ this._throttledMiddlePanel();
+ }
+}
+