@enact/ui
Version:
A collection of simplified unstyled cross-platform UI components for Enact
51 lines (49 loc) • 1.81 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.utilEvent = exports["default"] = void 0;
// A `React.useEvent` hooks is introduced in https://github.com/facebook/react/pull/17651
// The `useEvent` below will be replaced with the `React.useEvent` later.
/*
* Detects if the browser natively supports the scrollend event.
*/
var supportsScrollEnd = function supportsScrollEnd() {
if (typeof window === 'undefined') {
return false;
}
return 'onscrollend' in window;
};
var utilEvent = exports.utilEvent = function utilEvent(eventName) {
var isScrollEndEvent = eventName === 'scrollend';
var hasNativeScrollEnd = isScrollEndEvent && supportsScrollEnd();
return {
addEventListener: function addEventListener(ref, fn, param) {
if (!ref) return;
if (isScrollEndEvent && !hasNativeScrollEnd) {
return;
}
if (typeof window !== 'undefined' && (ref === window || ref === document)) {
ref.addEventListener(eventName, fn, param);
} else if (ref.current) {
ref.current.addEventListener(eventName, fn, param);
} else if (ref && ref.addEventListener) {
ref.addEventListener(eventName, fn, param);
}
},
removeEventListener: function removeEventListener(ref, fn, param) {
if (!ref) return;
if (isScrollEndEvent && !hasNativeScrollEnd) {
return;
}
if (typeof window !== 'undefined' && (ref === window || ref === document)) {
ref.removeEventListener(eventName, fn, param);
} else if (ref.current) {
ref.current.removeEventListener(eventName, fn, param);
} else if (ref && ref.removeEventListener) {
ref.removeEventListener(eventName, fn, param);
}
}
};
};
var _default = exports["default"] = utilEvent;