/* * Copyright 2021 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. */ import {RefObject, useEffect, useRef} from 'react'; export function useEvent( ref: RefObject, event: K, handler: (this: Document, ev: GlobalEventHandlersEventMap[K]) => any, options?: boolean | AddEventListenerOptions ) { let handlerRef = useRef(handler); handlerRef.current = handler; let isDisabled = handler == null; useEffect(() => { if (isDisabled) { return; } let element = ref.current; let handler = (e: GlobalEventHandlersEventMap[K]) => handlerRef.current.call(this, e); element.addEventListener(event, handler, options); return () => { element.removeEventListener(event, handler, options); }; }, [ref, event, options, isDisabled]); }