UNPKG

react-aria

Version:
57 lines (53 loc) 2.4 kB
import {useRef as $awe0O$useRef, useCallback as $awe0O$useCallback, useEffect as $awe0O$useEffect} from "react"; /* * Copyright 2020 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. */ function $48a7d519b337145d$export$4eaf04e54aa8eed6() { let globalListeners = (0, $awe0O$useRef)(new Map()); let addGlobalListener = (0, $awe0O$useCallback)((eventTarget, type, listener, options)=>{ // Make sure we remove the listener after it is called with the `once` option. let fn = options?.once ? (...args)=>{ globalListeners.current.delete(listener); listener(...args); } : listener; globalListeners.current.set(listener, { type: type, eventTarget: eventTarget, fn: fn, options: options }); eventTarget.addEventListener(type, fn, options); }, []); let removeGlobalListener = (0, $awe0O$useCallback)((eventTarget, type, listener, options)=>{ let fn = globalListeners.current.get(listener)?.fn || listener; eventTarget.removeEventListener(type, fn, options); globalListeners.current.delete(listener); }, []); let removeAllGlobalListeners = (0, $awe0O$useCallback)(()=>{ globalListeners.current.forEach((value, key)=>{ removeGlobalListener(value.eventTarget, value.type, key, value.options); }); }, [ removeGlobalListener ]); (0, $awe0O$useEffect)(()=>{ return removeAllGlobalListeners; }, [ removeAllGlobalListeners ]); return { addGlobalListener: addGlobalListener, removeGlobalListener: removeGlobalListener, removeAllGlobalListeners: removeAllGlobalListeners }; } export {$48a7d519b337145d$export$4eaf04e54aa8eed6 as useGlobalListeners}; //# sourceMappingURL=useGlobalListeners.mjs.map