Don't remove event-listeners when disconnecting
Instead remove event-listeners when the target changes. We can not
remove them when disconnecting because then the hovercard won't show up
again after it was hidden the first time.
Change-Id: I1d6c25fa802276e7982addf41972c271016c89d7
diff --git a/polygerrit-ui/app/elements/shared/gr-hovercard/gr-hovercard-behavior.ts b/polygerrit-ui/app/elements/shared/gr-hovercard/gr-hovercard-behavior.ts
index 82af365..3d8702b 100644
--- a/polygerrit-ui/app/elements/shared/gr-hovercard/gr-hovercard-behavior.ts
+++ b/polygerrit-ui/app/elements/shared/gr-hovercard/gr-hovercard-behavior.ts
@@ -129,12 +129,8 @@
super.connectedCallback();
if (!this._target) {
this._target = this.target;
+ this.addTargetEventListeners();
}
- this._target.addEventListener('mouseenter', this.debounceShow);
- this._target.addEventListener('focus', this.debounceShow);
- this._target.addEventListener('mouseleave', this.debounceHide);
- this._target.addEventListener('blur', this.debounceHide);
- this._target.addEventListener('click', this.hide);
// show the hovercard if mouse moves to hovercard
// this will cancel pending hide as well
@@ -149,12 +145,23 @@
this.cancelShowTask();
this.cancelHideTask();
this.unlock();
+ super.disconnectedCallback();
+ }
+
+ addTargetEventListeners() {
+ this._target?.addEventListener('mouseenter', this.debounceShow);
+ this._target?.addEventListener('focus', this.debounceShow);
+ this._target?.addEventListener('mouseleave', this.debounceHide);
+ this._target?.addEventListener('blur', this.debounceHide);
+ this._target?.addEventListener('click', this.hide);
+ }
+
+ removeTargetEventListeners() {
this._target?.removeEventListener('mouseenter', this.debounceShow);
this._target?.removeEventListener('focus', this.debounceShow);
this._target?.removeEventListener('mouseleave', this.debounceHide);
this._target?.removeEventListener('blur', this.debounceHide);
this._target?.removeEventListener('click', this.hide);
- super.disconnectedCallback();
}
override ready() {
@@ -457,7 +464,9 @@
*/
@observe('for')
_forChanged() {
+ this.removeTargetEventListeners();
this._target = this.target;
+ this.addTargetEventListeners();
}
}