Skip to content

Commit 4f89a2d

Browse files
committed
fix(isCapture): guard use of currentTarget
currentTarget was undefined, save it's value using state before using in scroll listener.
1 parent b3ed903 commit 4f89a2d

File tree

4 files changed

+16
-12
lines changed

4 files changed

+16
-12
lines changed

src/decorators/isCapture.js

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
export default function (target) {
66
target.prototype.isCapture = function (currentTarget) {
7+
if (!currentTarget) return false
78
const dataIsCapture = currentTarget.getAttribute('data-iscapture')
89
return dataIsCapture && dataIsCapture === 'true' || this.props.isCapture || false
910
}

src/index.js

+6-5
Original file line numberDiff line numberDiff line change
@@ -299,9 +299,10 @@ class ReactTooltip extends React.Component {
299299
extraClass: e.currentTarget.getAttribute('data-class') || this.props.class || this.props.className || '',
300300
disable: e.currentTarget.getAttribute('data-tip-disable')
301301
? e.currentTarget.getAttribute('data-tip-disable') === 'true'
302-
: (this.props.disable || false)
302+
: (this.props.disable || false),
303+
currentTarget: e.currentTarget
303304
}, () => {
304-
if (scrollHide) this.addScrollListener(e)
305+
if (scrollHide) this.addScrollListener(this.state.currentTarget)
305306
this.updateTooltip(e)
306307

307308
if (getContent && Array.isArray(getContent)) {
@@ -328,7 +329,7 @@ class ReactTooltip extends React.Component {
328329
const {afterShow} = this.props
329330
const placeholder = this.getTooltipContent()
330331
const delayTime = show ? 0 : parseInt(delayShow, 10)
331-
const eventTarget = e.currentTarget
332+
const eventTarget = e.currentTarget || e.target
332333

333334
if (this.isEmptyTip(placeholder) || disable) return // if the tooltip is empty, disable the tooltip
334335
const updateState = () => {
@@ -390,8 +391,8 @@ class ReactTooltip extends React.Component {
390391
* Add scroll eventlistener when tooltip show
391392
* automatically hide the tooltip when scrolling
392393
*/
393-
addScrollListener (e) {
394-
const isCaptureMode = this.isCapture(e.currentTarget)
394+
addScrollListener (currentTarget) {
395+
const isCaptureMode = this.isCapture(currentTarget)
395396
window.addEventListener('scroll', this.hideTooltip, isCaptureMode)
396397
}
397398

standalone/react-tooltip.js

+7-5
Original file line numberDiff line numberDiff line change
@@ -1327,6 +1327,7 @@ Object.defineProperty(exports, "__esModule", {
13271327

13281328
exports.default = function (target) {
13291329
target.prototype.isCapture = function (currentTarget) {
1330+
if (!currentTarget) return false;
13301331
var dataIsCapture = currentTarget.getAttribute('data-iscapture');
13311332
return dataIsCapture && dataIsCapture === 'true' || this.props.isCapture || false;
13321333
};
@@ -1873,9 +1874,10 @@ var ReactTooltip = (0, _staticMethods2.default)(_class = (0, _windowListener2.de
18731874
delayHide: e.currentTarget.getAttribute('data-delay-hide') || this.props.delayHide || 0,
18741875
border: e.currentTarget.getAttribute('data-border') ? e.currentTarget.getAttribute('data-border') === 'true' : this.props.border || false,
18751876
extraClass: e.currentTarget.getAttribute('data-class') || this.props.class || this.props.className || '',
1876-
disable: e.currentTarget.getAttribute('data-tip-disable') ? e.currentTarget.getAttribute('data-tip-disable') === 'true' : this.props.disable || false
1877+
disable: e.currentTarget.getAttribute('data-tip-disable') ? e.currentTarget.getAttribute('data-tip-disable') === 'true' : this.props.disable || false,
1878+
currentTarget: e.currentTarget
18771879
}, function () {
1878-
if (scrollHide) _this5.addScrollListener(e);
1880+
if (scrollHide) _this5.addScrollListener(_this5.state.currentTarget);
18791881
_this5.updateTooltip(e);
18801882

18811883
if (getContent && Array.isArray(getContent)) {
@@ -1912,7 +1914,7 @@ var ReactTooltip = (0, _staticMethods2.default)(_class = (0, _windowListener2.de
19121914

19131915
var placeholder = this.getTooltipContent();
19141916
var delayTime = show ? 0 : parseInt(delayShow, 10);
1915-
var eventTarget = e.currentTarget;
1917+
var eventTarget = e.currentTarget || e.target;
19161918

19171919
if (this.isEmptyTip(placeholder) || disable) return; // if the tooltip is empty, disable the tooltip
19181920
var updateState = function updateState() {
@@ -1987,8 +1989,8 @@ var ReactTooltip = (0, _staticMethods2.default)(_class = (0, _windowListener2.de
19871989

19881990
}, {
19891991
key: 'addScrollListener',
1990-
value: function addScrollListener(e) {
1991-
var isCaptureMode = this.isCapture(e.currentTarget);
1992+
value: function addScrollListener(currentTarget) {
1993+
var isCaptureMode = this.isCapture(currentTarget);
19921994
window.addEventListener('scroll', this.hideTooltip, isCaptureMode);
19931995
}
19941996
}, {

standalone/react-tooltip.min.js

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)