UNPKG

@react-hook/event

Version:

A React hook for managing event listeners, e.g. removing events when a component unmounts.

1 lines 3.38 kB
{"version":3,"file":"index.dev.mjs","sources":["../../src/index.tsx"],"sourcesContent":["import * as React from 'react'\n\nfunction useEvent<\n T extends Window = Window,\n K extends keyof WindowEventMap = keyof WindowEventMap\n>(\n target: Window | null,\n type: K,\n listener: WindowEventListener<K>,\n cleanup?: (...args: any[]) => void\n): void\nfunction useEvent<\n T extends Document = Document,\n K extends keyof DocumentEventMap = keyof DocumentEventMap\n>(\n target: Document | null,\n type: K,\n listener: DocumentEventListener<K>,\n cleanup?: (...args: any[]) => void\n): void\nfunction useEvent<\n T extends HTMLElement = HTMLElement,\n K extends keyof HTMLElementEventMap = keyof HTMLElementEventMap\n>(\n target: React.RefObject<T> | T | null,\n type: K,\n listener: ElementEventListener<K>,\n cleanup?: (...args: any[]) => void\n): void\nfunction useEvent(target: any, type: any, listener: any, cleanup: any): void {\n const storedListener = React.useRef(listener)\n const storedCleanup = React.useRef(cleanup)\n\n React.useEffect(() => {\n storedListener.current = listener\n storedCleanup.current = cleanup\n })\n\n React.useEffect(() => {\n const targetEl = target && 'current' in target ? target.current : target\n if (!targetEl) return\n\n let didUnsubscribe = 0\n function listener(this: any, ...args: any[]) {\n if (didUnsubscribe) return\n storedListener.current.apply(this, args)\n }\n\n targetEl.addEventListener(type, listener)\n const cleanup = storedCleanup.current\n\n return () => {\n didUnsubscribe = 1\n targetEl.removeEventListener(type, listener)\n cleanup && cleanup()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [target, type])\n}\n\nexport type ElementEventListener<\n K extends keyof HTMLElementEventMap = keyof HTMLElementEventMap\n> = (this: HTMLElement, ev: HTMLElementEventMap[K]) => any\n\nexport type DocumentEventListener<\n K extends keyof DocumentEventMap = keyof DocumentEventMap\n> = (this: Document, ev: DocumentEventMap[K]) => any\n\nexport type WindowEventListener<\n K extends keyof WindowEventMap = keyof WindowEventMap\n> = (this: Document, ev: WindowEventMap[K]) => any\n\nexport default useEvent\n"],"names":["useEvent","target","type","listener","cleanup","storedListener","React","storedCleanup","current","targetEl","didUnsubscribe","args","apply","addEventListener","removeEventListener"],"mappings":";;AA6BA,SAASA,QAAT,CAAkBC,MAAlB,EAA+BC,IAA/B,EAA0CC,QAA1C,EAAyDC,OAAzD,EAA6E;AAC3E,MAAMC,cAAc,GAAGC,MAAA,CAAaH,QAAb,CAAvB;AACA,MAAMI,aAAa,GAAGD,MAAA,CAAaF,OAAb,CAAtB;AAEAE,EAAAA,SAAA,CAAgB,MAAM;AACpBD,IAAAA,cAAc,CAACG,OAAf,GAAyBL,QAAzB;AACAI,IAAAA,aAAa,CAACC,OAAd,GAAwBJ,OAAxB;AACD,GAHD;AAKAE,EAAAA,SAAA,CAAgB,MAAM;AACpB,QAAMG,QAAQ,GAAGR,MAAM,IAAI,aAAaA,MAAvB,GAAgCA,MAAM,CAACO,OAAvC,GAAiDP,MAAlE;AACA,QAAI,CAACQ,QAAL,EAAe;AAEf,QAAIC,cAAc,GAAG,CAArB;;AACA,aAASP,QAAT,GAA6C;AAC3C,UAAIO,cAAJ,EAAoB;;AADuB,wCAAbC,IAAa;AAAbA,QAAAA,IAAa;AAAA;;AAE3CN,MAAAA,cAAc,CAACG,OAAf,CAAuBI,KAAvB,CAA6B,IAA7B,EAAmCD,IAAnC;AACD;;AAEDF,IAAAA,QAAQ,CAACI,gBAAT,CAA0BX,IAA1B,EAAgCC,QAAhC;AACA,QAAMC,OAAO,GAAGG,aAAa,CAACC,OAA9B;AAEA,WAAO,MAAM;AACXE,MAAAA,cAAc,GAAG,CAAjB;AACAD,MAAAA,QAAQ,CAACK,mBAAT,CAA6BZ,IAA7B,EAAmCC,QAAnC;AACAC,MAAAA,OAAO,IAAIA,OAAO,EAAlB;AACD,KAJD,CAboB;AAmBrB,GAnBD,EAmBG,CAACH,MAAD,EAASC,IAAT,CAnBH;AAoBD;;;;"}