From 9547d02a7e4706800773d7cc3ca7acc49a9d4750 Mon Sep 17 00:00:00 2001 From: Forrest Li Date: Fri, 11 May 2018 11:45:17 -0400 Subject: [PATCH] fix(VisibilityToolbar): Apply visibility when viewer changes --- src/widgets/VisibilityToolbar.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/widgets/VisibilityToolbar.js b/src/widgets/VisibilityToolbar.js index 32bcf5c..a398b92 100644 --- a/src/widgets/VisibilityToolbar.js +++ b/src/widgets/VisibilityToolbar.js @@ -11,6 +11,7 @@ export default class VisibilityToolbar extends React.Component { }; this.containerEl = null; + this.subscribes = []; this.toggleDropdown = this.toggleDropdown.bind(this); this.onDocMouseDown = this.onDocMouseDown.bind(this); @@ -18,10 +19,18 @@ export default class VisibilityToolbar extends React.Component { componentDidMount() { document.addEventListener('mousedown', this.onDocMouseDown, true); + this.subscribeToViewer(this.props.viewer); + } + + componentDidUpdate(prevProps) { + if (prevProps.viewer !== this.props.viewer) { + this.subscribeToViewer(this.props.viewer); + } } componentWillUnmount() { document.removeEventListener('mousedown', this.onDocMouseDown, true); + this.subscribeToViewer(null); } onDocMouseDown(ev) { @@ -38,6 +47,15 @@ export default class VisibilityToolbar extends React.Component { } } + subscribeToViewer(viewer) { + while (this.subscribes.length) { + this.subscribes.pop().unsubscribe(); + } + if (viewer) { + this.subscribes = [viewer.onModified(viewer.applyVisibility)]; + } + } + toggleDropdown(ev) { this.setState(({ dropdownVisible }) => ({ dropdownVisible: !dropdownVisible,