@@ -2,6 +2,7 @@ import getProp from 'lodash/get';
22import { IntlShape } from 'react-intl' ;
33import * as store from '../store' ;
44import API from '../api' ;
5+ import DeselectManager from './DeselectManager' ;
56import EventEmitter from './EventEmitter' ;
67import i18n from '../utils/i18n' ;
78import messages from '../messages' ;
@@ -55,6 +56,8 @@ export default class BaseAnnotator extends EventEmitter {
5556
5657 container : Container ;
5758
59+ deselectManager : DeselectManager | null = null ;
60+
5861 features : Features ;
5962
6063 intl : IntlShape ;
@@ -120,7 +123,9 @@ export default class BaseAnnotator extends EventEmitter {
120123 this . annotatedEl . classList . remove ( CSS_LOADED_CLASS ) ;
121124 }
122125
123- document . removeEventListener ( 'mousedown' , this . handleMouseDown ) ;
126+ if ( this . deselectManager ) {
127+ this . deselectManager . destroy ( ) ;
128+ }
124129
125130 this . removeAnnotationClasses ( ) ;
126131
@@ -131,12 +136,6 @@ export default class BaseAnnotator extends EventEmitter {
131136 }
132137
133138 public init ( scale = 1 , rotation = 0 ) : void {
134- // Check for containerEl prevents listener from being added on subsequent calls to init
135- if ( ! this . containerEl ) {
136- // Add document listener to handle setting active annotation to null on mousedown
137- document . addEventListener ( 'mousedown' , this . handleMouseDown ) ;
138- }
139-
140139 this . containerEl = this . getElement ( this . container ) ;
141140 this . annotatedEl = this . getAnnotatedElement ( ) ;
142141
@@ -203,10 +202,6 @@ export default class BaseAnnotator extends EventEmitter {
203202 return typeof selector === 'string' ? document . querySelector ( selector ) : selector ;
204203 }
205204
206- protected handleMouseDown = ( ) : void => {
207- this . setActiveId ( null ) ;
208- } ;
209-
210205 protected handleRemove = ( annotationId : string ) : void => {
211206 this . removeAnnotation ( annotationId ) ;
212207 } ;
@@ -248,4 +243,17 @@ export default class BaseAnnotator extends EventEmitter {
248243 protected render ( ) : void {
249244 // Must be implemented in child class
250245 }
246+
247+ public postRender ( ) : void {
248+ if ( ! this . annotatedEl ) {
249+ return ;
250+ }
251+
252+ if ( this . deselectManager ) {
253+ this . deselectManager . destroy ( ) ;
254+ }
255+
256+ this . deselectManager = new DeselectManager ( { referenceEl : this . annotatedEl } ) ;
257+ this . deselectManager . render ( { store : this . store } ) ;
258+ }
251259}
0 commit comments