Skip to content

Commit cfafab1

Browse files
bdwainAndarist
authored andcommitted
add passive event listener options to removeEventListener
1 parent e15aa06 commit cfafab1

File tree

3 files changed

+37
-21
lines changed

3 files changed

+37
-21
lines changed

dist/react-onclickoutside.js

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,22 @@ var handlersMap = {};
127127
var enabledInstances = {};
128128
var touchEvents = ['touchstart', 'touchmove'];
129129
var IGNORE_CLASS_NAME = 'ignore-react-onclickoutside';
130+
/**
131+
* Options for addEventHandler and removeEventHandler
132+
*/
133+
134+
function getEventHandlerOptions(instance, eventName) {
135+
var handlerOptions = null;
136+
var isTouchEvent = touchEvents.indexOf(eventName) !== -1;
137+
138+
if (isTouchEvent && passiveEventSupport) {
139+
handlerOptions = {
140+
passive: !instance.props.preventDefault
141+
};
142+
}
143+
144+
return handlerOptions;
145+
}
130146
/**
131147
* This function generates the HOC function that you'll use
132148
* in order to impart onOutsideClick listening to an
@@ -135,6 +151,7 @@ var IGNORE_CLASS_NAME = 'ignore-react-onclickoutside';
135151
* onClickOutsideHOC function defined inside setupHOC().
136152
*/
137153

154+
138155
function onClickOutsideHOC(WrappedComponent, config) {
139156
var _class, _temp;
140157

@@ -209,16 +226,7 @@ function onClickOutsideHOC(WrappedComponent, config) {
209226
};
210227

211228
events.forEach(function (eventName) {
212-
var handlerOptions = null;
213-
var isTouchEvent = touchEvents.indexOf(eventName) !== -1;
214-
215-
if (isTouchEvent && passiveEventSupport) {
216-
handlerOptions = {
217-
passive: !_this.props.preventDefault
218-
};
219-
}
220-
221-
document.addEventListener(eventName, handlersMap[_this._uid], handlerOptions);
229+
document.addEventListener(eventName, handlersMap[_this._uid], getEventHandlerOptions(_this, eventName));
222230
});
223231
};
224232

@@ -234,7 +242,7 @@ function onClickOutsideHOC(WrappedComponent, config) {
234242
}
235243

236244
events.forEach(function (eventName) {
237-
return document.removeEventListener(eventName, fn);
245+
return document.removeEventListener(eventName, fn, getEventHandlerOptions(_this, eventName));
238246
});
239247
delete handlersMap[_this._uid];
240248
}

dist/react-onclickoutside.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/index.js

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,19 @@ const enabledInstances = {};
1212
const touchEvents = ['touchstart', 'touchmove'];
1313
export const IGNORE_CLASS_NAME = 'ignore-react-onclickoutside';
1414

15+
/**
16+
* Options for addEventHandler and removeEventHandler
17+
*/
18+
function getEventHandlerOptions(instance, eventName) {
19+
let handlerOptions = null;
20+
const isTouchEvent = touchEvents.indexOf(eventName) !== -1;
21+
22+
if (isTouchEvent && passiveEventSupport) {
23+
handlerOptions = { passive: !instance.props.preventDefault };
24+
}
25+
return handlerOptions;
26+
}
27+
1528
/**
1629
* This function generates the HOC function that you'll use
1730
* in order to impart onOutsideClick listening to an
@@ -154,14 +167,7 @@ export default function onClickOutsideHOC(WrappedComponent, config) {
154167
};
155168

156169
events.forEach(eventName => {
157-
let handlerOptions = null;
158-
const isTouchEvent = touchEvents.indexOf(eventName) !== -1;
159-
160-
if (isTouchEvent && passiveEventSupport) {
161-
handlerOptions = { passive: !this.props.preventDefault };
162-
}
163-
164-
document.addEventListener(eventName, handlersMap[this._uid], handlerOptions);
170+
document.addEventListener(eventName, handlersMap[this._uid], getEventHandlerOptions(this, eventName));
165171
});
166172
};
167173

@@ -178,7 +184,9 @@ export default function onClickOutsideHOC(WrappedComponent, config) {
178184
if (!events.forEach) {
179185
events = [events];
180186
}
181-
events.forEach(eventName => document.removeEventListener(eventName, fn));
187+
events.forEach(eventName =>
188+
document.removeEventListener(eventName, fn, getEventHandlerOptions(this, eventName)),
189+
);
182190
delete handlersMap[this._uid];
183191
}
184192
};

0 commit comments

Comments
 (0)