Skip to content

Commit 68fd5b5

Browse files
committed
Detach custom event listener
1 parent e56cf3e commit 68fd5b5

File tree

3 files changed

+56
-12
lines changed

3 files changed

+56
-12
lines changed

src/decorators/customEvent.js

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,27 @@ const setUntargetItems = function (currentTarget, targetArray) {
3333
}
3434
}
3535

36-
let customListener
36+
const customListeners = {
37+
registry: new WeakMap(),
38+
set (target, event, listener) {
39+
if (this.registry.has(target)) {
40+
const map = this.registry.get(target)
41+
map[event] = listener
42+
return this.registry
43+
}
44+
45+
return this.registry.set(target, { [event]: listener })
46+
},
47+
48+
get (target, event) {
49+
const map = this.registry.get(target)
50+
if (map !== undefined) {
51+
return map[event]
52+
}
53+
54+
return void 0
55+
}
56+
}
3757

3858
export default function (target) {
3959
target.prototype.isCustomEvent = function (ele) {
@@ -48,8 +68,9 @@ export default function (target) {
4868
const dataEventOff = ele.getAttribute('data-event-off') || eventOff
4969

5070
dataEvent.split(' ').forEach(event => {
51-
ele.removeEventListener(event, customListener)
52-
customListener = checkStatus.bind(this, dataEventOff)
71+
ele.removeEventListener(event, customListeners.get(ele, event))
72+
const customListener = checkStatus.bind(this, dataEventOff)
73+
customListeners.set(ele, event, customListener)
5374
ele.addEventListener(event, customListener, false)
5475
})
5576
if (dataEventOff) {
@@ -66,7 +87,7 @@ export default function (target) {
6687
const dataEvent = event || ele.getAttribute('data-event')
6788
const dataEventOff = eventOff || ele.getAttribute('data-event-off')
6889

69-
ele.removeEventListener(dataEvent, customListener)
90+
ele.removeEventListener(dataEvent, customListeners.get(ele, event))
7091
if (dataEventOff) ele.removeEventListener(dataEventOff, this.hideTooltip)
7192
}
7293
}

standalone/react-tooltip.js

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1240,8 +1240,9 @@ exports.default = function (target) {
12401240
var dataEventOff = ele.getAttribute('data-event-off') || eventOff;
12411241

12421242
dataEvent.split(' ').forEach(function (event) {
1243-
ele.removeEventListener(event, customListener);
1244-
customListener = checkStatus.bind(_this, dataEventOff);
1243+
ele.removeEventListener(event, customListeners.get(ele, event));
1244+
var customListener = checkStatus.bind(_this, dataEventOff);
1245+
customListeners.set(ele, event, customListener);
12451246
ele.addEventListener(event, customListener, false);
12461247
});
12471248
if (dataEventOff) {
@@ -1261,11 +1262,13 @@ exports.default = function (target) {
12611262
var dataEvent = event || ele.getAttribute('data-event');
12621263
var dataEventOff = eventOff || ele.getAttribute('data-event-off');
12631264

1264-
ele.removeEventListener(dataEvent, customListener);
1265+
ele.removeEventListener(dataEvent, customListeners.get(ele, event));
12651266
if (dataEventOff) ele.removeEventListener(dataEventOff, this.hideTooltip);
12661267
};
12671268
};
12681269

1270+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
1271+
12691272
/**
12701273
* Custom events to control showing and hiding of tooltip
12711274
*
@@ -1302,7 +1305,26 @@ var setUntargetItems = function setUntargetItems(currentTarget, targetArray) {
13021305
}
13031306
};
13041307

1305-
var customListener = void 0;
1308+
var customListeners = {
1309+
registry: new WeakMap(),
1310+
set: function set(target, event, listener) {
1311+
if (this.registry.has(target)) {
1312+
var map = this.registry.get(target);
1313+
map[event] = listener;
1314+
return this.registry;
1315+
}
1316+
1317+
return this.registry.set(target, _defineProperty({}, event, listener));
1318+
},
1319+
get: function get(target, event) {
1320+
var map = this.registry.get(target);
1321+
if (map !== undefined) {
1322+
return map[event];
1323+
}
1324+
1325+
return void 0;
1326+
}
1327+
};
13061328

13071329
},{}],14:[function(require,module,exports){
13081330
'use strict';
@@ -1806,9 +1828,9 @@ var ReactTooltip = (0, _staticMethods2.default)(_class = (0, _windowListener2.de
18061828
var content = void 0;
18071829
if (getContent) {
18081830
if (Array.isArray(getContent)) {
1809-
content = getContent[0] && getContent[0]();
1831+
content = getContent[0] && getContent[0](this.state.originTooltip);
18101832
} else {
1811-
content = getContent();
1833+
content = getContent(this.state.originTooltip);
18121834
}
18131835
}
18141836

0 commit comments

Comments
 (0)